All Downloads are FREE. Search and download functionalities are using the official Maven repository.

re.model.0.6.1.source-code.model-all.js Maven / Gradle / Ivy

var __extends = this.__extends || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    __.prototype = b.prototype;
    d.prototype = new __();
};
var System = (function () {
    function System() {
    }
    System.gc = function () {
    };
    System.arraycopy = function (src, srcPos, dest, destPos, numElements) {
        for (var i = 0; i < numElements; i++) {
            dest[destPos + i] = src[srcPos + i];
        }
    };
    System.out = {
        println: function (obj) {
            console.log(obj);
        },
        print: function (obj) {
            console.log(obj);
        }
    };
    System.err = {
        println: function (obj) {
            console.log(obj);
        },
        print: function (obj) {
            console.log(obj);
        }
    };
    return System;
})();
Number.prototype.equals = function (other) {
    return this == other;
};
var StringUtils = (function () {
    function StringUtils() {
    }
    StringUtils.copyValueOf = function (data, offset, count) {
        var result = "";
        for (var i = offset; i < offset + count; i++) {
            result += data[i];
        }
        return result;
    };
    return StringUtils;
})();
String.prototype.matches = function (regEx) {
    if (regEx == null) {
        return false;
    }
    else {
        var m = this.match(regEx);
        return m != null && m.length > 0;
    }
};
String.prototype.isEmpty = function () {
    return this.length == 0;
};
String.prototype.equals = function (other) {
    return this == other;
};
String.prototype.hashCode = function () {
    var hash = 0, i, chr, len;
    if (this.length == 0)
        return hash;
    for (i = 0, len = this.length; i < len; i++) {
        chr = this.charCodeAt(i);
        hash = ((hash << 5) - hash) + chr;
        hash |= 0; // Convert to 32bit integer
    }
    return hash;
};
String.prototype.startsWith = function (other) {
    return this.slice(0, other.length) == other;
};
String.prototype.endsWith = function (other) {
    return this.slice(-other.length) == other;
};
Boolean.prototype.equals = function (other) {
    return this == other;
};
var java;
(function (java) {
    var lang;
    (function (lang) {
        var Double = (function () {
            function Double() {
            }
            Double.parseDouble = function (val) {
                return +val;
            };
            return Double;
        })();
        lang.Double = Double;
        var Float = (function () {
            function Float() {
            }
            Float.parseFloat = function (val) {
                return +val;
            };
            return Float;
        })();
        lang.Float = Float;
        var Integer = (function () {
            function Integer() {
            }
            Integer.parseInt = function (val) {
                return +val;
            };
            return Integer;
        })();
        lang.Integer = Integer;
        var Long = (function () {
            function Long() {
            }
            Long.parseLong = function (val) {
                return +val;
            };
            return Long;
        })();
        lang.Long = Long;
        var Boolean = (function () {
            function Boolean() {
            }
            Boolean.parseBoolean = function (val) {
                return val == "true";
            };
            return Boolean;
        })();
        lang.Boolean = Boolean;
        var Short = (function () {
            function Short() {
            }
            Short.parseShort = function (val) {
                return +val;
            };
            Short.MIN_VALUE = -0x8000;
            Short.MAX_VALUE = 0x7FFF;
            return Short;
        })();
        lang.Short = Short;
        var Throwable = (function () {
            function Throwable(message) {
                this.message = message;
                this.error = new Error(message);
            }
            Throwable.prototype.printStackTrace = function () {
                console.error(this.error['stack']);
            };
            return Throwable;
        })();
        lang.Throwable = Throwable;
        var Exception = (function (_super) {
            __extends(Exception, _super);
            function Exception() {
                _super.apply(this, arguments);
            }
            return Exception;
        })(Throwable);
        lang.Exception = Exception;
        var RuntimeException = (function (_super) {
            __extends(RuntimeException, _super);
            function RuntimeException() {
                _super.apply(this, arguments);
            }
            return RuntimeException;
        })(Exception);
        lang.RuntimeException = RuntimeException;
        var IndexOutOfBoundsException = (function (_super) {
            __extends(IndexOutOfBoundsException, _super);
            function IndexOutOfBoundsException() {
                _super.apply(this, arguments);
            }
            return IndexOutOfBoundsException;
        })(Exception);
        lang.IndexOutOfBoundsException = IndexOutOfBoundsException;
        var StringBuilder = (function () {
            function StringBuilder() {
                this.buffer = "";
                this.length = 0;
            }
            StringBuilder.prototype.append = function (val) {
                this.buffer = this.buffer + val;
                length = this.buffer.length;
                return this;
            };
            StringBuilder.prototype.toString = function () {
                return this.buffer;
            };
            return StringBuilder;
        })();
        lang.StringBuilder = StringBuilder;
        var ref;
        (function (ref) {
            var WeakReference = (function () {
                function WeakReference() {
                }
                return WeakReference;
            })();
            ref.WeakReference = WeakReference;
        })(ref = lang.ref || (lang.ref = {}));
    })(lang = java.lang || (java.lang = {}));
    var util;
    (function (util) {
        var Random = (function () {
            function Random() {
            }
            Random.prototype.nextInt = function (max) {
                return Math.random() * max;
            };
            Random.prototype.nextDouble = function () {
                return Math.random();
            };
            return Random;
        })();
        util.Random = Random;
        var Arrays = (function () {
            function Arrays() {
            }
            Arrays.fill = function (data, begin, nbElem, param) {
                var max = begin + nbElem;
                for (var i = begin; i < max; i++) {
                    data[i] = param;
                }
            };
            return Arrays;
        })();
        util.Arrays = Arrays;
        var Collections = (function () {
            function Collections() {
            }
            Collections.reverse = function (p) {
                var temp = new List();
                for (var i = 0; i < p.size(); i++) {
                    temp.add(p.get(i));
                }
                p.clear();
                for (var i = temp.size() - 1; i >= 0; i--) {
                    p.add(temp.get(i));
                }
            };
            Collections.sort = function (p) {
                p.sort();
            };
            return Collections;
        })();
        util.Collections = Collections;
        var XArray = (function () {
            function XArray() {
                Array.apply(this, arguments);
                return new Array();
            }
            XArray.prototype.pop = function () {
                return "";
            };
            XArray.prototype.push = function (val) {
                return 0;
            };
            XArray.prototype.splice = function (newS, arrL) {
            };
            XArray.prototype.indexOf = function (val) {
                return 0;
            };
            XArray.prototype.shift = function () {
                return "";
            };
            XArray.prototype.sort = function () {
            };
            return XArray;
        })();
        util.XArray = XArray;
        XArray["prototype"] = new Array();
        var List = (function (_super) {
            __extends(List, _super);
            function List() {
                _super.apply(this, arguments);
            }
            List.prototype.addAll = function (vals) {
                var tempArray = vals.toArray(null);
                for (var i = 0; i < tempArray.length; i++) {
                    this.push(tempArray[i]);
                }
            };
            List.prototype.clear = function () {
                this.length = 0;
            };
            List.prototype.poll = function () {
                return this.shift();
            };
            List.prototype.remove = function (val) {
            };
            List.prototype.toArray = function (a) {
                return this;
            };
            List.prototype.size = function () {
                return this.length;
            };
            List.prototype.add = function (val) {
                this.push(val);
            };
            List.prototype.get = function (index) {
                return this[index];
            };
            List.prototype.contains = function (val) {
                return this.indexOf(val) != -1;
            };
            List.prototype.isEmpty = function () {
                return this.length == 0;
            };
            return List;
        })(XArray);
        util.List = List;
        var ArrayList = (function (_super) {
            __extends(ArrayList, _super);
            function ArrayList() {
                _super.apply(this, arguments);
            }
            return ArrayList;
        })(List);
        util.ArrayList = ArrayList;
        var LinkedList = (function (_super) {
            __extends(LinkedList, _super);
            function LinkedList() {
                _super.apply(this, arguments);
            }
            return LinkedList;
        })(List);
        util.LinkedList = LinkedList;
        var Map = (function () {
            function Map() {
            }
            Map.prototype.get = function (key) {
                return this[key];
            };
            Map.prototype.put = function (key, value) {
                var previous_val = this[key];
                this[key] = value;
                return previous_val;
            };
            Map.prototype.containsKey = function (key) {
                return this.hasOwnProperty(key);
            };
            Map.prototype.remove = function (key) {
                var tmp = this[key];
                delete this[key];
                return tmp;
            };
            Map.prototype.keySet = function () {
                var result = new HashSet();
                for (var p in this) {
                    if (this.hasOwnProperty(p)) {
                        result.add(p);
                    }
                }
                return result;
            };
            Map.prototype.isEmpty = function () {
                return Object.keys(this).length == 0;
            };
            Map.prototype.values = function () {
                var result = new HashSet();
                for (var p in this) {
                    if (this.hasOwnProperty(p)) {
                        result.add(this[p]);
                    }
                }
                return result;
            };
            Map.prototype.clear = function () {
                for (var p in this) {
                    if (this.hasOwnProperty(p)) {
                        delete this[p];
                    }
                }
            };
            return Map;
        })();
        util.Map = Map;
        var HashMap = (function (_super) {
            __extends(HashMap, _super);
            function HashMap() {
                _super.apply(this, arguments);
            }
            return HashMap;
        })(Map);
        util.HashMap = HashMap;
        var Set = (function () {
            function Set() {
            }
            Set.prototype.add = function (val) {
                this[val] = val;
            };
            Set.prototype.clear = function () {
                for (var p in this) {
                    if (this.hasOwnProperty(p)) {
                        delete this[p];
                    }
                }
            };
            Set.prototype.contains = function (val) {
                return this.hasOwnProperty(val);
            };
            Set.prototype.addAll = function (vals) {
                var tempArray = vals.toArray(null);
                for (var i = 0; i < tempArray.length; i++) {
                    this[tempArray[i]] = tempArray[i];
                }
            };
            Set.prototype.remove = function (val) {
                delete this[val];
            };
            Set.prototype.size = function () {
                return Object.keys(this).length;
            };
            Set.prototype.isEmpty = function () {
                return this.size() == 0;
            };
            Set.prototype.toArray = function (a) {
                for (var ik in this) {
                    a.push(this[ik]);
                }
                return a;
            };
            return Set;
        })();
        util.Set = Set;
        var HashSet = (function (_super) {
            __extends(HashSet, _super);
            function HashSet() {
                _super.apply(this, arguments);
            }
            return HashSet;
        })(Set);
        util.HashSet = HashSet;
    })(util = java.util || (java.util = {}));
})(java || (java = {}));
var org;
(function (org) {
    var junit;
    (function (junit) {
        var Assert = (function () {
            function Assert() {
            }
            Assert.assertNotNull = function (p) {
                if (p == null) {
                    throw "Assert Error " + p + " must not be null";
                }
            };
            Assert.assertNull = function (p) {
                if (p != null) {
                    throw "Assert Error " + p + " must be null";
                }
            };
            Assert.assertEquals = function (p, p2) {
                if (p.equals !== undefined) {
                    if (!p.equals(p2)) {
                        throw "Assert Error \n" + p + "\n must be equal to \n" + p2 + "\n";
                    }
                }
                else {
                    if (p != p2) {
                        throw "Assert Error \n" + p + "\n must be equal to \n" + p2 + "\n";
                    }
                }
            };
            Assert.assertNotEquals = function (p, p2) {
                if (p.equals !== undefined) {
                    if (p.equals(p2)) {
                        throw "Assert Error \n" + p + "\n must not be equal to \n" + p2 + "\n";
                    }
                }
                else {
                    if (p == p2) {
                        throw "Assert Error \n" + p + "\n must not be equal to \n" + p2 + "\n";
                    }
                }
            };
            Assert.assertTrue = function (b) {
                if (!b) {
                    throw "Assert Error " + b + " must be true";
                }
            };
            Assert.assertFalse = function (b) {
                if (b) {
                    throw "Assert Error " + b + " must be false";
                }
            };
            return Assert;
        })();
        junit.Assert = Assert;
    })(junit = org.junit || (org.junit = {}));
})(org || (org = {}));
//# sourceMappingURL=java.js.map
var __extends = this.__extends || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    __.prototype = b.prototype;
    d.prototype = new __();
};
var org;
(function (org) {
    var kevoree;
    (function (kevoree) {
        var modeling;
        (function (modeling) {
            var api;
            (function (api) {
                var KActionType = (function () {
                    function KActionType(code) {
                        this._code = "";
                        this._code = code;
                    }
                    KActionType.prototype.toString = function () {
                        return this._code;
                    };
                    KActionType.prototype.code = function () {
                        return this._code;
                    };
                    KActionType.parse = function (s) {
                        for (var i = 0; i < org.kevoree.modeling.api.KActionType.values().length; i++) {
                            var current = org.kevoree.modeling.api.KActionType.values()[i];
                            if (current.code().equals(s)) {
                                return current;
                            }
                        }
                        return null;
                    };
                    KActionType.prototype.equals = function (other) {
                        return this == other;
                    };
                    KActionType.values = function () {
                        return KActionType._KActionTypeVALUES;
                    };
                    KActionType.CALL = new KActionType("CALL");
                    KActionType.CALL_RESPONSE = new KActionType("CALL_RESPONSE");
                    KActionType.SET = new KActionType("SET");
                    KActionType.ADD = new KActionType("ADD");
                    KActionType.REMOVE = new KActionType("DEL");
                    KActionType.NEW = new KActionType("NEW");
                    KActionType._KActionTypeVALUES = [
                        KActionType.CALL,
                        KActionType.CALL_RESPONSE,
                        KActionType.SET,
                        KActionType.ADD,
                        KActionType.REMOVE,
                        KActionType.NEW
                    ];
                    return KActionType;
                })();
                api.KActionType = KActionType;
                var KConfig = (function () {
                    function KConfig() {
                    }
                    KConfig.TREE_CACHE_SIZE = 3;
                    KConfig.CALLBACK_HISTORY = 1000;
                    KConfig.LONG_SIZE = 53;
                    KConfig.PREFIX_SIZE = 16;
                    KConfig.BEGINNING_OF_TIME = -0x001FFFFFFFFFFFFE;
                    KConfig.END_OF_TIME = 0x001FFFFFFFFFFFFE;
                    KConfig.NULL_LONG = 0x001FFFFFFFFFFFFF;
                    KConfig.KEY_PREFIX_MASK = 0x0000001FFFFFFFFF;
                    KConfig.KEY_SEP = '/';
                    KConfig.KEY_SIZE = 4;
                    KConfig.CACHE_INIT_SIZE = 16;
                    KConfig.CACHE_LOAD_FACTOR = (75 / 100);
                    return KConfig;
                })();
                api.KConfig = KConfig;
                var KInferState = (function () {
                    function KInferState() {
                    }
                    KInferState.prototype.save = function () {
                        throw "Abstract method";
                    };
                    KInferState.prototype.load = function (payload) {
                        throw "Abstract method";
                    };
                    KInferState.prototype.isDirty = function () {
                        throw "Abstract method";
                    };
                    KInferState.prototype.cloneState = function () {
                        throw "Abstract method";
                    };
                    return KInferState;
                })();
                api.KInferState = KInferState;
                var TraceRequest = (function () {
                    function TraceRequest() {
                    }
                    TraceRequest.prototype.equals = function (other) {
                        return this == other;
                    };
                    TraceRequest.values = function () {
                        return TraceRequest._TraceRequestVALUES;
                    };
                    TraceRequest.ATTRIBUTES_ONLY = new TraceRequest();
                    TraceRequest.REFERENCES_ONLY = new TraceRequest();
                    TraceRequest.ATTRIBUTES_REFERENCES = new TraceRequest();
                    TraceRequest._TraceRequestVALUES = [
                        TraceRequest.ATTRIBUTES_ONLY,
                        TraceRequest.REFERENCES_ONLY,
                        TraceRequest.ATTRIBUTES_REFERENCES
                    ];
                    return TraceRequest;
                })();
                api.TraceRequest = TraceRequest;
                var VisitRequest = (function () {
                    function VisitRequest() {
                    }
                    VisitRequest.prototype.equals = function (other) {
                        return this == other;
                    };
                    VisitRequest.values = function () {
                        return VisitRequest._VisitRequestVALUES;
                    };
                    VisitRequest.CHILDREN = new VisitRequest();
                    VisitRequest.CONTAINED = new VisitRequest();
                    VisitRequest.ALL = new VisitRequest();
                    VisitRequest._VisitRequestVALUES = [
                        VisitRequest.CHILDREN,
                        VisitRequest.CONTAINED,
                        VisitRequest.ALL
                    ];
                    return VisitRequest;
                })();
                api.VisitRequest = VisitRequest;
                var VisitResult = (function () {
                    function VisitResult() {
                    }
                    VisitResult.prototype.equals = function (other) {
                        return this == other;
                    };
                    VisitResult.values = function () {
                        return VisitResult._VisitResultVALUES;
                    };
                    VisitResult.CONTINUE = new VisitResult();
                    VisitResult.SKIP = new VisitResult();
                    VisitResult.STOP = new VisitResult();
                    VisitResult._VisitResultVALUES = [
                        VisitResult.CONTINUE,
                        VisitResult.SKIP,
                        VisitResult.STOP
                    ];
                    return VisitResult;
                })();
                api.VisitResult = VisitResult;
                var abs;
                (function (abs) {
                    var AbstractKDataType = (function () {
                        function AbstractKDataType(p_name, p_isEnum) {
                            this._isEnum = false;
                            this._name = p_name;
                            this._isEnum = p_isEnum;
                        }
                        AbstractKDataType.prototype.name = function () {
                            return this._name;
                        };
                        AbstractKDataType.prototype.isEnum = function () {
                            return this._isEnum;
                        };
                        AbstractKDataType.prototype.save = function (src) {
                            if (src != null && this != org.kevoree.modeling.api.meta.PrimitiveTypes.TRANSIENT) {
                                if (this == org.kevoree.modeling.api.meta.PrimitiveTypes.STRING) {
                                    return org.kevoree.modeling.api.json.JsonString.encode(src.toString());
                                }
                                else {
                                    return src.toString();
                                }
                            }
                            return null;
                        };
                        AbstractKDataType.prototype.load = function (payload) {
                            if (this == org.kevoree.modeling.api.meta.PrimitiveTypes.TRANSIENT) {
                                return null;
                            }
                            if (this == org.kevoree.modeling.api.meta.PrimitiveTypes.STRING) {
                                return org.kevoree.modeling.api.json.JsonString.unescape(payload);
                            }
                            if (this == org.kevoree.modeling.api.meta.PrimitiveTypes.LONG) {
                                return java.lang.Long.parseLong(payload);
                            }
                            if (this == org.kevoree.modeling.api.meta.PrimitiveTypes.INT) {
                                return java.lang.Integer.parseInt(payload);
                            }
                            if (this == org.kevoree.modeling.api.meta.PrimitiveTypes.BOOL) {
                                return java.lang.Boolean.parseBoolean(payload);
                            }
                            if (this == org.kevoree.modeling.api.meta.PrimitiveTypes.SHORT) {
                                return java.lang.Short.parseShort(payload);
                            }
                            if (this == org.kevoree.modeling.api.meta.PrimitiveTypes.DOUBLE) {
                                return java.lang.Double.parseDouble(payload);
                            }
                            if (this == org.kevoree.modeling.api.meta.PrimitiveTypes.FLOAT) {
                                return java.lang.Float.parseFloat(payload);
                            }
                            return null;
                        };
                        return AbstractKDataType;
                    })();
                    abs.AbstractKDataType = AbstractKDataType;
                    var AbstractKDefer = (function () {
                        function AbstractKDefer() {
                            this._name = null;
                            this._isDone = false;
                            this._isReady = false;
                            this._nbRecResult = 0;
                            this._nbExpectedResult = 0;
                            this._results = new org.kevoree.modeling.api.map.StringHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                            this._nextTasks = new java.util.ArrayList();
                            this._result = null;
                        }
                        AbstractKDefer.prototype.setDoneOrRegister = function (next) {
                            if (next != null) {
                                this._nextTasks.add(next);
                                return this._isDone;
                            }
                            else {
                                this._isDone = true;
                                for (var i = 0; i < this._nextTasks.size(); i++) {
                                    this._nextTasks.get(i).informParentEnd(this);
                                }
                                return this._isDone;
                            }
                        };
                        AbstractKDefer.prototype.informParentEnd = function (end) {
                            var _this = this;
                            if (end == null) {
                                this._nbRecResult = this._nbRecResult + this._nbExpectedResult;
                            }
                            else {
                                if (end != this) {
                                    var castedEnd = end;
                                    if (castedEnd._results != null) {
                                        if (this._results == null) {
                                            this._results = new org.kevoree.modeling.api.map.StringHashMap(castedEnd._results.size(), org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                        }
                                        castedEnd._results.each(function (key, value) {
                                            _this._results.put(key, value);
                                        });
                                    }
                                    if (castedEnd._result != null) {
                                        if (this._results == null) {
                                            this._results = new org.kevoree.modeling.api.map.StringHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                        }
                                        this._results.put(end.getName(), castedEnd._result);
                                    }
                                    this._nbRecResult--;
                                }
                            }
                            if (this._nbRecResult == 0 && this._isReady) {
                                if (this._job != null) {
                                    this._job(this);
                                }
                                this.setDoneOrRegister(null);
                            }
                        };
                        AbstractKDefer.prototype.wait = function (p_previous) {
                            var _this = this;
                            if (p_previous != this) {
                                if (!p_previous.setDoneOrRegister(this)) {
                                    this._nbExpectedResult++;
                                }
                                else {
                                    var castedEnd = p_previous;
                                    if (castedEnd._results != null) {
                                        if (this._results == null) {
                                            this._results = new org.kevoree.modeling.api.map.StringHashMap(castedEnd._results.size(), org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                        }
                                        castedEnd._results.each(function (key, value) {
                                            _this._results.put(key, value);
                                        });
                                    }
                                    if (castedEnd._result != null) {
                                        if (this._results == null) {
                                            this._results = new org.kevoree.modeling.api.map.StringHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                        }
                                        this._results.put(p_previous.getName(), castedEnd._result);
                                    }
                                }
                            }
                            return this;
                        };
                        AbstractKDefer.prototype.ready = function () {
                            if (!this._isReady) {
                                this._isReady = true;
                                this.informParentEnd(null);
                            }
                            return this;
                        };
                        AbstractKDefer.prototype.next = function () {
                            var nextTask = new org.kevoree.modeling.api.abs.AbstractKDefer();
                            nextTask.wait(this);
                            return nextTask;
                        };
                        AbstractKDefer.prototype.then = function (p_callback) {
                            var _this = this;
                            this.next().setJob(function (currentTask) {
                                if (p_callback != null) {
                                    try {
                                        p_callback(_this.getResult());
                                    }
                                    catch ($ex$) {
                                        if ($ex$ instanceof java.lang.Exception) {
                                            var e = $ex$;
                                            e.printStackTrace();
                                        }
                                    }
                                }
                            }).ready();
                        };
                        AbstractKDefer.prototype.setName = function (p_taskName) {
                            this._name = p_taskName;
                            return this;
                        };
                        AbstractKDefer.prototype.getName = function () {
                            if (this._name == null) {
                                return this.toString();
                            }
                            else {
                                return this._name;
                            }
                        };
                        AbstractKDefer.prototype.chain = function (p_block) {
                            var nextDefer = this.next();
                            var potentialNext = new org.kevoree.modeling.api.abs.AbstractKDefer();
                            nextDefer.setJob(function (currentTask) {
                                var nextNextDefer = p_block(currentTask);
                                potentialNext.wait(nextNextDefer);
                                potentialNext.ready();
                                nextNextDefer.ready();
                            });
                            nextDefer.ready();
                            return potentialNext;
                        };
                        AbstractKDefer.prototype.resultKeys = function () {
                            if (this._results == null) {
                                return new Array();
                            }
                            else {
                                var resultKeys = new Array();
                                var indexInsert = [0];
                                this._results.each(function (key, value) {
                                    resultKeys[indexInsert[0]] = key;
                                    indexInsert[0]++;
                                });
                                return resultKeys;
                            }
                        };
                        AbstractKDefer.prototype.resultByName = function (p_name) {
                            if (this._results == null) {
                                return null;
                            }
                            return this._results.get(p_name);
                        };
                        AbstractKDefer.prototype.resultByDefer = function (defer) {
                            if (this._results == null) {
                                return null;
                            }
                            return this._results.get(defer.getName());
                        };
                        AbstractKDefer.prototype.addDeferResult = function (p_result) {
                            this._result = p_result;
                        };
                        AbstractKDefer.prototype.clearResults = function () {
                            if (this._results != null) {
                                this._results = null;
                            }
                        };
                        AbstractKDefer.prototype.getResult = function () {
                            if (this._isDone) {
                                return this._result;
                            }
                            else {
                                throw new java.lang.Exception("Task is not executed yet !");
                            }
                        };
                        AbstractKDefer.prototype.isDone = function () {
                            return this._isDone;
                        };
                        AbstractKDefer.prototype.setJob = function (p_kjob) {
                            this._job = p_kjob;
                            return this;
                        };
                        return AbstractKDefer;
                    })();
                    abs.AbstractKDefer = AbstractKDefer;
                    var AbstractKDeferWrapper = (function (_super) {
                        __extends(AbstractKDeferWrapper, _super);
                        function AbstractKDeferWrapper() {
                            _super.call(this);
                            this._callback = null;
                            var selfPointer = this;
                            this._callback = function (a) {
                                selfPointer._isReady = true;
                                selfPointer.addDeferResult(a);
                                selfPointer.setDoneOrRegister(null);
                            };
                        }
                        AbstractKDeferWrapper.prototype.initCallback = function () {
                            return this._callback;
                        };
                        AbstractKDeferWrapper.prototype.wait = function (previous) {
                            throw new java.lang.RuntimeException(AbstractKDeferWrapper.FORBIDDEN_TASK);
                        };
                        AbstractKDeferWrapper.prototype.setJob = function (p_kjob) {
                            throw new java.lang.RuntimeException(AbstractKDeferWrapper.FORBIDDEN_TASK);
                        };
                        AbstractKDeferWrapper.prototype.ready = function () {
                            return this;
                        };
                        AbstractKDeferWrapper.FORBIDDEN_TASK = "Await and SetJob actions are forbidden on wrapped tasks, please create a sub defer";
                        return AbstractKDeferWrapper;
                    })(org.kevoree.modeling.api.abs.AbstractKDefer);
                    abs.AbstractKDeferWrapper = AbstractKDeferWrapper;
                    var AbstractKModel = (function () {
                        function AbstractKModel() {
                            this._manager = new org.kevoree.modeling.api.data.manager.DefaultKDataManager(this);
                            this._key = this._manager.nextModelKey();
                        }
                        AbstractKModel.prototype.metaModel = function () {
                            throw "Abstract method";
                        };
                        AbstractKModel.prototype.connect = function () {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            this._manager.connect(task.initCallback());
                            return task;
                        };
                        AbstractKModel.prototype.close = function () {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            this._manager.close(task.initCallback());
                            return task;
                        };
                        AbstractKModel.prototype.manager = function () {
                            return this._manager;
                        };
                        AbstractKModel.prototype.newUniverse = function () {
                            var nextKey = this._manager.nextUniverseKey();
                            var newDimension = this.internal_create(nextKey);
                            this.manager().initUniverse(newDimension, null);
                            return newDimension;
                        };
                        AbstractKModel.prototype.internal_create = function (key) {
                            throw "Abstract method";
                        };
                        AbstractKModel.prototype.universe = function (key) {
                            var newDimension = this.internal_create(key);
                            this.manager().initUniverse(newDimension, null);
                            return newDimension;
                        };
                        AbstractKModel.prototype.save = function () {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            this._manager.save(task.initCallback());
                            return task;
                        };
                        AbstractKModel.prototype.discard = function () {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            this._manager.discard(null, task.initCallback());
                            return task;
                        };
                        AbstractKModel.prototype.setContentDeliveryDriver = function (p_driver) {
                            this.manager().setContentDeliveryDriver(p_driver);
                            return this;
                        };
                        AbstractKModel.prototype.setScheduler = function (p_scheduler) {
                            this.manager().setScheduler(p_scheduler);
                            return this;
                        };
                        AbstractKModel.prototype.setOperation = function (metaOperation, operation) {
                            this.manager().operationManager().registerOperation(metaOperation, operation, null);
                        };
                        AbstractKModel.prototype.setInstanceOperation = function (metaOperation, target, operation) {
                            this.manager().operationManager().registerOperation(metaOperation, operation, target);
                        };
                        AbstractKModel.prototype.defer = function () {
                            return new org.kevoree.modeling.api.abs.AbstractKDefer();
                        };
                        AbstractKModel.prototype.key = function () {
                            return this._key;
                        };
                        AbstractKModel.prototype.clearListenerGroup = function (groupID) {
                            this.manager().cdn().unregisterGroup(groupID);
                        };
                        AbstractKModel.prototype.nextGroup = function () {
                            return this.manager().nextGroupKey();
                        };
                        return AbstractKModel;
                    })();
                    abs.AbstractKModel = AbstractKModel;
                    var AbstractKObject = (function () {
                        function AbstractKObject(p_view, p_uuid, p_metaClass) {
                            this._view = p_view;
                            this._uuid = p_uuid;
                            this._metaClass = p_metaClass;
                            p_view.universe().model().manager().cache().monitor(this);
                        }
                        AbstractKObject.prototype.view = function () {
                            return this._view;
                        };
                        AbstractKObject.prototype.uuid = function () {
                            return this._uuid;
                        };
                        AbstractKObject.prototype.metaClass = function () {
                            return this._metaClass;
                        };
                        AbstractKObject.prototype.now = function () {
                            return this._view.now();
                        };
                        AbstractKObject.prototype.universe = function () {
                            return this._view.universe();
                        };
                        AbstractKObject.prototype.parentUuid = function () {
                            var raw = this._view.universe().model().manager().entry(this, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                            if (raw != null) {
                                var parentKey = raw.getRef(org.kevoree.modeling.api.data.manager.Index.PARENT_INDEX);
                                if (parentKey != null && parentKey.length > 0) {
                                    return parentKey[0];
                                }
                            }
                            return org.kevoree.modeling.api.KConfig.NULL_LONG;
                        };
                        AbstractKObject.prototype.timeWalker = function () {
                            return new org.kevoree.modeling.api.abs.AbstractTimeWalker(this);
                        };
                        AbstractKObject.prototype.parent = function () {
                            var parentKID = this.parentUuid();
                            if (parentKID == org.kevoree.modeling.api.KConfig.NULL_LONG) {
                                var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                                task.initCallback()(null);
                                return task;
                            }
                            else {
                                return this._view.lookup(parentKID);
                            }
                        };
                        AbstractKObject.prototype.referenceInParent = function () {
                            var raw = this._view.universe().model().manager().entry(this, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                            if (raw == null) {
                                return null;
                            }
                            else {
                                return raw.get(org.kevoree.modeling.api.data.manager.Index.REF_IN_PARENT_INDEX);
                            }
                        };
                        AbstractKObject.prototype.delete = function () {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            var toRemove = this;
                            var rawPayload = this._view.universe().model().manager().entry(this, org.kevoree.modeling.api.data.manager.AccessMode.DELETE);
                            if (rawPayload == null) {
                                task.initCallback()(new java.lang.Exception(AbstractKObject.OUT_OF_CACHE_MSG));
                            }
                            else {
                                var inboundsKeys = rawPayload.getRef(org.kevoree.modeling.api.data.manager.Index.INBOUNDS_INDEX);
                                if (inboundsKeys != null) {
                                    try {
                                        this.view().internalLookupAll(inboundsKeys, function (resolved) {
                                            for (var i = 0; i < resolved.length; i++) {
                                                if (resolved[i] != null) {
                                                    var linkedReferences = resolved[i].referencesWith(toRemove);
                                                    for (var j = 0; j < linkedReferences.length; j++) {
                                                        resolved[i].internal_mutate(org.kevoree.modeling.api.KActionType.REMOVE, linkedReferences[j], toRemove, false, true);
                                                    }
                                                }
                                            }
                                            task.initCallback()(null);
                                        });
                                    }
                                    catch ($ex$) {
                                        if ($ex$ instanceof java.lang.Exception) {
                                            var e = $ex$;
                                            e.printStackTrace();
                                        }
                                    }
                                }
                                else {
                                    task.initCallback()(new java.lang.Exception(AbstractKObject.OUT_OF_CACHE_MSG));
                                }
                            }
                            return task;
                        };
                        AbstractKObject.prototype.select = function (query) {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            if (!org.kevoree.modeling.api.util.Checker.isDefined(query)) {
                                task.initCallback()(new Array());
                            }
                            else {
                                var cleanedQuery = query;
                                if (cleanedQuery.startsWith("/")) {
                                    cleanedQuery = cleanedQuery.substring(1);
                                }
                                if (query.startsWith("/")) {
                                    var finalCleanedQuery = cleanedQuery;
                                    this.universe().model().manager().getRoot(this.view(), function (rootObj) {
                                        if (rootObj == null) {
                                            task.initCallback()(new Array());
                                        }
                                        else {
                                            org.kevoree.modeling.api.traversal.selector.KSelector.select(rootObj, finalCleanedQuery, task.initCallback());
                                        }
                                    });
                                }
                                else {
                                    org.kevoree.modeling.api.traversal.selector.KSelector.select(this, query, task.initCallback());
                                }
                            }
                            return task;
                        };
                        AbstractKObject.prototype.listen = function (groupId, listener) {
                            this.universe().model().manager().cdn().registerListener(groupId, this, listener);
                        };
                        AbstractKObject.prototype.domainKey = function () {
                            var builder = new java.lang.StringBuilder();
                            var atts = this.metaClass().metaAttributes();
                            for (var i = 0; i < atts.length; i++) {
                                var att = atts[i];
                                if (att.key()) {
                                    if (builder.length != 0) {
                                        builder.append(",");
                                    }
                                    builder.append(att.metaName());
                                    builder.append("=");
                                    var payload = this.get(att);
                                    if (payload != null) {
                                        builder.append(payload.toString());
                                    }
                                }
                            }
                            var result = builder.toString();
                            if (result.equals("")) {
                                return this.uuid() + "";
                            }
                            else {
                                return result;
                            }
                        };
                        AbstractKObject.prototype.get = function (p_attribute) {
                            var transposed = this.internal_transpose_att(p_attribute);
                            if (transposed == null) {
                                throw new java.lang.RuntimeException("Bad KMF usage, the attribute named " + p_attribute.metaName() + " is not part of " + this.metaClass().metaName());
                            }
                            else {
                                return transposed.strategy().extrapolate(this, transposed);
                            }
                        };
                        AbstractKObject.prototype.set = function (p_attribute, payload) {
                            var transposed = this.internal_transpose_att(p_attribute);
                            if (transposed == null) {
                                throw new java.lang.RuntimeException("Bad KMF usage, the attribute named " + p_attribute.metaName() + " is not part of " + this.metaClass().metaName());
                            }
                            else {
                                transposed.strategy().mutate(this, transposed, payload);
                            }
                        };
                        AbstractKObject.prototype.removeFromContainer = function (param) {
                            if (param != null && param.parentUuid() != org.kevoree.modeling.api.KConfig.NULL_LONG && param.parentUuid() != this._uuid) {
                                this.view().lookup(param.parentUuid()).then(function (parent) {
                                    parent.internal_mutate(org.kevoree.modeling.api.KActionType.REMOVE, param.referenceInParent(), param, true, false);
                                });
                            }
                        };
                        AbstractKObject.prototype.mutate = function (actionType, metaReference, param) {
                            this.internal_mutate(actionType, metaReference, param, true, false);
                        };
                        AbstractKObject.prototype.internal_mutate = function (actionType, metaReferenceP, param, setOpposite, inDelete) {
                            var _this = this;
                            var metaReference = this.internal_transpose_ref(metaReferenceP);
                            if (metaReference == null) {
                                if (metaReferenceP == null) {
                                    throw new java.lang.RuntimeException("Bad KMF usage, the reference " + " is null in metaClass named " + this.metaClass().metaName());
                                }
                                else {
                                    throw new java.lang.RuntimeException("Bad KMF usage, the reference named " + metaReferenceP.metaName() + " is not part of " + this.metaClass().metaName());
                                }
                            }
                            if (actionType.equals(org.kevoree.modeling.api.KActionType.ADD)) {
                                if (metaReference.single()) {
                                    this.internal_mutate(org.kevoree.modeling.api.KActionType.SET, metaReference, param, setOpposite, inDelete);
                                }
                                else {
                                    var raw = this.view().universe().model().manager().entry(this, org.kevoree.modeling.api.data.manager.AccessMode.WRITE);
                                    var previousList = raw.getRef(metaReference.index());
                                    if (previousList == null) {
                                        previousList = new Array();
                                        previousList[0] = param.uuid();
                                    }
                                    else {
                                        previousList = org.kevoree.modeling.api.util.ArrayUtils.add(previousList, param.uuid());
                                    }
                                    raw.set(metaReference.index(), previousList);
                                    if (metaReference.opposite() != null && setOpposite) {
                                        param.internal_mutate(org.kevoree.modeling.api.KActionType.ADD, metaReference.opposite(), this, false, inDelete);
                                    }
                                    if (metaReference.contained()) {
                                        this.removeFromContainer(param);
                                        param.set_parent(this._uuid, metaReference);
                                    }
                                    var rawParam = this.view().universe().model().manager().entry(param, org.kevoree.modeling.api.data.manager.AccessMode.WRITE);
                                    var previousInbounds = rawParam.getRef(org.kevoree.modeling.api.data.manager.Index.INBOUNDS_INDEX);
                                    if (previousInbounds == null) {
                                        previousInbounds = new Array();
                                        previousInbounds[0] = this.uuid();
                                    }
                                    else {
                                        previousInbounds = org.kevoree.modeling.api.util.ArrayUtils.add(previousInbounds, this.uuid());
                                    }
                                    rawParam.set(org.kevoree.modeling.api.data.manager.Index.INBOUNDS_INDEX, previousInbounds);
                                }
                            }
                            else {
                                if (actionType.equals(org.kevoree.modeling.api.KActionType.SET)) {
                                    if (!metaReference.single()) {
                                        this.internal_mutate(org.kevoree.modeling.api.KActionType.ADD, metaReference, param, setOpposite, inDelete);
                                    }
                                    else {
                                        if (param == null) {
                                            this.internal_mutate(org.kevoree.modeling.api.KActionType.REMOVE, metaReference, null, setOpposite, inDelete);
                                        }
                                        else {
                                            var payload = this.view().universe().model().manager().entry(this, org.kevoree.modeling.api.data.manager.AccessMode.WRITE);
                                            var previous = payload.getRef(metaReference.index());
                                            if (previous != null) {
                                                this.internal_mutate(org.kevoree.modeling.api.KActionType.REMOVE, metaReference, null, setOpposite, inDelete);
                                            }
                                            var singleValue = new Array();
                                            singleValue[0] = param.uuid();
                                            payload.set(metaReference.index(), singleValue);
                                            if (metaReference.contained()) {
                                                this.removeFromContainer(param);
                                                param.set_parent(this._uuid, metaReference);
                                            }
                                            var rawParam = this.view().universe().model().manager().entry(param, org.kevoree.modeling.api.data.manager.AccessMode.WRITE);
                                            var previousInbounds = rawParam.getRef(org.kevoree.modeling.api.data.manager.Index.INBOUNDS_INDEX);
                                            if (previousInbounds == null) {
                                                previousInbounds = new Array();
                                                previousInbounds[0] = this.uuid();
                                            }
                                            else {
                                                previousInbounds = org.kevoree.modeling.api.util.ArrayUtils.add(previousInbounds, this.uuid());
                                            }
                                            rawParam.set(org.kevoree.modeling.api.data.manager.Index.INBOUNDS_INDEX, previousInbounds);
                                            var self = this;
                                            if (metaReference.opposite() != null && setOpposite) {
                                                if (previous != null) {
                                                    this.view().internalLookupAll(previous, function (kObjects) {
                                                        for (var i = 0; i < kObjects.length; i++) {
                                                            kObjects[i].internal_mutate(org.kevoree.modeling.api.KActionType.REMOVE, metaReference.opposite(), self, false, inDelete);
                                                        }
                                                    });
                                                }
                                                param.internal_mutate(org.kevoree.modeling.api.KActionType.ADD, metaReference.opposite(), this, false, inDelete);
                                            }
                                        }
                                    }
                                }
                                else {
                                    if (actionType.equals(org.kevoree.modeling.api.KActionType.REMOVE)) {
                                        if (metaReference.single()) {
                                            var raw = this.view().universe().model().manager().entry(this, org.kevoree.modeling.api.data.manager.AccessMode.WRITE);
                                            var previousKid = raw.getRef(metaReference.index());
                                            raw.set(metaReference.index(), null);
                                            if (previousKid != null) {
                                                var self = this;
                                                this._view.universe().model().manager().lookupAll(this._view, previousKid, function (resolvedParams) {
                                                    if (resolvedParams != null) {
                                                        for (var dd = 0; dd < resolvedParams.length; dd++) {
                                                            if (resolvedParams[dd] != null) {
                                                                var resolvedParam = resolvedParams[dd];
                                                                if (metaReference.contained()) {
                                                                    resolvedParam.set_parent(org.kevoree.modeling.api.KConfig.NULL_LONG, null);
                                                                }
                                                                if (metaReference.opposite() != null && setOpposite) {
                                                                    resolvedParam.internal_mutate(org.kevoree.modeling.api.KActionType.REMOVE, metaReference.opposite(), self, false, inDelete);
                                                                }
                                                                var rawParam = _this.view().universe().model().manager().entry(resolvedParam, org.kevoree.modeling.api.data.manager.AccessMode.WRITE);
                                                                if (rawParam != null) {
                                                                    var previousInbounds = rawParam.getRef(org.kevoree.modeling.api.data.manager.Index.INBOUNDS_INDEX);
                                                                    if (previousInbounds != null) {
                                                                        previousInbounds = org.kevoree.modeling.api.util.ArrayUtils.remove(previousInbounds, _this.uuid());
                                                                        rawParam.set(org.kevoree.modeling.api.data.manager.Index.INBOUNDS_INDEX, previousInbounds);
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                });
                                            }
                                        }
                                        else {
                                            var payload = this.view().universe().model().manager().entry(this, org.kevoree.modeling.api.data.manager.AccessMode.WRITE);
                                            var previous = payload.getRef(metaReference.index());
                                            if (previous != null) {
                                                try {
                                                    previous = org.kevoree.modeling.api.util.ArrayUtils.remove(previous, param.uuid());
                                                    payload.set(metaReference.index(), previous);
                                                }
                                                catch ($ex$) {
                                                    if ($ex$ instanceof java.lang.Exception) {
                                                        var e = $ex$;
                                                        e.printStackTrace();
                                                    }
                                                }
                                                if (!inDelete && metaReference.contained()) {
                                                    param.set_parent(org.kevoree.modeling.api.KConfig.NULL_LONG, null);
                                                }
                                                if (metaReference.opposite() != null && setOpposite) {
                                                    param.internal_mutate(org.kevoree.modeling.api.KActionType.REMOVE, metaReference.opposite(), this, false, inDelete);
                                                }
                                            }
                                            if (!inDelete) {
                                                var rawParam = this.view().universe().model().manager().entry(param, org.kevoree.modeling.api.data.manager.AccessMode.WRITE);
                                                if (rawParam != null && rawParam.get(org.kevoree.modeling.api.data.manager.Index.INBOUNDS_INDEX) != null) {
                                                    var previousInbounds;
                                                    try {
                                                        previousInbounds = rawParam.get(org.kevoree.modeling.api.data.manager.Index.INBOUNDS_INDEX);
                                                    }
                                                    catch ($ex$) {
                                                        if ($ex$ instanceof java.lang.Exception) {
                                                            var e = $ex$;
                                                            e.printStackTrace();
                                                            previousInbounds = new Array();
                                                        }
                                                    }
                                                    rawParam.set(org.kevoree.modeling.api.data.manager.Index.INBOUNDS_INDEX, previousInbounds);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        };
                        AbstractKObject.prototype.size = function (p_metaReference) {
                            var transposed = this.internal_transpose_ref(p_metaReference);
                            if (transposed == null) {
                                throw new java.lang.RuntimeException("Bad KMF usage, the attribute named " + p_metaReference.metaName() + " is not part of " + this.metaClass().metaName());
                            }
                            else {
                                var raw = this.view().universe().model().manager().entry(this, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                                if (raw != null) {
                                    var ref = raw.get(transposed.index());
                                    if (ref == null) {
                                        return 0;
                                    }
                                    else {
                                        try {
                                            var castedRefArray = ref;
                                            return castedRefArray.length;
                                        }
                                        catch ($ex$) {
                                            if ($ex$ instanceof java.lang.Exception) {
                                                var e = $ex$;
                                                e.printStackTrace();
                                                return 0;
                                            }
                                        }
                                    }
                                }
                                else {
                                    return 0;
                                }
                            }
                        };
                        AbstractKObject.prototype.internal_ref = function (p_metaReference, callback) {
                            var transposed = this.internal_transpose_ref(p_metaReference);
                            if (transposed == null) {
                                throw new java.lang.RuntimeException("Bad KMF usage, the reference named " + p_metaReference.metaName() + " is not part of " + this.metaClass().metaName());
                            }
                            else {
                                var raw = this.view().universe().model().manager().entry(this, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                                if (raw == null) {
                                    callback(new Array());
                                }
                                else {
                                    var o = raw.get(transposed.index());
                                    if (o == null) {
                                        callback(new Array());
                                    }
                                    else {
                                        this.view().internalLookupAll(o, callback);
                                    }
                                }
                            }
                        };
                        AbstractKObject.prototype.ref = function (p_metaReference) {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            this.internal_ref(p_metaReference, task.initCallback());
                            return task;
                        };
                        AbstractKObject.prototype.inferRef = function (p_metaReference) {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            return task;
                        };
                        AbstractKObject.prototype.visitAttributes = function (visitor) {
                            if (!org.kevoree.modeling.api.util.Checker.isDefined(visitor)) {
                                return;
                            }
                            var metaAttributes = this.metaClass().metaAttributes();
                            for (var i = 0; i < metaAttributes.length; i++) {
                                visitor(metaAttributes[i], this.get(metaAttributes[i]));
                            }
                        };
                        AbstractKObject.prototype.visit = function (p_request, p_visitor) {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            if (p_request.equals(org.kevoree.modeling.api.VisitRequest.CHILDREN)) {
                                this.internal_visit(p_visitor, task.initCallback(), false, false, null, null);
                            }
                            else {
                                if (p_request.equals(org.kevoree.modeling.api.VisitRequest.ALL)) {
                                    this.internal_visit(p_visitor, task.initCallback(), true, false, new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR), new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR));
                                }
                                else {
                                    if (p_request.equals(org.kevoree.modeling.api.VisitRequest.CONTAINED)) {
                                        this.internal_visit(p_visitor, task.initCallback(), true, true, null, null);
                                    }
                                }
                            }
                            return task;
                        };
                        AbstractKObject.prototype.internal_visit = function (visitor, end, deep, containedOnly, visited, traversed) {
                            if (!org.kevoree.modeling.api.util.Checker.isDefined(visitor)) {
                                return;
                            }
                            if (traversed != null) {
                                traversed.put(this._uuid, this._uuid);
                            }
                            var toResolveIds = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                            for (var i = 0; i < this.metaClass().metaReferences().length; i++) {
                                var reference = this.metaClass().metaReferences()[i];
                                if (!(containedOnly && !reference.contained())) {
                                    var raw = this.view().universe().model().manager().entry(this, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                                    if (raw != null) {
                                        var obj = raw.get(reference.index());
                                        if (obj != null) {
                                            try {
                                                var idArr = obj;
                                                for (var k = 0; k < idArr.length; k++) {
                                                    if (traversed == null || !traversed.containsKey(idArr[k])) {
                                                        toResolveIds.put(idArr[k], idArr[k]);
                                                    }
                                                }
                                            }
                                            catch ($ex$) {
                                                if ($ex$ instanceof java.lang.Exception) {
                                                    var e = $ex$;
                                                    e.printStackTrace();
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            if (toResolveIds.size() == 0) {
                                if (org.kevoree.modeling.api.util.Checker.isDefined(end)) {
                                    end(null);
                                }
                            }
                            else {
                                var trimmed = new Array();
                                var inserted = [0];
                                toResolveIds.each(function (key, value) {
                                    trimmed[inserted[0]] = key;
                                    inserted[0]++;
                                });
                                this.view().internalLookupAll(trimmed, function (resolvedArr) {
                                    var nextDeep = new java.util.ArrayList();
                                    for (var i = 0; i < resolvedArr.length; i++) {
                                        var resolved = resolvedArr[i];
                                        var result = org.kevoree.modeling.api.VisitResult.CONTINUE;
                                        if (resolved != null) {
                                            if (visitor != null && (visited == null || !visited.containsKey(resolved.uuid()))) {
                                                result = visitor(resolved);
                                            }
                                            if (visited != null) {
                                                visited.put(resolved.uuid(), resolved.uuid());
                                            }
                                        }
                                        if (result != null && result.equals(org.kevoree.modeling.api.VisitResult.STOP)) {
                                            if (org.kevoree.modeling.api.util.Checker.isDefined(end)) {
                                                end(null);
                                            }
                                        }
                                        else {
                                            if (deep) {
                                                if (result.equals(org.kevoree.modeling.api.VisitResult.CONTINUE)) {
                                                    if (traversed == null || !traversed.containsKey(resolved.uuid())) {
                                                        nextDeep.add(resolved);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    if (!nextDeep.isEmpty()) {
                                        var index = new Array();
                                        index[0] = 0;
                                        var next = new java.util.ArrayList();
                                        next.add(function (throwable) {
                                            index[0] = index[0] + 1;
                                            if (index[0] == nextDeep.size()) {
                                                if (org.kevoree.modeling.api.util.Checker.isDefined(end)) {
                                                    end(null);
                                                }
                                            }
                                            else {
                                                var abstractKObject = nextDeep.get(index[0]);
                                                if (containedOnly) {
                                                    abstractKObject.internal_visit(visitor, next.get(0), true, true, visited, traversed);
                                                }
                                                else {
                                                    abstractKObject.internal_visit(visitor, next.get(0), true, false, visited, traversed);
                                                }
                                            }
                                        });
                                        var abstractKObject = nextDeep.get(index[0]);
                                        if (containedOnly) {
                                            abstractKObject.internal_visit(visitor, next.get(0), true, true, visited, traversed);
                                        }
                                        else {
                                            abstractKObject.internal_visit(visitor, next.get(0), true, false, visited, traversed);
                                        }
                                    }
                                    else {
                                        if (org.kevoree.modeling.api.util.Checker.isDefined(end)) {
                                            end(null);
                                        }
                                    }
                                });
                            }
                        };
                        AbstractKObject.prototype.toJSON = function () {
                            var raw = this.view().universe().model().manager().entry(this, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                            if (raw != null) {
                                return org.kevoree.modeling.api.data.manager.JsonRaw.encode(raw, this._uuid, this._metaClass, false);
                            }
                            else {
                                return null;
                            }
                        };
                        AbstractKObject.prototype.toString = function () {
                            return this.toJSON();
                        };
                        AbstractKObject.prototype.inbounds = function () {
                            var rawPayload = this.view().universe().model().manager().entry(this, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                            if (rawPayload != null) {
                                var payload = rawPayload.getRef(org.kevoree.modeling.api.data.manager.Index.INBOUNDS_INDEX);
                                if (payload != null) {
                                    try {
                                        return this._view.lookupAll(payload);
                                    }
                                    catch ($ex$) {
                                        if ($ex$ instanceof java.lang.Exception) {
                                            var e = $ex$;
                                            e.printStackTrace();
                                            return this._view.lookupAll(new Array());
                                        }
                                    }
                                }
                                else {
                                    var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                                    task.initCallback()(new Array());
                                    return task;
                                }
                            }
                            else {
                                var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                                task.initCallback()(new Array());
                                return task;
                            }
                        };
                        AbstractKObject.prototype.set_parent = function (p_parentKID, p_metaReference) {
                            var raw = this._view.universe().model().manager().entry(this, org.kevoree.modeling.api.data.manager.AccessMode.WRITE);
                            if (raw != null) {
                                if (p_parentKID != org.kevoree.modeling.api.KConfig.NULL_LONG) {
                                    var parentKey = new Array();
                                    parentKey[0] = p_parentKID;
                                    raw.set(org.kevoree.modeling.api.data.manager.Index.PARENT_INDEX, parentKey);
                                }
                                else {
                                    raw.set(org.kevoree.modeling.api.data.manager.Index.PARENT_INDEX, null);
                                }
                                raw.set(org.kevoree.modeling.api.data.manager.Index.REF_IN_PARENT_INDEX, p_metaReference);
                            }
                        };
                        AbstractKObject.prototype.equals = function (obj) {
                            if (!(obj instanceof org.kevoree.modeling.api.abs.AbstractKObject)) {
                                return false;
                            }
                            else {
                                var casted = obj;
                                return (casted.uuid() == this._uuid) && this._view.equals(casted._view);
                            }
                        };
                        AbstractKObject.prototype.hashCode = function () {
                            var hashString = this.uuid() + "-" + this.view().now() + "-" + this.view().universe().key();
                            return hashString.hashCode();
                        };
                        AbstractKObject.prototype.jump = function (time) {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            this.view().universe().time(time).lookup(this._uuid).then(function (kObject) {
                                var casted = null;
                                try {
                                    casted = kObject;
                                }
                                catch ($ex$) {
                                    if ($ex$ instanceof java.lang.Throwable) {
                                        var e = $ex$;
                                        e.printStackTrace();
                                    }
                                }
                                task.initCallback()(casted);
                            });
                            return task;
                        };
                        AbstractKObject.prototype.internal_transpose_ref = function (p) {
                            if (!org.kevoree.modeling.api.util.Checker.isDefined(p)) {
                                return null;
                            }
                            else {
                                return this.metaClass().metaByName(p.metaName());
                            }
                        };
                        AbstractKObject.prototype.internal_transpose_att = function (p) {
                            if (!org.kevoree.modeling.api.util.Checker.isDefined(p)) {
                                return null;
                            }
                            else {
                                return this.metaClass().metaByName(p.metaName());
                            }
                        };
                        AbstractKObject.prototype.internal_transpose_op = function (p) {
                            if (!org.kevoree.modeling.api.util.Checker.isDefined(p)) {
                                return null;
                            }
                            else {
                                return this.metaClass().metaByName(p.metaName());
                            }
                        };
                        AbstractKObject.prototype.traversal = function () {
                            return new org.kevoree.modeling.api.traversal.DefaultKTraversal(this);
                        };
                        AbstractKObject.prototype.referencesWith = function (o) {
                            if (org.kevoree.modeling.api.util.Checker.isDefined(o)) {
                                var raw = this._view.universe().model().manager().entry(this, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                                if (raw != null) {
                                    var allReferences = this.metaClass().metaReferences();
                                    var selected = new java.util.ArrayList();
                                    for (var i = 0; i < allReferences.length; i++) {
                                        var rawI = raw.getRef(allReferences[i].index());
                                        if (rawI != null) {
                                            if (org.kevoree.modeling.api.util.ArrayUtils.contains(rawI, o.uuid()) != -1) {
                                                selected.add(allReferences[i]);
                                            }
                                        }
                                    }
                                    return selected.toArray(new Array());
                                }
                                else {
                                    return new Array();
                                }
                            }
                            else {
                                return new Array();
                            }
                        };
                        AbstractKObject.prototype.call = function (p_operation, p_params) {
                            var temp_task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            this.view().universe().model().manager().operationManager().call(this, p_operation, p_params, temp_task.initCallback());
                            return temp_task;
                        };
                        AbstractKObject.prototype.inferObjects = function () {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            return task;
                        };
                        AbstractKObject.prototype.inferAttribute = function (attribute) {
                            return null;
                        };
                        AbstractKObject.prototype.inferCall = function (operation, params) {
                            var temp_task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            return temp_task;
                        };
                        AbstractKObject.OUT_OF_CACHE_MSG = "Out of cache Error";
                        return AbstractKObject;
                    })();
                    abs.AbstractKObject = AbstractKObject;
                    var AbstractKObjectInfer = (function (_super) {
                        __extends(AbstractKObjectInfer, _super);
                        function AbstractKObjectInfer(p_view, p_uuid, p_universeTree, p_metaClass) {
                            _super.call(this, p_view, p_uuid, p_metaClass);
                        }
                        AbstractKObjectInfer.prototype.readOnlyState = function () {
                            var raw = this.view().universe().model().manager().entry(this, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                            if (raw != null) {
                                if (raw.get(org.kevoree.modeling.api.meta.MetaInferClass.getInstance().getCache().index()) == null) {
                                    this.internal_load(raw);
                                }
                                return raw.get(org.kevoree.modeling.api.meta.MetaInferClass.getInstance().getCache().index());
                            }
                            else {
                                return null;
                            }
                        };
                        AbstractKObjectInfer.prototype.modifyState = function () {
                            var raw = this.view().universe().model().manager().entry(this, org.kevoree.modeling.api.data.manager.AccessMode.WRITE);
                            if (raw != null) {
                                if (raw.get(org.kevoree.modeling.api.meta.MetaInferClass.getInstance().getCache().index()) == null) {
                                    this.internal_load(raw);
                                }
                                return raw.get(org.kevoree.modeling.api.meta.MetaInferClass.getInstance().getCache().index());
                            }
                            else {
                                return null;
                            }
                        };
                        AbstractKObjectInfer.prototype.internal_load = function (raw) {
                            if (raw.get(org.kevoree.modeling.api.meta.MetaInferClass.getInstance().getCache().index()) == null) {
                                var currentState = this.createEmptyState();
                                currentState.load(raw.get(org.kevoree.modeling.api.meta.MetaInferClass.getInstance().getRaw().index()).toString());
                                raw.set(org.kevoree.modeling.api.meta.MetaInferClass.getInstance().getCache().index(), currentState);
                            }
                        };
                        AbstractKObjectInfer.prototype.train = function (trainingSet, expectedResultSet, callback) {
                            throw "Abstract method";
                        };
                        AbstractKObjectInfer.prototype.infer = function (features) {
                            throw "Abstract method";
                        };
                        AbstractKObjectInfer.prototype.accuracy = function (testSet, expectedResultSet) {
                            throw "Abstract method";
                        };
                        AbstractKObjectInfer.prototype.clear = function () {
                            throw "Abstract method";
                        };
                        AbstractKObjectInfer.prototype.createEmptyState = function () {
                            throw "Abstract method";
                        };
                        return AbstractKObjectInfer;
                    })(org.kevoree.modeling.api.abs.AbstractKObject);
                    abs.AbstractKObjectInfer = AbstractKObjectInfer;
                    var AbstractKUniverse = (function () {
                        function AbstractKUniverse(p_model, p_key) {
                            this._model = p_model;
                            this._key = p_key;
                        }
                        AbstractKUniverse.prototype.key = function () {
                            return this._key;
                        };
                        AbstractKUniverse.prototype.model = function () {
                            return this._model;
                        };
                        AbstractKUniverse.prototype.delete = function () {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            this.model().manager().delete(this, task.initCallback());
                            return task;
                        };
                        AbstractKUniverse.prototype.time = function (timePoint) {
                            if (timePoint <= org.kevoree.modeling.api.KConfig.END_OF_TIME && timePoint >= org.kevoree.modeling.api.KConfig.BEGINNING_OF_TIME) {
                                return this.internal_create(timePoint);
                            }
                            else {
                                throw new java.lang.RuntimeException("The selected Time " + timePoint + " is out of the range of KMF managed time");
                            }
                        };
                        AbstractKUniverse.prototype.internal_create = function (timePoint) {
                            throw "Abstract method";
                        };
                        AbstractKUniverse.prototype.equals = function (obj) {
                            if (!(obj instanceof org.kevoree.modeling.api.abs.AbstractKUniverse)) {
                                return false;
                            }
                            else {
                                var casted = obj;
                                return casted._key == this._key;
                            }
                        };
                        AbstractKUniverse.prototype.origin = function () {
                            return this._model.universe(this._model.manager().parentUniverseKey(this._key));
                        };
                        AbstractKUniverse.prototype.diverge = function () {
                            var casted = this._model;
                            var nextKey = this._model.manager().nextUniverseKey();
                            var newUniverse = casted.internal_create(nextKey);
                            this._model.manager().initUniverse(newUniverse, this);
                            return newUniverse;
                        };
                        AbstractKUniverse.prototype.descendants = function () {
                            var descendentsKey = this._model.manager().descendantsUniverseKeys(this._key);
                            var childs = new java.util.ArrayList();
                            for (var i = 0; i < descendentsKey.length; i++) {
                                childs.add(this._model.universe(descendentsKey[i]));
                            }
                            return childs;
                        };
                        AbstractKUniverse.prototype.lookupAllTimes = function (uuid, times) {
                            var deferWrapper = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            return deferWrapper;
                        };
                        AbstractKUniverse.prototype.listenAll = function (groupId, objects, multiListener) {
                            this.model().manager().cdn().registerMultiListener(groupId, this, objects, multiListener);
                        };
                        return AbstractKUniverse;
                    })();
                    abs.AbstractKUniverse = AbstractKUniverse;
                    var AbstractKView = (function () {
                        function AbstractKView(p_now, p_universe) {
                            this._now = p_now;
                            this._universe = p_universe;
                        }
                        AbstractKView.prototype.now = function () {
                            return this._now;
                        };
                        AbstractKView.prototype.universe = function () {
                            return this._universe;
                        };
                        AbstractKView.prototype.createByName = function (metaClassName) {
                            return this.create(this.universe().model().metaModel().metaClass(metaClassName));
                        };
                        AbstractKView.prototype.setRoot = function (elem) {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            elem.set_parent(org.kevoree.modeling.api.KConfig.NULL_LONG, null);
                            this.universe().model().manager().setRoot(elem, task.initCallback());
                            return task;
                        };
                        AbstractKView.prototype.getRoot = function () {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            this.universe().model().manager().getRoot(this, task.initCallback());
                            return task;
                        };
                        AbstractKView.prototype.select = function (query) {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            if (query == null || query.length == 0) {
                                task.initCallback()(new Array());
                            }
                            else {
                                this.universe().model().manager().getRoot(this, function (rootObj) {
                                    if (rootObj == null) {
                                        task.initCallback()(new Array());
                                    }
                                    else {
                                        var cleanedQuery = query;
                                        if (query.length == 1 && query.charAt(0) == '/') {
                                            var param = new Array();
                                            param[0] = rootObj;
                                            task.initCallback()(param);
                                        }
                                        else {
                                            if (cleanedQuery.charAt(0) == '/') {
                                                cleanedQuery = cleanedQuery.substring(1);
                                            }
                                            org.kevoree.modeling.api.traversal.selector.KSelector.select(rootObj, cleanedQuery, task.initCallback());
                                        }
                                    }
                                });
                            }
                            return task;
                        };
                        AbstractKView.prototype.lookup = function (kid) {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            this.universe().model().manager().lookup(this, kid, task.initCallback());
                            return task;
                        };
                        AbstractKView.prototype.lookupAll = function (keys) {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            this.universe().model().manager().lookupAll(this, keys, task.initCallback());
                            return task;
                        };
                        AbstractKView.prototype.internalLookupAll = function (keys, callback) {
                            this.universe().model().manager().lookupAll(this, keys, callback);
                        };
                        AbstractKView.prototype.createProxy = function (clazz, key) {
                            return this.internalCreate(clazz, key);
                        };
                        AbstractKView.prototype.create = function (clazz) {
                            if (!org.kevoree.modeling.api.util.Checker.isDefined(clazz)) {
                                return null;
                            }
                            var newObj = this.internalCreate(clazz, this.universe().model().manager().nextObjectKey());
                            if (newObj != null) {
                                this.universe().model().manager().initKObject(newObj, this);
                            }
                            return newObj;
                        };
                        AbstractKView.prototype.internalCreate = function (clazz, key) {
                            throw "Abstract method";
                        };
                        AbstractKView.prototype.json = function () {
                            return new org.kevoree.modeling.api.json.JsonFormat(this);
                        };
                        AbstractKView.prototype.xmi = function () {
                            return new org.kevoree.modeling.api.xmi.XmiFormat(this);
                        };
                        AbstractKView.prototype.equals = function (obj) {
                            if (!org.kevoree.modeling.api.util.Checker.isDefined(obj)) {
                                return false;
                            }
                            if (!(obj instanceof org.kevoree.modeling.api.abs.AbstractKView)) {
                                return false;
                            }
                            else {
                                var casted = obj;
                                return (casted._now == this._now) && this._universe.equals(casted._universe);
                            }
                        };
                        return AbstractKView;
                    })();
                    abs.AbstractKView = AbstractKView;
                    var AbstractMetaAttribute = (function () {
                        function AbstractMetaAttribute(p_name, p_index, p_precision, p_key, p_metaType, p_extrapolation) {
                            this._name = p_name;
                            this._index = p_index;
                            this._precision = p_precision;
                            this._key = p_key;
                            this._metaType = p_metaType;
                            this._extrapolation = p_extrapolation;
                        }
                        AbstractMetaAttribute.prototype.attributeType = function () {
                            return this._metaType;
                        };
                        AbstractMetaAttribute.prototype.index = function () {
                            return this._index;
                        };
                        AbstractMetaAttribute.prototype.metaName = function () {
                            return this._name;
                        };
                        AbstractMetaAttribute.prototype.metaType = function () {
                            return org.kevoree.modeling.api.meta.MetaType.ATTRIBUTE;
                        };
                        AbstractMetaAttribute.prototype.precision = function () {
                            return this._precision;
                        };
                        AbstractMetaAttribute.prototype.key = function () {
                            return this._key;
                        };
                        AbstractMetaAttribute.prototype.strategy = function () {
                            return this._extrapolation;
                        };
                        AbstractMetaAttribute.prototype.setExtrapolation = function (extrapolation) {
                            this._extrapolation = extrapolation;
                        };
                        return AbstractMetaAttribute;
                    })();
                    abs.AbstractMetaAttribute = AbstractMetaAttribute;
                    var AbstractMetaClass = (function () {
                        function AbstractMetaClass(p_name, p_index) {
                            this._indexes = null;
                            this._name = p_name;
                            this._index = p_index;
                        }
                        AbstractMetaClass.prototype.metaByName = function (name) {
                            return this._indexes.get(name);
                        };
                        AbstractMetaClass.prototype.attribute = function (name) {
                            if (this._indexes == null) {
                                return null;
                            }
                            else {
                                var resolved = this._indexes.get(name);
                                if (resolved != null && resolved instanceof org.kevoree.modeling.api.abs.AbstractMetaAttribute) {
                                    return resolved;
                                }
                                return null;
                            }
                        };
                        AbstractMetaClass.prototype.reference = function (name) {
                            if (this._indexes == null) {
                                return null;
                            }
                            else {
                                var resolved = this._indexes.get(name);
                                if (resolved != null && resolved instanceof org.kevoree.modeling.api.abs.AbstractMetaReference) {
                                    return resolved;
                                }
                                return null;
                            }
                        };
                        AbstractMetaClass.prototype.operation = function (name) {
                            if (this._indexes == null) {
                                return null;
                            }
                            else {
                                var resolved = this._indexes.get(name);
                                if (resolved != null && resolved instanceof org.kevoree.modeling.api.abs.AbstractMetaOperation) {
                                    return resolved;
                                }
                                return null;
                            }
                        };
                        AbstractMetaClass.prototype.metaElements = function () {
                            return this._meta;
                        };
                        AbstractMetaClass.prototype.index = function () {
                            return this._index;
                        };
                        AbstractMetaClass.prototype.metaName = function () {
                            return this._name;
                        };
                        AbstractMetaClass.prototype.metaType = function () {
                            return org.kevoree.modeling.api.meta.MetaType.CLASS;
                        };
                        AbstractMetaClass.prototype.init = function (p_meta) {
                            this._indexes = new org.kevoree.modeling.api.map.StringHashMap(p_meta.length, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                            this._meta = p_meta;
                            var nbAtt = 0;
                            var nbRef = 0;
                            for (var i = 0; i < p_meta.length; i++) {
                                if (p_meta[i].metaType().equals(org.kevoree.modeling.api.meta.MetaType.ATTRIBUTE)) {
                                    nbAtt++;
                                }
                                else {
                                    if (p_meta[i].metaType().equals(org.kevoree.modeling.api.meta.MetaType.REFERENCE)) {
                                        nbRef++;
                                    }
                                }
                                this._indexes.put(p_meta[i].metaName(), p_meta[i]);
                            }
                            this._atts = new Array();
                            this._refs = new Array();
                            nbAtt = 0;
                            nbRef = 0;
                            for (var i = 0; i < p_meta.length; i++) {
                                if (p_meta[i].metaType().equals(org.kevoree.modeling.api.meta.MetaType.ATTRIBUTE)) {
                                    this._atts[nbAtt] = p_meta[i];
                                    nbAtt++;
                                }
                                else {
                                    if (p_meta[i].metaType().equals(org.kevoree.modeling.api.meta.MetaType.REFERENCE)) {
                                        this._refs[nbRef] = p_meta[i];
                                        nbRef++;
                                    }
                                }
                                this._indexes.put(p_meta[i].metaName(), p_meta[i]);
                            }
                        };
                        AbstractMetaClass.prototype.meta = function (index) {
                            var transposedIndex = index - org.kevoree.modeling.api.data.manager.Index.RESERVED_INDEXES;
                            if (transposedIndex >= 0 && transposedIndex < this._meta.length) {
                                return this._meta[transposedIndex];
                            }
                            else {
                                return null;
                            }
                        };
                        AbstractMetaClass.prototype.metaAttributes = function () {
                            return this._atts;
                        };
                        AbstractMetaClass.prototype.metaReferences = function () {
                            return this._refs;
                        };
                        return AbstractMetaClass;
                    })();
                    abs.AbstractMetaClass = AbstractMetaClass;
                    var AbstractMetaModel = (function () {
                        function AbstractMetaModel(p_name, p_index) {
                            this._metaClasses_indexes = null;
                            this._name = p_name;
                            this._index = p_index;
                        }
                        AbstractMetaModel.prototype.index = function () {
                            return this._index;
                        };
                        AbstractMetaModel.prototype.metaName = function () {
                            return this._name;
                        };
                        AbstractMetaModel.prototype.metaType = function () {
                            return org.kevoree.modeling.api.meta.MetaType.MODEL;
                        };
                        AbstractMetaModel.prototype.metaClasses = function () {
                            return this._metaClasses;
                        };
                        AbstractMetaModel.prototype.metaClass = function (name) {
                            if (this._metaClasses_indexes == null) {
                                return null;
                            }
                            var resolved = this._metaClasses_indexes.get(name);
                            if (resolved == null) {
                                return null;
                            }
                            else {
                                return this._metaClasses[resolved];
                            }
                        };
                        AbstractMetaModel.prototype.init = function (p_metaClasses) {
                            this._metaClasses_indexes = new org.kevoree.modeling.api.map.StringHashMap(p_metaClasses.length, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                            this._metaClasses = p_metaClasses;
                            for (var i = 0; i < this._metaClasses.length; i++) {
                                this._metaClasses_indexes.put(this._metaClasses[i].metaName(), i);
                            }
                        };
                        return AbstractMetaModel;
                    })();
                    abs.AbstractMetaModel = AbstractMetaModel;
                    var AbstractMetaOperation = (function () {
                        function AbstractMetaOperation(p_name, p_index, p_lazyMetaClass) {
                            this._name = p_name;
                            this._index = p_index;
                            this._lazyMetaClass = p_lazyMetaClass;
                        }
                        AbstractMetaOperation.prototype.index = function () {
                            return this._index;
                        };
                        AbstractMetaOperation.prototype.metaName = function () {
                            return this._name;
                        };
                        AbstractMetaOperation.prototype.metaType = function () {
                            return org.kevoree.modeling.api.meta.MetaType.OPERATION;
                        };
                        AbstractMetaOperation.prototype.origin = function () {
                            if (this._lazyMetaClass != null) {
                                return this._lazyMetaClass();
                            }
                            return null;
                        };
                        return AbstractMetaOperation;
                    })();
                    abs.AbstractMetaOperation = AbstractMetaOperation;
                    var AbstractMetaReference = (function () {
                        function AbstractMetaReference(p_name, p_index, p_contained, p_single, p_lazyMetaType, p_lazyMetaOpposite, p_lazyMetaOrigin) {
                            this._name = p_name;
                            this._index = p_index;
                            this._contained = p_contained;
                            this._single = p_single;
                            this._lazyMetaType = p_lazyMetaType;
                            this._lazyMetaOpposite = p_lazyMetaOpposite;
                            this._lazyMetaOrigin = p_lazyMetaOrigin;
                        }
                        AbstractMetaReference.prototype.single = function () {
                            return this._single;
                        };
                        AbstractMetaReference.prototype.attributeType = function () {
                            if (this._lazyMetaType != null) {
                                return this._lazyMetaType();
                            }
                            else {
                                return null;
                            }
                        };
                        AbstractMetaReference.prototype.opposite = function () {
                            if (this._lazyMetaOpposite != null) {
                                return this._lazyMetaOpposite();
                            }
                            return null;
                        };
                        AbstractMetaReference.prototype.origin = function () {
                            if (this._lazyMetaOrigin != null) {
                                return this._lazyMetaOrigin();
                            }
                            return null;
                        };
                        AbstractMetaReference.prototype.index = function () {
                            return this._index;
                        };
                        AbstractMetaReference.prototype.metaName = function () {
                            return this._name;
                        };
                        AbstractMetaReference.prototype.metaType = function () {
                            return org.kevoree.modeling.api.meta.MetaType.REFERENCE;
                        };
                        AbstractMetaReference.prototype.contained = function () {
                            return this._contained;
                        };
                        return AbstractMetaReference;
                    })();
                    abs.AbstractMetaReference = AbstractMetaReference;
                    var AbstractTimeWalker = (function () {
                        function AbstractTimeWalker(p_origin) {
                            this._origin = null;
                            this._origin = p_origin;
                        }
                        AbstractTimeWalker.prototype.internal_times = function (start, end) {
                            var _this = this;
                            var wrapper = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            var keys = new Array();
                            keys[0] = org.kevoree.modeling.api.data.cache.KContentKey.createGlobalUniverseTree();
                            keys[1] = org.kevoree.modeling.api.data.cache.KContentKey.createUniverseTree(this._origin.uuid());
                            var manager = this._origin.view().universe().model().manager();
                            manager.bumpKeysToCache(keys, function (kCacheObjects) {
                                var objUniverse = kCacheObjects[1];
                                if (kCacheObjects[0] == null || kCacheObjects[1] == null) {
                                    wrapper.initCallback()(null);
                                }
                                else {
                                    var collectedUniverse = org.kevoree.modeling.api.data.manager.ResolutionHelper.universeSelectByRange(kCacheObjects[0], kCacheObjects[1], start, end, _this._origin.universe().key());
                                    var timeTreeToLoad = new Array();
                                    for (var i = 0; i < collectedUniverse.length; i++) {
                                        timeTreeToLoad[i] = org.kevoree.modeling.api.data.cache.KContentKey.createTimeTree(collectedUniverse[i], _this._origin.uuid());
                                    }
                                    manager.bumpKeysToCache(timeTreeToLoad, function (timeTrees) {
                                        var collector = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                        var previousDivergenceTime = end;
                                        for (var i = 0; i < collectedUniverse.length; i++) {
                                            var timeTree = timeTrees[i];
                                            if (timeTree != null) {
                                                var currentDivergenceTime = objUniverse.get(collectedUniverse[i]);
                                                var initNode;
                                                if (i == 0) {
                                                    initNode = timeTree.previousOrEqual(previousDivergenceTime);
                                                }
                                                else {
                                                    initNode = timeTree.previous(previousDivergenceTime);
                                                }
                                                while (initNode != null && initNode.getKey() >= currentDivergenceTime) {
                                                    collector.put(collector.size(), initNode.getKey());
                                                    initNode = initNode.previous();
                                                }
                                                previousDivergenceTime = currentDivergenceTime;
                                            }
                                        }
                                        var orderedTime = new Array();
                                        for (var i = 0; i < collector.size(); i++) {
                                            orderedTime[i] = collector.get(i);
                                        }
                                        wrapper.initCallback()(orderedTime);
                                    });
                                }
                            });
                            return wrapper;
                        };
                        AbstractTimeWalker.prototype.allTimes = function () {
                            return this.internal_times(org.kevoree.modeling.api.KConfig.BEGINNING_OF_TIME, org.kevoree.modeling.api.KConfig.END_OF_TIME);
                        };
                        AbstractTimeWalker.prototype.timesBefore = function (endOfSearch) {
                            return this.internal_times(org.kevoree.modeling.api.KConfig.BEGINNING_OF_TIME, endOfSearch);
                        };
                        AbstractTimeWalker.prototype.timesAfter = function (beginningOfSearch) {
                            return this.internal_times(beginningOfSearch, org.kevoree.modeling.api.KConfig.END_OF_TIME);
                        };
                        AbstractTimeWalker.prototype.timesBetween = function (beginningOfSearch, endOfSearch) {
                            return this.internal_times(beginningOfSearch, endOfSearch);
                        };
                        return AbstractTimeWalker;
                    })();
                    abs.AbstractTimeWalker = AbstractTimeWalker;
                })(abs = api.abs || (api.abs = {}));
                var data;
                (function (data) {
                    var cache;
                    (function (cache) {
                        var KCacheDirty = (function () {
                            function KCacheDirty(key, object) {
                                this.key = key;
                                this.object = object;
                            }
                            return KCacheDirty;
                        })();
                        cache.KCacheDirty = KCacheDirty;
                        var KCacheEntry = (function () {
                            function KCacheEntry() {
                                this._modifiedIndexes = null;
                                this._dirty = false;
                                this._counter = 0;
                            }
                            KCacheEntry.prototype.initRaw = function (p_size) {
                                this.raw = new Array();
                            };
                            KCacheEntry.prototype.isDirty = function () {
                                return this._dirty;
                            };
                            KCacheEntry.prototype.modifiedIndexes = function () {
                                if (this._modifiedIndexes == null) {
                                    return new Array();
                                }
                                else {
                                    var nbModified = 0;
                                    for (var i = 0; i < this._modifiedIndexes.length; i++) {
                                        if (this._modifiedIndexes[i]) {
                                            nbModified = nbModified + 1;
                                        }
                                    }
                                    var result = new Array();
                                    var inserted = 0;
                                    for (var i = 0; i < this._modifiedIndexes.length; i++) {
                                        if (this._modifiedIndexes[i]) {
                                            result[inserted] = i;
                                            inserted = inserted + 1;
                                        }
                                    }
                                    return result;
                                }
                            };
                            KCacheEntry.prototype.serialize = function () {
                                return org.kevoree.modeling.api.data.manager.JsonRaw.encode(this, org.kevoree.modeling.api.KConfig.NULL_LONG, this.metaClass, false);
                            };
                            KCacheEntry.prototype.setClean = function () {
                                this._dirty = false;
                                this._modifiedIndexes = null;
                            };
                            KCacheEntry.prototype.unserialize = function (key, payload, metaModel) {
                                org.kevoree.modeling.api.data.manager.JsonRaw.decode(payload, key.time(), metaModel, this);
                            };
                            KCacheEntry.prototype.counter = function () {
                                return this._counter;
                            };
                            KCacheEntry.prototype.inc = function () {
                                this._counter++;
                            };
                            KCacheEntry.prototype.dec = function () {
                                this._counter--;
                            };
                            KCacheEntry.prototype.get = function (index) {
                                if (this.raw != null) {
                                    return this.raw[index];
                                }
                                else {
                                    return null;
                                }
                            };
                            KCacheEntry.prototype.getRef = function (index) {
                                if (this.raw != null) {
                                    var previousObj = this.raw[index];
                                    if (previousObj != null) {
                                        try {
                                            return previousObj;
                                        }
                                        catch ($ex$) {
                                            if ($ex$ instanceof java.lang.Exception) {
                                                var e = $ex$;
                                                e.printStackTrace();
                                                this.raw[index] = null;
                                                return null;
                                            }
                                        }
                                    }
                                    else {
                                        return null;
                                    }
                                }
                                else {
                                    return null;
                                }
                            };
                            KCacheEntry.prototype.set = function (index, content) {
                                this.raw[index] = content;
                                this._dirty = true;
                                if (this._modifiedIndexes == null) {
                                    this._modifiedIndexes = new Array();
                                }
                                this._modifiedIndexes[index] = true;
                            };
                            KCacheEntry.prototype.sizeRaw = function () {
                                if (this.raw != null) {
                                    return this.raw.length;
                                }
                                else {
                                    return 0;
                                }
                            };
                            KCacheEntry.prototype.clone = function () {
                                if (this.raw == null) {
                                    return new org.kevoree.modeling.api.data.cache.KCacheEntry();
                                }
                                else {
                                    var cloned = new Array();
                                    for (var i = 0; i < this.raw.length; i++) {
                                        var resolved = this.raw[i];
                                        if (resolved != null) {
                                            if (resolved instanceof org.kevoree.modeling.api.KInferState) {
                                                cloned[i] = resolved.cloneState();
                                            }
                                            else {
                                                cloned[i] = resolved;
                                            }
                                        }
                                    }
                                    var clonedEntry = new org.kevoree.modeling.api.data.cache.KCacheEntry();
                                    clonedEntry._dirty = true;
                                    clonedEntry.raw = cloned;
                                    clonedEntry.metaClass = this.metaClass;
                                    return clonedEntry;
                                }
                            };
                            return KCacheEntry;
                        })();
                        cache.KCacheEntry = KCacheEntry;
                        var KCacheLayer = (function () {
                            function KCacheLayer() {
                            }
                            KCacheLayer.prototype.empty = function () {
                                return (this._nestedLayers == null || this._nestedLayers.size() == 0) && (this._cachedObjects == null || this._cachedObjects.size() == 0);
                            };
                            KCacheLayer.prototype.resolve = function (p_key, current) {
                                if (current == org.kevoree.modeling.api.KConfig.KEY_SIZE - 1) {
                                    if (this._cachedObjects != null) {
                                        return this._cachedObjects.get(p_key.part(current));
                                    }
                                    else {
                                        return null;
                                    }
                                }
                                else {
                                    if (this._nestedLayers != null) {
                                        var nextLayer = this._nestedLayers.get(p_key.part(current));
                                        if (nextLayer != null) {
                                            return nextLayer.resolve(p_key, current + 1);
                                        }
                                        else {
                                            return null;
                                        }
                                    }
                                    else {
                                        return null;
                                    }
                                }
                            };
                            KCacheLayer.prototype.decClean = function (p_key, current) {
                                if (current == org.kevoree.modeling.api.KConfig.KEY_SIZE - 1) {
                                    var obj = this._cachedObjects.get(p_key.part(current));
                                    if (obj != null) {
                                        obj.dec();
                                        if (obj.counter() <= 0) {
                                            if (!obj.isDirty()) {
                                                this._cachedObjects.remove(p_key.part(current));
                                            }
                                        }
                                    }
                                }
                                else {
                                    if (this._nestedLayers != null) {
                                        var nextLayer = this._nestedLayers.get(p_key.part(current));
                                        if (nextLayer != null) {
                                            nextLayer.decClean(p_key, current + 1);
                                            if (nextLayer.empty()) {
                                                this._nestedLayers.remove(p_key.part(current));
                                            }
                                        }
                                    }
                                }
                            };
                            KCacheLayer.prototype.insert = function (p_key, current, p_obj_insert) {
                                if (current == org.kevoree.modeling.api.KConfig.KEY_SIZE - 1) {
                                    this.private_insert_object(p_key, current, p_obj_insert);
                                }
                                else {
                                    if (this._nestedLayers == null) {
                                        this.private_nestedLayers_init();
                                    }
                                    var previousLayer = this._nestedLayers.get(p_key.part(current));
                                    if (previousLayer != null) {
                                        previousLayer.insert(p_key, current + 1, p_obj_insert);
                                    }
                                    else {
                                        this.private_insert_nested(p_key, current, p_obj_insert);
                                    }
                                }
                            };
                            KCacheLayer.prototype.private_insert_object = function (p_key, current, p_obj_insert) {
                                if (this._cachedObjects == null) {
                                    this._cachedObjects = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                }
                                this._cachedObjects.put(p_key.part(current), p_obj_insert);
                            };
                            KCacheLayer.prototype.private_nestedLayers_init = function () {
                                if (this._nestedLayers == null) {
                                    this._nestedLayers = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                }
                            };
                            KCacheLayer.prototype.private_insert_nested = function (p_key, current, p_obj_insert) {
                                var previousLayer = this._nestedLayers.get(p_key.part(current));
                                if (previousLayer == null) {
                                    previousLayer = new org.kevoree.modeling.api.data.cache.KCacheLayer();
                                    this._nestedLayers.put(p_key.part(current), previousLayer);
                                }
                                previousLayer.insert(p_key, current + 1, p_obj_insert);
                            };
                            KCacheLayer.prototype.dirties = function (result, prefixKeys, current) {
                                if (current == org.kevoree.modeling.api.KConfig.KEY_SIZE - 1) {
                                    if (this._cachedObjects != null) {
                                        this._cachedObjects.each(function (loopKey, loopCached) {
                                            if (loopCached != null && loopCached.isDirty()) {
                                                var cachedKey = new org.kevoree.modeling.api.data.cache.KContentKey(prefixKeys[0], prefixKeys[1], prefixKeys[2], loopKey);
                                                result.add(new org.kevoree.modeling.api.data.cache.KCacheDirty(cachedKey, loopCached));
                                            }
                                        });
                                    }
                                }
                                else {
                                    if (this._nestedLayers != null) {
                                        this._nestedLayers.each(function (loopKey, loopValue) {
                                            var prefixKeysCloned = new Array();
                                            for (var j = 0; j < current; j++) {
                                                prefixKeysCloned[j] = prefixKeys[j];
                                            }
                                            prefixKeysCloned[current] = loopKey;
                                            loopValue.dirties(result, prefixKeysCloned, current + 1);
                                        });
                                    }
                                }
                            };
                            return KCacheLayer;
                        })();
                        cache.KCacheLayer = KCacheLayer;
                        var KContentKey = (function () {
                            function KContentKey(p_prefixID, p_universeID, p_timeID, p_objID) {
                                this.elem = new Array();
                                this.elem[0] = p_prefixID;
                                this.elem[1] = p_universeID;
                                this.elem[2] = p_timeID;
                                this.elem[3] = p_objID;
                            }
                            KContentKey.prototype.segment = function () {
                                return this.elem[0];
                            };
                            KContentKey.prototype.universe = function () {
                                return this.elem[1];
                            };
                            KContentKey.prototype.time = function () {
                                return this.elem[2];
                            };
                            KContentKey.prototype.obj = function () {
                                return this.elem[3];
                            };
                            KContentKey.prototype.part = function (i) {
                                if (i >= 0 && i < org.kevoree.modeling.api.KConfig.KEY_SIZE) {
                                    return this.elem[i];
                                }
                                else {
                                    return org.kevoree.modeling.api.KConfig.NULL_LONG;
                                }
                            };
                            KContentKey.createGlobal = function (p_prefixID) {
                                return new org.kevoree.modeling.api.data.cache.KContentKey(p_prefixID, org.kevoree.modeling.api.KConfig.NULL_LONG, org.kevoree.modeling.api.KConfig.NULL_LONG, org.kevoree.modeling.api.KConfig.NULL_LONG);
                            };
                            KContentKey.createGlobalUniverseTree = function () {
                                if (KContentKey.cached_global_universeTree == null) {
                                    KContentKey.cached_global_universeTree = new org.kevoree.modeling.api.data.cache.KContentKey(KContentKey.GLOBAL_SEGMENT_UNIVERSE_TREE, org.kevoree.modeling.api.KConfig.NULL_LONG, org.kevoree.modeling.api.KConfig.NULL_LONG, org.kevoree.modeling.api.KConfig.NULL_LONG);
                                }
                                return KContentKey.cached_global_universeTree;
                            };
                            KContentKey.createUniverseTree = function (p_objectID) {
                                return new org.kevoree.modeling.api.data.cache.KContentKey(KContentKey.GLOBAL_SEGMENT_DATA_HASH_INDEX, org.kevoree.modeling.api.KConfig.NULL_LONG, org.kevoree.modeling.api.KConfig.NULL_LONG, p_objectID);
                            };
                            KContentKey.createRootUniverseTree = function () {
                                if (KContentKey.cached_root_universeTree == null) {
                                    KContentKey.cached_root_universeTree = new org.kevoree.modeling.api.data.cache.KContentKey(KContentKey.GLOBAL_SEGMENT_DATA_ROOT, org.kevoree.modeling.api.KConfig.NULL_LONG, org.kevoree.modeling.api.KConfig.NULL_LONG, org.kevoree.modeling.api.KConfig.NULL_LONG);
                                }
                                return KContentKey.cached_root_universeTree;
                            };
                            KContentKey.createRootTimeTree = function (universeID) {
                                return new org.kevoree.modeling.api.data.cache.KContentKey(KContentKey.GLOBAL_SEGMENT_DATA_ROOT_INDEX, universeID, org.kevoree.modeling.api.KConfig.NULL_LONG, org.kevoree.modeling.api.KConfig.NULL_LONG);
                            };
                            KContentKey.createTimeTree = function (p_universeID, p_objectID) {
                                return new org.kevoree.modeling.api.data.cache.KContentKey(KContentKey.GLOBAL_SEGMENT_DATA_INDEX, p_universeID, org.kevoree.modeling.api.KConfig.NULL_LONG, p_objectID);
                            };
                            KContentKey.createObject = function (p_universeID, p_quantaID, p_objectID) {
                                return new org.kevoree.modeling.api.data.cache.KContentKey(KContentKey.GLOBAL_SEGMENT_DATA_RAW, p_universeID, p_quantaID, p_objectID);
                            };
                            KContentKey.createLastPrefix = function () {
                                return new org.kevoree.modeling.api.data.cache.KContentKey(KContentKey.GLOBAL_SEGMENT_PREFIX, org.kevoree.modeling.api.KConfig.NULL_LONG, org.kevoree.modeling.api.KConfig.NULL_LONG, org.kevoree.modeling.api.KConfig.NULL_LONG);
                            };
                            KContentKey.createLastObjectIndexFromPrefix = function (prefix) {
                                return new org.kevoree.modeling.api.data.cache.KContentKey(KContentKey.GLOBAL_SEGMENT_PREFIX, KContentKey.GLOBAL_SUB_SEGMENT_PREFIX_OBJ, org.kevoree.modeling.api.KConfig.NULL_LONG, java.lang.Long.parseLong(prefix.toString()));
                            };
                            KContentKey.createLastUniverseIndexFromPrefix = function (prefix) {
                                return new org.kevoree.modeling.api.data.cache.KContentKey(KContentKey.GLOBAL_SEGMENT_PREFIX, KContentKey.GLOBAL_SUB_SEGMENT_PREFIX_UNI, org.kevoree.modeling.api.KConfig.NULL_LONG, java.lang.Long.parseLong(prefix.toString()));
                            };
                            KContentKey.create = function (payload) {
                                if (payload == null || payload.length == 0) {
                                    return null;
                                }
                                else {
                                    var temp = new Array();
                                    for (var i = 0; i < org.kevoree.modeling.api.KConfig.KEY_SIZE; i++) {
                                        temp[i] = org.kevoree.modeling.api.KConfig.NULL_LONG;
                                    }
                                    var maxRead = payload.length;
                                    var indexStartElem = -1;
                                    var indexElem = 0;
                                    for (var i = 0; i < maxRead; i++) {
                                        if (payload.charAt(i) == org.kevoree.modeling.api.KConfig.KEY_SEP) {
                                            if (indexStartElem != -1) {
                                                try {
                                                    temp[indexElem] = java.lang.Long.parseLong(payload.substring(indexStartElem, i));
                                                }
                                                catch ($ex$) {
                                                    if ($ex$ instanceof java.lang.Exception) {
                                                        var e = $ex$;
                                                        e.printStackTrace();
                                                    }
                                                }
                                            }
                                            indexStartElem = -1;
                                            indexElem = indexElem + 1;
                                        }
                                        else {
                                            if (indexStartElem == -1) {
                                                indexStartElem = i;
                                            }
                                        }
                                    }
                                    if (indexStartElem != -1) {
                                        try {
                                            temp[indexElem] = java.lang.Long.parseLong(payload.substring(indexStartElem, maxRead));
                                        }
                                        catch ($ex$) {
                                            if ($ex$ instanceof java.lang.Exception) {
                                                var e = $ex$;
                                                e.printStackTrace();
                                            }
                                        }
                                    }
                                    return new org.kevoree.modeling.api.data.cache.KContentKey(temp[0], temp[1], temp[2], temp[3]);
                                }
                            };
                            KContentKey.prototype.toString = function () {
                                var buffer = new java.lang.StringBuilder();
                                for (var i = 0; i < org.kevoree.modeling.api.KConfig.KEY_SIZE; i++) {
                                    if (i != 0) {
                                        buffer.append(org.kevoree.modeling.api.KConfig.KEY_SEP);
                                    }
                                    if (this.elem[i] != org.kevoree.modeling.api.KConfig.NULL_LONG) {
                                        buffer.append(this.elem[i]);
                                    }
                                }
                                return buffer.toString();
                            };
                            KContentKey.GLOBAL_SEGMENT_META = 0;
                            KContentKey.GLOBAL_SEGMENT_DATA_RAW = 1;
                            KContentKey.GLOBAL_SEGMENT_DATA_INDEX = 2;
                            KContentKey.GLOBAL_SEGMENT_DATA_HASH_INDEX = 3;
                            KContentKey.GLOBAL_SEGMENT_DATA_ROOT = 4;
                            KContentKey.GLOBAL_SEGMENT_DATA_ROOT_INDEX = 5;
                            KContentKey.GLOBAL_SEGMENT_UNIVERSE_TREE = 6;
                            KContentKey.GLOBAL_SEGMENT_PREFIX = 7;
                            KContentKey.GLOBAL_SUB_SEGMENT_PREFIX_OBJ = 0;
                            KContentKey.GLOBAL_SUB_SEGMENT_PREFIX_UNI = 1;
                            KContentKey.cached_global_universeTree = null;
                            KContentKey.cached_root_universeTree = null;
                            return KContentKey;
                        })();
                        cache.KContentKey = KContentKey;
                        var MultiLayeredMemoryCache = (function () {
                            function MultiLayeredMemoryCache(p_manager) {
                                this._manager = p_manager;
                                this._nestedLayers = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                            }
                            MultiLayeredMemoryCache.prototype.get = function (key) {
                                if (key == null) {
                                    if (MultiLayeredMemoryCache.DEBUG) {
                                        System.out.println(MultiLayeredMemoryCache.prefixDebugGet + ":NULL->NULL)");
                                    }
                                    return null;
                                }
                                else {
                                    var nextLayer = this._nestedLayers.get(key.part(0));
                                    if (nextLayer != null) {
                                        var resolved = nextLayer.resolve(key, 1);
                                        if (MultiLayeredMemoryCache.DEBUG) {
                                            System.out.println(MultiLayeredMemoryCache.prefixDebugGet + ":" + key + "->" + resolved + ")");
                                        }
                                        return resolved;
                                    }
                                    else {
                                        if (MultiLayeredMemoryCache.DEBUG) {
                                            System.out.println(MultiLayeredMemoryCache.prefixDebugGet + ":" + key + "->NULL)");
                                        }
                                        return null;
                                    }
                                }
                            };
                            MultiLayeredMemoryCache.prototype.put = function (key, payload) {
                                if (key == null) {
                                    if (MultiLayeredMemoryCache.DEBUG) {
                                        System.out.println(MultiLayeredMemoryCache.prefixDebugPut + ":NULL->" + payload + ")");
                                    }
                                }
                                else {
                                    var nextLayer = this._nestedLayers.get(key.part(0));
                                    if (nextLayer != null) {
                                        nextLayer.insert(key, 1, payload);
                                    }
                                    else {
                                        this.internal_put(key, payload);
                                    }
                                    if (MultiLayeredMemoryCache.DEBUG) {
                                        System.out.println(MultiLayeredMemoryCache.prefixDebugPut + ":" + key + "->" + payload + ")");
                                    }
                                }
                            };
                            MultiLayeredMemoryCache.prototype.internal_put = function (key, payload) {
                                var nextLayer = this._nestedLayers.get(key.part(0));
                                if (nextLayer == null) {
                                    nextLayer = new org.kevoree.modeling.api.data.cache.KCacheLayer();
                                    this._nestedLayers.put(key.part(0), nextLayer);
                                }
                                nextLayer.insert(key, 1, payload);
                            };
                            MultiLayeredMemoryCache.prototype.dirties = function () {
                                var result = new java.util.ArrayList();
                                this._nestedLayers.each(function (loopKey, loopLayer) {
                                    var prefixKey = new Array();
                                    prefixKey[0] = loopKey;
                                    loopLayer.dirties(result, prefixKey, 1);
                                });
                                if (MultiLayeredMemoryCache.DEBUG) {
                                    System.out.println("KMF_DEBUG_CACHE_DIRTIES:" + result.size());
                                }
                                return result.toArray(new Array());
                            };
                            MultiLayeredMemoryCache.prototype.clearDataSegment = function () {
                                this._nestedLayers.remove(org.kevoree.modeling.api.data.cache.KContentKey.GLOBAL_SEGMENT_DATA_RAW);
                                this._nestedLayers.remove(org.kevoree.modeling.api.data.cache.KContentKey.GLOBAL_SEGMENT_DATA_INDEX);
                                this._nestedLayers.remove(org.kevoree.modeling.api.data.cache.KContentKey.GLOBAL_SEGMENT_DATA_HASH_INDEX);
                                this._nestedLayers.remove(org.kevoree.modeling.api.data.cache.KContentKey.GLOBAL_SEGMENT_DATA_ROOT);
                                this._nestedLayers.remove(org.kevoree.modeling.api.data.cache.KContentKey.GLOBAL_SEGMENT_DATA_ROOT_INDEX);
                            };
                            MultiLayeredMemoryCache.prototype.monitor = function (origin) {
                            };
                            MultiLayeredMemoryCache.prototype.decCleanKey = function (key) {
                                if (key != null) {
                                    var nextLayer = this._nestedLayers.get(key.part(0));
                                    if (nextLayer != null) {
                                        nextLayer.decClean(key, 1);
                                    }
                                }
                            };
                            MultiLayeredMemoryCache.prototype.clean = function () {
                            };
                            MultiLayeredMemoryCache.DEBUG = false;
                            MultiLayeredMemoryCache.prefixDebugGet = "KMF_DEBUG_CACHE_GET";
                            MultiLayeredMemoryCache.prefixDebugPut = "KMF_DEBUG_CACHE_PUT";
                            return MultiLayeredMemoryCache;
                        })();
                        cache.MultiLayeredMemoryCache = MultiLayeredMemoryCache;
                    })(cache = data.cache || (data.cache = {}));
                    var cdn;
                    (function (cdn) {
                        var AtomicOperationFactory = (function () {
                            function AtomicOperationFactory() {
                            }
                            AtomicOperationFactory.getMutatePrefixOperation = function () {
                                return { operationKey: function () {
                                    return AtomicOperationFactory.PREFIX_MUTATE_OPERATION;
                                }, mutate: function (previous) {
                                    try {
                                        var previousPrefix;
                                        if (previous != null) {
                                            previousPrefix = java.lang.Short.parseShort(previous);
                                        }
                                        else {
                                            previousPrefix = java.lang.Short.parseShort("0");
                                        }
                                        if (previousPrefix == java.lang.Short.MAX_VALUE) {
                                            return "" + java.lang.Short.MIN_VALUE;
                                        }
                                        else {
                                            return "" + (previousPrefix + 1);
                                        }
                                    }
                                    catch ($ex$) {
                                        if ($ex$ instanceof java.lang.Exception) {
                                            var e = $ex$;
                                            e.printStackTrace();
                                            return "" + java.lang.Short.MIN_VALUE;
                                        }
                                    }
                                } };
                            };
                            AtomicOperationFactory.getOperationWithKey = function (key) {
                                switch (key) {
                                    case AtomicOperationFactory.PREFIX_MUTATE_OPERATION:
                                        return org.kevoree.modeling.api.data.cdn.AtomicOperationFactory.getMutatePrefixOperation();
                                }
                                return null;
                            };
                            AtomicOperationFactory.PREFIX_MUTATE_OPERATION = 0;
                            return AtomicOperationFactory;
                        })();
                        cdn.AtomicOperationFactory = AtomicOperationFactory;
                        var KContentPutRequest = (function () {
                            function KContentPutRequest(requestSize) {
                                this._size = 0;
                                this._content = new Array();
                            }
                            KContentPutRequest.prototype.put = function (p_key, p_payload) {
                                var newLine = new Array();
                                newLine[KContentPutRequest.KEY_INDEX] = p_key;
                                newLine[KContentPutRequest.CONTENT_INDEX] = p_payload;
                                this._content[this._size] = newLine;
                                this._size = this._size + 1;
                            };
                            KContentPutRequest.prototype.getKey = function (index) {
                                if (index < this._content.length) {
                                    return this._content[index][0];
                                }
                                else {
                                    return null;
                                }
                            };
                            KContentPutRequest.prototype.getContent = function (index) {
                                if (index < this._content.length) {
                                    return this._content[index][1];
                                }
                                else {
                                    return null;
                                }
                            };
                            KContentPutRequest.prototype.size = function () {
                                return this._size;
                            };
                            KContentPutRequest.KEY_INDEX = 0;
                            KContentPutRequest.CONTENT_INDEX = 1;
                            KContentPutRequest.SIZE_INDEX = 2;
                            return KContentPutRequest;
                        })();
                        cdn.KContentPutRequest = KContentPutRequest;
                        var MemoryKContentDeliveryDriver = (function () {
                            function MemoryKContentDeliveryDriver() {
                                this.backend = new org.kevoree.modeling.api.map.StringHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                this._localEventListeners = new org.kevoree.modeling.api.event.LocalEventListeners();
                            }
                            MemoryKContentDeliveryDriver.prototype.atomicGetMutate = function (key, operation, callback) {
                                var result = this.backend.get(key.toString());
                                var mutated = operation.mutate(result);
                                if (MemoryKContentDeliveryDriver.DEBUG) {
                                    System.out.println("ATOMIC GET " + key + "->" + result);
                                    System.out.println("ATOMIC PUT " + key + "->" + mutated);
                                }
                                this.backend.put(key.toString(), mutated);
                                callback(result, null);
                            };
                            MemoryKContentDeliveryDriver.prototype.get = function (keys, callback) {
                                var values = new Array();
                                for (var i = 0; i < keys.length; i++) {
                                    if (keys[i] != null) {
                                        values[i] = this.backend.get(keys[i].toString());
                                    }
                                    if (MemoryKContentDeliveryDriver.DEBUG) {
                                        System.out.println("GET " + keys[i] + "->" + values[i]);
                                    }
                                }
                                if (callback != null) {
                                    callback(values, null);
                                }
                            };
                            MemoryKContentDeliveryDriver.prototype.put = function (p_request, p_callback) {
                                for (var i = 0; i < p_request.size(); i++) {
                                    this.backend.put(p_request.getKey(i).toString(), p_request.getContent(i));
                                    if (MemoryKContentDeliveryDriver.DEBUG) {
                                        System.out.println("PUT " + p_request.getKey(i).toString() + "->" + p_request.getContent(i));
                                    }
                                }
                                if (p_callback != null) {
                                    p_callback(null);
                                }
                            };
                            MemoryKContentDeliveryDriver.prototype.remove = function (keys, callback) {
                                for (var i = 0; i < keys.length; i++) {
                                    this.backend.remove(keys[i]);
                                }
                                if (callback != null) {
                                    callback(null);
                                }
                            };
                            MemoryKContentDeliveryDriver.prototype.connect = function (callback) {
                                if (callback != null) {
                                    callback(null);
                                }
                            };
                            MemoryKContentDeliveryDriver.prototype.close = function (callback) {
                                this._localEventListeners.clear();
                                this.backend.clear();
                            };
                            MemoryKContentDeliveryDriver.prototype.registerListener = function (groupId, p_origin, p_listener) {
                                this._localEventListeners.registerListener(groupId, p_origin, p_listener);
                            };
                            MemoryKContentDeliveryDriver.prototype.unregisterGroup = function (groupId) {
                                this._localEventListeners.unregister(groupId);
                            };
                            MemoryKContentDeliveryDriver.prototype.registerMultiListener = function (groupId, origin, objects, listener) {
                                this._localEventListeners.registerListenerAll(groupId, origin, objects, listener);
                            };
                            MemoryKContentDeliveryDriver.prototype.send = function (msgs) {
                                this._localEventListeners.dispatch(msgs);
                            };
                            MemoryKContentDeliveryDriver.prototype.setManager = function (manager) {
                                this._localEventListeners.setManager(manager);
                            };
                            MemoryKContentDeliveryDriver.DEBUG = false;
                            return MemoryKContentDeliveryDriver;
                        })();
                        cdn.MemoryKContentDeliveryDriver = MemoryKContentDeliveryDriver;
                    })(cdn = data.cdn || (data.cdn = {}));
                    var manager;
                    (function (manager) {
                        var AccessMode = (function () {
                            function AccessMode() {
                            }
                            AccessMode.prototype.equals = function (other) {
                                return this == other;
                            };
                            AccessMode.values = function () {
                                return AccessMode._AccessModeVALUES;
                            };
                            AccessMode.READ = new AccessMode();
                            AccessMode.WRITE = new AccessMode();
                            AccessMode.DELETE = new AccessMode();
                            AccessMode._AccessModeVALUES = [
                                AccessMode.READ,
                                AccessMode.WRITE,
                                AccessMode.DELETE
                            ];
                            return AccessMode;
                        })();
                        manager.AccessMode = AccessMode;
                        var DefaultKDataManager = (function () {
                            function DefaultKDataManager(model) {
                                this._objectKeyCalculator = null;
                                this._universeKeyCalculator = null;
                                this.isConnected = false;
                                this.UNIVERSE_INDEX = 0;
                                this.OBJ_INDEX = 1;
                                this.GLO_TREE_INDEX = 2;
                                this.cachedGlobalUniverse = null;
                                this._cache = new org.kevoree.modeling.api.data.cache.MultiLayeredMemoryCache(this);
                                this._modelKeyCalculator = new org.kevoree.modeling.api.data.manager.KeyCalculator(DefaultKDataManager.zeroPrefix, 0);
                                this._groupKeyCalculator = new org.kevoree.modeling.api.data.manager.KeyCalculator(DefaultKDataManager.zeroPrefix, 0);
                                this._db = new org.kevoree.modeling.api.data.cdn.MemoryKContentDeliveryDriver();
                                this._db.setManager(this);
                                this._operationManager = new org.kevoree.modeling.api.util.DefaultOperationManager(this);
                                this._scheduler = new org.kevoree.modeling.api.scheduler.DirectScheduler();
                                this._model = model;
                            }
                            DefaultKDataManager.prototype.cache = function () {
                                return this._cache;
                            };
                            DefaultKDataManager.prototype.model = function () {
                                return this._model;
                            };
                            DefaultKDataManager.prototype.close = function (callback) {
                                this.isConnected = false;
                                if (this._db != null) {
                                    this._db.close(callback);
                                }
                                else {
                                    callback(null);
                                }
                            };
                            DefaultKDataManager.prototype.nextUniverseKey = function () {
                                if (this._universeKeyCalculator == null) {
                                    throw new java.lang.RuntimeException(DefaultKDataManager.UNIVERSE_NOT_CONNECTED_ERROR);
                                }
                                var nextGeneratedKey = this._universeKeyCalculator.nextKey();
                                if (nextGeneratedKey == org.kevoree.modeling.api.KConfig.NULL_LONG) {
                                    nextGeneratedKey = this._universeKeyCalculator.nextKey();
                                }
                                return nextGeneratedKey;
                            };
                            DefaultKDataManager.prototype.nextObjectKey = function () {
                                if (this._objectKeyCalculator == null) {
                                    throw new java.lang.RuntimeException(DefaultKDataManager.UNIVERSE_NOT_CONNECTED_ERROR);
                                }
                                var nextGeneratedKey = this._objectKeyCalculator.nextKey();
                                if (nextGeneratedKey == org.kevoree.modeling.api.KConfig.NULL_LONG) {
                                    nextGeneratedKey = this._objectKeyCalculator.nextKey();
                                }
                                return nextGeneratedKey;
                            };
                            DefaultKDataManager.prototype.nextModelKey = function () {
                                return this._modelKeyCalculator.nextKey();
                            };
                            DefaultKDataManager.prototype.nextGroupKey = function () {
                                return this._groupKeyCalculator.nextKey();
                            };
                            DefaultKDataManager.prototype.globalUniverseOrder = function () {
                                if (this.cachedGlobalUniverse != null) {
                                    return this.cachedGlobalUniverse;
                                }
                                else {
                                    return this.internal_load_global_universe();
                                }
                            };
                            DefaultKDataManager.prototype.internal_load_global_universe = function () {
                                this.cachedGlobalUniverse = this._cache.get(org.kevoree.modeling.api.data.cache.KContentKey.createGlobalUniverseTree());
                                return this.cachedGlobalUniverse;
                            };
                            DefaultKDataManager.prototype.initUniverse = function (p_universe, p_parent) {
                                var cached = this.globalUniverseOrder();
                                if (cached != null && cached.get(p_universe.key()) == org.kevoree.modeling.api.KConfig.NULL_LONG) {
                                    if (p_parent == null) {
                                        cached.put(p_universe.key(), p_universe.key());
                                    }
                                    else {
                                        cached.put(p_universe.key(), p_parent.key());
                                    }
                                }
                            };
                            DefaultKDataManager.prototype.parentUniverseKey = function (currentUniverseKey) {
                                var cached = this.globalUniverseOrder();
                                if (cached != null) {
                                    return cached.get(currentUniverseKey);
                                }
                                else {
                                    return org.kevoree.modeling.api.KConfig.NULL_LONG;
                                }
                            };
                            DefaultKDataManager.prototype.descendantsUniverseKeys = function (currentUniverseKey) {
                                var cached = this.globalUniverseOrder();
                                if (cached != null) {
                                    var temp = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                    cached.each(function (key, value) {
                                        if (value == currentUniverseKey && key != currentUniverseKey) {
                                            temp.put(key, value);
                                        }
                                    });
                                    var result = new Array();
                                    var insertIndex = [0];
                                    temp.each(function (key, value) {
                                        result[insertIndex[0]] = key;
                                        insertIndex[0]++;
                                    });
                                    return result;
                                }
                                else {
                                    return new Array();
                                }
                            };
                            DefaultKDataManager.prototype.save = function (callback) {
                                var _this = this;
                                var dirtiesEntries = this._cache.dirties();
                                var request = new org.kevoree.modeling.api.data.cdn.KContentPutRequest(dirtiesEntries.length + 2);
                                var notificationMessages = new org.kevoree.modeling.api.msg.KEvents(dirtiesEntries.length);
                                for (var i = 0; i < dirtiesEntries.length; i++) {
                                    var cachedObject = dirtiesEntries[i].object;
                                    var meta;
                                    if (dirtiesEntries[i].object instanceof org.kevoree.modeling.api.data.cache.KCacheEntry) {
                                        meta = dirtiesEntries[i].object.modifiedIndexes();
                                    }
                                    else {
                                        meta = null;
                                    }
                                    notificationMessages.setEvent(i, dirtiesEntries[i].key, meta);
                                    request.put(dirtiesEntries[i].key, cachedObject.serialize());
                                    cachedObject.setClean();
                                }
                                request.put(org.kevoree.modeling.api.data.cache.KContentKey.createLastObjectIndexFromPrefix(this._objectKeyCalculator.prefix()), "" + this._objectKeyCalculator.lastComputedIndex());
                                request.put(org.kevoree.modeling.api.data.cache.KContentKey.createLastUniverseIndexFromPrefix(this._universeKeyCalculator.prefix()), "" + this._universeKeyCalculator.lastComputedIndex());
                                this._db.put(request, function (throwable) {
                                    if (throwable == null) {
                                        _this._db.send(notificationMessages);
                                    }
                                    if (callback != null) {
                                        callback(throwable);
                                    }
                                });
                            };
                            DefaultKDataManager.prototype.initKObject = function (obj, originView) {
                                var cacheEntry = new org.kevoree.modeling.api.data.cache.KCacheEntry();
                                cacheEntry.initRaw(org.kevoree.modeling.api.data.manager.Index.RESERVED_INDEXES + obj.metaClass().metaElements().length);
                                cacheEntry._dirty = true;
                                cacheEntry.metaClass = obj.metaClass();
                                cacheEntry.inc();
                                var timeTree = new org.kevoree.modeling.api.rbtree.IndexRBTree();
                                timeTree.inc();
                                timeTree.insert(obj.now());
                                var universeTree = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                universeTree.inc();
                                universeTree.put(obj.view().universe().key(), obj.now());
                                this._cache.put(org.kevoree.modeling.api.data.cache.KContentKey.createTimeTree(obj.universe().key(), obj.uuid()), timeTree);
                                this._cache.put(org.kevoree.modeling.api.data.cache.KContentKey.createUniverseTree(obj.uuid()), universeTree);
                                this._cache.put(org.kevoree.modeling.api.data.cache.KContentKey.createObject(obj.universe().key(), obj.now(), obj.uuid()), cacheEntry);
                            };
                            DefaultKDataManager.prototype.connect = function (connectCallback) {
                                var _this = this;
                                if (this.isConnected) {
                                    if (connectCallback != null) {
                                        connectCallback(null);
                                    }
                                }
                                if (this._db == null) {
                                    if (connectCallback != null) {
                                        connectCallback(new java.lang.Exception("Please attach a KDataBase AND a KBroker first !"));
                                    }
                                }
                                else {
                                    this._db.connect(function (throwable) {
                                        if (throwable == null) {
                                            _this._db.atomicGetMutate(org.kevoree.modeling.api.data.cache.KContentKey.createLastPrefix(), org.kevoree.modeling.api.data.cdn.AtomicOperationFactory.getMutatePrefixOperation(), function (payloadPrefix, error) {
                                                if (error != null) {
                                                    if (connectCallback != null) {
                                                        connectCallback(error);
                                                    }
                                                }
                                                else {
                                                    var cleanedPrefixPayload = payloadPrefix;
                                                    if (cleanedPrefixPayload == null || cleanedPrefixPayload.equals("")) {
                                                        cleanedPrefixPayload = "0";
                                                    }
                                                    var newPrefix;
                                                    try {
                                                        newPrefix = java.lang.Short.parseShort(cleanedPrefixPayload);
                                                    }
                                                    catch ($ex$) {
                                                        if ($ex$ instanceof java.lang.Exception) {
                                                            var e = $ex$;
                                                            newPrefix = java.lang.Short.parseShort("0");
                                                        }
                                                    }
                                                    var connectionElemKeys = new Array();
                                                    connectionElemKeys[_this.UNIVERSE_INDEX] = org.kevoree.modeling.api.data.cache.KContentKey.createLastUniverseIndexFromPrefix(newPrefix);
                                                    connectionElemKeys[_this.OBJ_INDEX] = org.kevoree.modeling.api.data.cache.KContentKey.createLastObjectIndexFromPrefix(newPrefix);
                                                    connectionElemKeys[_this.GLO_TREE_INDEX] = org.kevoree.modeling.api.data.cache.KContentKey.createGlobalUniverseTree();
                                                    var finalNewPrefix = newPrefix;
                                                    _this._db.get(connectionElemKeys, function (strings, errorL2) {
                                                        if (errorL2 != null) {
                                                            if (connectCallback != null) {
                                                                connectCallback(errorL2);
                                                            }
                                                        }
                                                        else {
                                                            if (strings.length == 3) {
                                                                var detected = null;
                                                                try {
                                                                    var uniIndexPayload = strings[_this.UNIVERSE_INDEX];
                                                                    if (uniIndexPayload == null || uniIndexPayload.equals("")) {
                                                                        uniIndexPayload = "0";
                                                                    }
                                                                    var objIndexPayload = strings[_this.OBJ_INDEX];
                                                                    if (objIndexPayload == null || objIndexPayload.equals("")) {
                                                                        objIndexPayload = "0";
                                                                    }
                                                                    var globalUniverseTreePayload = strings[_this.GLO_TREE_INDEX];
                                                                    var globalUniverseTree;
                                                                    if (globalUniverseTreePayload != null) {
                                                                        globalUniverseTree = new org.kevoree.modeling.api.map.LongLongHashMap(0, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                                                        try {
                                                                            globalUniverseTree.unserialize(org.kevoree.modeling.api.data.cache.KContentKey.createGlobalUniverseTree(), globalUniverseTreePayload, _this.model().metaModel());
                                                                        }
                                                                        catch ($ex$) {
                                                                            if ($ex$ instanceof java.lang.Exception) {
                                                                                var e = $ex$;
                                                                                e.printStackTrace();
                                                                            }
                                                                        }
                                                                    }
                                                                    else {
                                                                        globalUniverseTree = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                                                    }
                                                                    _this._cache.put(org.kevoree.modeling.api.data.cache.KContentKey.createGlobalUniverseTree(), globalUniverseTree);
                                                                    var newUniIndex = java.lang.Long.parseLong(uniIndexPayload);
                                                                    var newObjIndex = java.lang.Long.parseLong(objIndexPayload);
                                                                    _this._universeKeyCalculator = new org.kevoree.modeling.api.data.manager.KeyCalculator(finalNewPrefix, newUniIndex);
                                                                    _this._objectKeyCalculator = new org.kevoree.modeling.api.data.manager.KeyCalculator(finalNewPrefix, newObjIndex);
                                                                    _this.isConnected = true;
                                                                }
                                                                catch ($ex$) {
                                                                    if ($ex$ instanceof java.lang.Exception) {
                                                                        var e = $ex$;
                                                                        detected = e;
                                                                    }
                                                                }
                                                                if (connectCallback != null) {
                                                                    connectCallback(detected);
                                                                }
                                                            }
                                                            else {
                                                                if (connectCallback != null) {
                                                                    connectCallback(new java.lang.Exception("Error while connecting the KDataStore..."));
                                                                }
                                                            }
                                                        }
                                                    });
                                                }
                                            });
                                        }
                                        else {
                                            if (connectCallback != null) {
                                                connectCallback(throwable);
                                            }
                                        }
                                    });
                                }
                            };
                            DefaultKDataManager.prototype.entry = function (origin, accessMode) {
                                var objectUniverseTree = this._cache.get(org.kevoree.modeling.api.data.cache.KContentKey.createUniverseTree(origin.uuid()));
                                var resolvedUniverse = org.kevoree.modeling.api.data.manager.ResolutionHelper.resolve_universe(this.globalUniverseOrder(), objectUniverseTree, origin.now(), origin.view().universe().key());
                                var timeTree = this._cache.get(org.kevoree.modeling.api.data.cache.KContentKey.createTimeTree(resolvedUniverse, origin.uuid()));
                                if (timeTree == null) {
                                    throw new java.lang.RuntimeException(DefaultKDataManager.OUT_OF_CACHE_MESSAGE + " : TimeTree not found for " + org.kevoree.modeling.api.data.cache.KContentKey.createTimeTree(resolvedUniverse, origin.uuid()) + " from " + origin.universe().key() + "/" + resolvedUniverse);
                                }
                                var resolvedNode = timeTree.previousOrEqual(origin.now());
                                if (resolvedNode != null) {
                                    var resolvedTime = resolvedNode.getKey();
                                    var needTimeCopy = accessMode.equals(org.kevoree.modeling.api.data.manager.AccessMode.WRITE) && (resolvedTime != origin.now());
                                    var needUniverseCopy = accessMode.equals(org.kevoree.modeling.api.data.manager.AccessMode.WRITE) && (resolvedUniverse != origin.universe().key());
                                    var entry = this._cache.get(org.kevoree.modeling.api.data.cache.KContentKey.createObject(resolvedUniverse, resolvedTime, origin.uuid()));
                                    if (entry == null) {
                                        return null;
                                    }
                                    if (accessMode.equals(org.kevoree.modeling.api.data.manager.AccessMode.DELETE)) {
                                        timeTree.delete(origin.now());
                                        return entry;
                                    }
                                    if (!needTimeCopy && !needUniverseCopy) {
                                        if (accessMode.equals(org.kevoree.modeling.api.data.manager.AccessMode.WRITE)) {
                                            entry._dirty = true;
                                        }
                                        return entry;
                                    }
                                    else {
                                        var clonedEntry = entry.clone();
                                        this._cache.put(org.kevoree.modeling.api.data.cache.KContentKey.createObject(origin.universe().key(), origin.now(), origin.uuid()), clonedEntry);
                                        if (!needUniverseCopy) {
                                            timeTree.insert(origin.now());
                                        }
                                        else {
                                            var newTemporalTree = new org.kevoree.modeling.api.rbtree.IndexRBTree();
                                            newTemporalTree.insert(origin.now());
                                            this._cache.put(org.kevoree.modeling.api.data.cache.KContentKey.createTimeTree(origin.universe().key(), origin.uuid()), newTemporalTree);
                                            objectUniverseTree.put(origin.universe().key(), origin.now());
                                        }
                                        entry.dec();
                                        return clonedEntry;
                                    }
                                }
                                else {
                                    System.err.println(DefaultKDataManager.OUT_OF_CACHE_MESSAGE + " Time not resolved " + origin.now());
                                    return null;
                                }
                            };
                            DefaultKDataManager.prototype.discard = function (p_universe, callback) {
                                var _this = this;
                                this._cache.clearDataSegment();
                                var globalUniverseTree = new Array();
                                globalUniverseTree[0] = org.kevoree.modeling.api.data.cache.KContentKey.createGlobalUniverseTree();
                                this.reload(globalUniverseTree, function (throwable) {
                                    _this.cachedGlobalUniverse = null;
                                    callback(throwable);
                                });
                            };
                            DefaultKDataManager.prototype.delete = function (p_universe, callback) {
                                throw new java.lang.RuntimeException("Not implemented yet !");
                            };
                            DefaultKDataManager.prototype.lookup = function (originView, key, callback) {
                                var keys = new Array();
                                keys[0] = key;
                                this.lookupAll(originView, keys, function (kObjects) {
                                    if (kObjects.length == 1) {
                                        if (callback != null) {
                                            callback(kObjects[0]);
                                        }
                                    }
                                    else {
                                        if (callback != null) {
                                            callback(null);
                                        }
                                    }
                                });
                            };
                            DefaultKDataManager.prototype.lookupAll = function (originView, keys, callback) {
                                this._scheduler.dispatch(new org.kevoree.modeling.api.data.manager.LookupAllRunnable(originView, keys, callback, this));
                            };
                            DefaultKDataManager.prototype.cdn = function () {
                                return this._db;
                            };
                            DefaultKDataManager.prototype.setContentDeliveryDriver = function (p_dataBase) {
                                this._db = p_dataBase;
                                p_dataBase.setManager(this);
                            };
                            DefaultKDataManager.prototype.setScheduler = function (p_scheduler) {
                                if (p_scheduler != null) {
                                    this._scheduler = p_scheduler;
                                }
                            };
                            DefaultKDataManager.prototype.operationManager = function () {
                                return this._operationManager;
                            };
                            DefaultKDataManager.prototype.getRoot = function (originView, callback) {
                                var _this = this;
                                this.bumpKeyToCache(org.kevoree.modeling.api.data.cache.KContentKey.createRootUniverseTree(), function (rootGlobalUniverseIndex) {
                                    if (rootGlobalUniverseIndex == null) {
                                        callback(null);
                                    }
                                    else {
                                        var closestUniverse = org.kevoree.modeling.api.data.manager.ResolutionHelper.resolve_universe(_this.globalUniverseOrder(), rootGlobalUniverseIndex, originView.now(), originView.universe().key());
                                        var universeTreeRootKey = org.kevoree.modeling.api.data.cache.KContentKey.createRootTimeTree(closestUniverse);
                                        _this.bumpKeyToCache(universeTreeRootKey, function (universeTree) {
                                            if (universeTree == null) {
                                                callback(null);
                                            }
                                            else {
                                                var resolvedNode = universeTree.previousOrEqual(originView.now());
                                                if (resolvedNode == null) {
                                                    callback(null);
                                                }
                                                else {
                                                    _this.lookup(originView, resolvedNode.value, callback);
                                                }
                                            }
                                        });
                                    }
                                });
                            };
                            DefaultKDataManager.prototype.setRoot = function (newRoot, callback) {
                                var _this = this;
                                this.bumpKeyToCache(org.kevoree.modeling.api.data.cache.KContentKey.createRootUniverseTree(), function (globalRootTree) {
                                    var cleanedTree = globalRootTree;
                                    if (cleanedTree == null) {
                                        cleanedTree = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                        _this._cache.put(org.kevoree.modeling.api.data.cache.KContentKey.createRootUniverseTree(), cleanedTree);
                                    }
                                    var closestUniverse = org.kevoree.modeling.api.data.manager.ResolutionHelper.resolve_universe(_this.globalUniverseOrder(), cleanedTree, newRoot.now(), newRoot.universe().key());
                                    cleanedTree.put(newRoot.universe().key(), newRoot.now());
                                    if (closestUniverse != newRoot.universe().key()) {
                                        var newTimeTree = new org.kevoree.modeling.api.rbtree.LongRBTree();
                                        newTimeTree.insert(newRoot.now(), newRoot.uuid());
                                        var universeTreeRootKey = org.kevoree.modeling.api.data.cache.KContentKey.createRootTimeTree(newRoot.universe().key());
                                        _this._cache.put(universeTreeRootKey, newTimeTree);
                                        if (callback != null) {
                                            callback(null);
                                        }
                                    }
                                    else {
                                        var universeTreeRootKey = org.kevoree.modeling.api.data.cache.KContentKey.createRootTimeTree(closestUniverse);
                                        _this.bumpKeyToCache(universeTreeRootKey, function (resolvedRootTimeTree) {
                                            var initializedTree = resolvedRootTimeTree;
                                            if (initializedTree == null) {
                                                initializedTree = new org.kevoree.modeling.api.rbtree.LongRBTree();
                                                _this._cache.put(universeTreeRootKey, initializedTree);
                                            }
                                            initializedTree.insert(newRoot.now(), newRoot.uuid());
                                            if (callback != null) {
                                                callback(null);
                                            }
                                        });
                                    }
                                });
                            };
                            DefaultKDataManager.prototype.reload = function (keys, callback) {
                                var _this = this;
                                var toReload = new java.util.ArrayList();
                                for (var i = 0; i < keys.length; i++) {
                                    var cached = this._cache.get(keys[i]);
                                    if (cached != null && !cached.isDirty()) {
                                        toReload.add(keys[i]);
                                    }
                                }
                                var toReload_flat = toReload.toArray(new Array());
                                this._db.get(toReload_flat, function (strings, error) {
                                    if (error != null) {
                                        error.printStackTrace();
                                        if (callback != null) {
                                            callback(null);
                                        }
                                    }
                                    else {
                                        for (var i = 0; i < strings.length; i++) {
                                            if (strings[i] != null) {
                                                var correspondingKey = toReload_flat[i];
                                                var cachedObj = _this._cache.get(correspondingKey);
                                                if (cachedObj != null && !cachedObj.isDirty()) {
                                                    cachedObj = _this.internal_unserialize(correspondingKey, strings[i]);
                                                    if (cachedObj != null) {
                                                        _this._cache.put(correspondingKey, cachedObj);
                                                    }
                                                }
                                            }
                                        }
                                        if (callback != null) {
                                            callback(null);
                                        }
                                    }
                                });
                            };
                            DefaultKDataManager.prototype.bumpKeyToCache = function (contentKey, callback) {
                                var _this = this;
                                var cached = this._cache.get(contentKey);
                                if (cached != null) {
                                    callback(cached);
                                }
                                else {
                                    var keys = new Array();
                                    keys[0] = contentKey;
                                    this._db.get(keys, function (strings, error) {
                                        if (strings[0] != null) {
                                            var newObject = _this.internal_unserialize(contentKey, strings[0]);
                                            if (newObject != null) {
                                                _this._cache.put(contentKey, newObject);
                                            }
                                            callback(newObject);
                                        }
                                        else {
                                            callback(null);
                                        }
                                    });
                                }
                            };
                            DefaultKDataManager.prototype.bumpKeysToCache = function (contentKeys, callback) {
                                var _this = this;
                                var toLoadIndexes = null;
                                var nbElem = 0;
                                var result = new Array();
                                for (var i = 0; i < contentKeys.length; i++) {
                                    if (contentKeys[i] != null) {
                                        result[i] = this._cache.get(contentKeys[i]);
                                        if (result[i] == null) {
                                            if (toLoadIndexes == null) {
                                                toLoadIndexes = new Array();
                                            }
                                            toLoadIndexes[i] = true;
                                            nbElem++;
                                        }
                                    }
                                }
                                if (toLoadIndexes == null) {
                                    callback(result);
                                }
                                else {
                                    var toLoadDbKeys = new Array();
                                    var originIndexes = new Array();
                                    var toLoadIndex = 0;
                                    for (var i = 0; i < contentKeys.length; i++) {
                                        if (toLoadIndexes[i]) {
                                            toLoadDbKeys[toLoadIndex] = contentKeys[i];
                                            originIndexes[toLoadIndex] = i;
                                            toLoadIndex++;
                                        }
                                    }
                                    this._db.get(toLoadDbKeys, function (payloads, error) {
                                        for (var i = 0; i < payloads.length; i++) {
                                            if (payloads[i] != null) {
                                                var newObjKey = toLoadDbKeys[i];
                                                var newObject = _this.internal_unserialize(newObjKey, payloads[i]);
                                                if (newObject != null) {
                                                    _this._cache.put(newObjKey, newObject);
                                                    var originIndex = originIndexes[i];
                                                    result[originIndex] = newObject;
                                                }
                                            }
                                        }
                                        callback(result);
                                    });
                                }
                            };
                            DefaultKDataManager.prototype.internal_unserialize = function (key, payload) {
                                var result;
                                var segment = key.segment();
                                if (segment == org.kevoree.modeling.api.data.cache.KContentKey.GLOBAL_SEGMENT_DATA_INDEX) {
                                    result = new org.kevoree.modeling.api.rbtree.IndexRBTree();
                                }
                                else {
                                    if (segment == org.kevoree.modeling.api.data.cache.KContentKey.GLOBAL_SEGMENT_DATA_RAW) {
                                        result = new org.kevoree.modeling.api.data.cache.KCacheEntry();
                                    }
                                    else {
                                        if (segment == org.kevoree.modeling.api.data.cache.KContentKey.GLOBAL_SEGMENT_DATA_ROOT_INDEX) {
                                            result = new org.kevoree.modeling.api.rbtree.LongRBTree();
                                        }
                                        else {
                                            if (segment == org.kevoree.modeling.api.data.cache.KContentKey.GLOBAL_SEGMENT_DATA_HASH_INDEX || segment == org.kevoree.modeling.api.data.cache.KContentKey.GLOBAL_SEGMENT_UNIVERSE_TREE || segment == org.kevoree.modeling.api.data.cache.KContentKey.GLOBAL_SEGMENT_DATA_ROOT) {
                                                result = new org.kevoree.modeling.api.map.LongLongHashMap(0, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                            }
                                            else {
                                                result = null;
                                            }
                                        }
                                    }
                                }
                                try {
                                    if (result == null) {
                                        return null;
                                    }
                                    else {
                                        result.unserialize(key, payload, this.model().metaModel());
                                        return result;
                                    }
                                }
                                catch ($ex$) {
                                    if ($ex$ instanceof java.lang.Exception) {
                                        var e = $ex$;
                                        e.printStackTrace();
                                        return null;
                                    }
                                }
                            };
                            DefaultKDataManager.OUT_OF_CACHE_MESSAGE = "KMF Error: your object is out of cache, you probably kept an old reference. Please reload it with a lookup";
                            DefaultKDataManager.UNIVERSE_NOT_CONNECTED_ERROR = "Please connect your model prior to create a universe or an object";
                            DefaultKDataManager.zeroPrefix = 0;
                            return DefaultKDataManager;
                        })();
                        manager.DefaultKDataManager = DefaultKDataManager;
                        var Index = (function () {
                            function Index() {
                            }
                            Index.PARENT_INDEX = 0;
                            Index.INBOUNDS_INDEX = 1;
                            Index.REF_IN_PARENT_INDEX = 2;
                            Index.INFER_CHILDREN = 3;
                            Index.RESERVED_INDEXES = 4;
                            return Index;
                        })();
                        manager.Index = Index;
                        var JsonRaw = (function () {
                            function JsonRaw() {
                            }
                            JsonRaw.decode = function (payload, now, metaModel, entry) {
                                if (payload == null) {
                                    return false;
                                }
                                var objectReader = new org.kevoree.modeling.api.json.JsonObjectReader();
                                objectReader.parseObject(payload);
                                if (objectReader.get(org.kevoree.modeling.api.json.JsonFormat.KEY_META) == null) {
                                    return false;
                                }
                                else {
                                    entry.metaClass = metaModel.metaClass(objectReader.get(org.kevoree.modeling.api.json.JsonFormat.KEY_META).toString());
                                    entry.initRaw(org.kevoree.modeling.api.data.manager.Index.RESERVED_INDEXES + entry.metaClass.metaElements().length);
                                    var metaKeys = objectReader.keys();
                                    for (var i = 0; i < metaKeys.length; i++) {
                                        if (metaKeys[i].equals(org.kevoree.modeling.api.json.JsonFormat.INBOUNDS_META)) {
                                            try {
                                                var raw_keys = objectReader.getAsStringArray(metaKeys[i]);
                                                var inbounds = new Array();
                                                for (var j = 0; j < raw_keys.length; j++) {
                                                    try {
                                                        inbounds[j] = java.lang.Long.parseLong(raw_keys[j]);
                                                    }
                                                    catch ($ex$) {
                                                        if ($ex$ instanceof java.lang.Exception) {
                                                            var e = $ex$;
                                                            e.printStackTrace();
                                                        }
                                                    }
                                                }
                                                entry.set(org.kevoree.modeling.api.data.manager.Index.INBOUNDS_INDEX, inbounds);
                                            }
                                            catch ($ex$) {
                                                if ($ex$ instanceof java.lang.Exception) {
                                                    var e = $ex$;
                                                    e.printStackTrace();
                                                }
                                            }
                                        }
                                        else {
                                            if (metaKeys[i].equals(org.kevoree.modeling.api.json.JsonFormat.PARENT_META)) {
                                                try {
                                                    var parentKeyStrings = objectReader.getAsStringArray(metaKeys[i]);
                                                    var parentKey = new Array();
                                                    for (var k = 0; k < parentKeyStrings.length; k++) {
                                                        parentKey[0] = java.lang.Long.parseLong(parentKeyStrings[k]);
                                                    }
                                                    entry.set(org.kevoree.modeling.api.data.manager.Index.PARENT_INDEX, parentKey);
                                                }
                                                catch ($ex$) {
                                                    if ($ex$ instanceof java.lang.Exception) {
                                                        var e = $ex$;
                                                        e.printStackTrace();
                                                    }
                                                }
                                            }
                                            else {
                                                if (metaKeys[i].equals(org.kevoree.modeling.api.json.JsonFormat.PARENT_REF_META)) {
                                                    try {
                                                        var raw_payload_ref = objectReader.get(metaKeys[i]).toString();
                                                        var elemsRefs = raw_payload_ref.split(JsonRaw.SEP);
                                                        if (elemsRefs.length == 2) {
                                                            var foundMeta = metaModel.metaClass(elemsRefs[0].trim());
                                                            if (foundMeta != null) {
                                                                var metaReference = foundMeta.metaByName(elemsRefs[1].trim());
                                                                if (metaReference != null && metaReference instanceof org.kevoree.modeling.api.abs.AbstractMetaReference) {
                                                                    entry.set(org.kevoree.modeling.api.data.manager.Index.REF_IN_PARENT_INDEX, metaReference);
                                                                }
                                                            }
                                                        }
                                                    }
                                                    catch ($ex$) {
                                                        if ($ex$ instanceof java.lang.Exception) {
                                                            var e = $ex$;
                                                            e.printStackTrace();
                                                        }
                                                    }
                                                }
                                                else {
                                                    var metaElement = entry.metaClass.metaByName(metaKeys[i]);
                                                    var insideContent = objectReader.get(metaKeys[i]);
                                                    if (insideContent != null) {
                                                        if (metaElement != null && metaElement.metaType().equals(org.kevoree.modeling.api.meta.MetaType.ATTRIBUTE)) {
                                                            entry.set(metaElement.index(), metaElement.strategy().load(insideContent.toString(), metaElement, now));
                                                        }
                                                        else {
                                                            if (metaElement != null && metaElement instanceof org.kevoree.modeling.api.abs.AbstractMetaReference) {
                                                                try {
                                                                    var plainRawSet = objectReader.getAsStringArray(metaKeys[i]);
                                                                    var convertedRaw = new Array();
                                                                    for (var l = 0; l < plainRawSet.length; l++) {
                                                                        try {
                                                                            convertedRaw[l] = java.lang.Long.parseLong(plainRawSet[l]);
                                                                        }
                                                                        catch ($ex$) {
                                                                            if ($ex$ instanceof java.lang.Exception) {
                                                                                var e = $ex$;
                                                                                e.printStackTrace();
                                                                            }
                                                                        }
                                                                    }
                                                                    entry.set(metaElement.index(), convertedRaw);
                                                                }
                                                                catch ($ex$) {
                                                                    if ($ex$ instanceof java.lang.Exception) {
                                                                        var e = $ex$;
                                                                        e.printStackTrace();
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    entry.setClean();
                                    return true;
                                }
                            };
                            JsonRaw.encode = function (raw, uuid, p_metaClass, isRoot) {
                                var builder = {};
                                builder[org.kevoree.modeling.api.json.JsonFormat.KEY_META] = p_metaClass.metaName();
                                if (uuid != null) {
                                    builder[org.kevoree.modeling.api.json.JsonFormat.KEY_UUID] = uuid;
                                }
                                if (isRoot) {
                                    builder[org.kevoree.modeling.api.json.JsonFormat.KEY_ROOT] = true;
                                }
                                var parentKey = raw.getRef(org.kevoree.modeling.api.data.manager.Index.PARENT_INDEX);
                                if (parentKey != null) {
                                    builder[org.kevoree.modeling.api.json.JsonFormat.PARENT_META] = parentKey;
                                }
                                var refInParent = raw.get(org.kevoree.modeling.api.data.manager.Index.REF_IN_PARENT_INDEX);
                                if (refInParent != null) {
                                    builder[org.kevoree.modeling.api.json.JsonFormat.PARENT_REF_META] = refInParent.origin().metaName() + '@' + refInParent.metaName();
                                }
                                var inboundsKeys = raw.getRef(org.kevoree.modeling.api.data.manager.Index.INBOUNDS_INDEX);
                                if (inboundsKeys != null) {
                                    builder[org.kevoree.modeling.api.json.JsonFormat.INBOUNDS_META] = inboundsKeys;
                                }
                                var metaElements = p_metaClass.metaElements();
                                var payload_res;
                                for (var i = 0; i < metaElements.length; i++) {
                                    if (metaElements[i] != null && metaElements[i].metaType().equals(org.kevoree.modeling.api.meta.MetaType.ATTRIBUTE)) {
                                        if (metaElements[i]['attributeType']() != org.kevoree.modeling.api.meta.PrimitiveTypes.TRANSIENT) {
                                            var attrsPayload = metaElements[i]['strategy']().save(payload_res, metaElements[i]);
                                            builder[metaElements[i].metaName()] = attrsPayload;
                                        }
                                    }
                                    else {
                                        builder[metaElements[i].metaName()] = payload_res;
                                    }
                                }
                                return JSON.stringify(builder);
                            };
                            JsonRaw.SEP = "@";
                            return JsonRaw;
                        })();
                        manager.JsonRaw = JsonRaw;
                        var KeyCalculator = (function () {
                            function KeyCalculator(prefix, currentIndex) {
                                this._prefix = "0x" + prefix.toString(org.kevoree.modeling.api.KConfig.PREFIX_SIZE);
                                this._currentIndex = currentIndex;
                            }
                            KeyCalculator.prototype.nextKey = function () {
                                if (this._currentIndex == org.kevoree.modeling.api.KConfig.KEY_PREFIX_MASK) {
                                    throw new java.lang.IndexOutOfBoundsException("Object Index could not be created because it exceeded the capacity of the current prefix. Ask for a new prefix.");
                                }
                                this._currentIndex++;
                                var indexHex = this._currentIndex.toString(org.kevoree.modeling.api.KConfig.PREFIX_SIZE);
                                var objectKey = parseInt(this._prefix + "000000000".substring(0, 9 - indexHex.length) + indexHex, org.kevoree.modeling.api.KConfig.PREFIX_SIZE);
                                if (objectKey >= org.kevoree.modeling.api.KConfig.NULL_LONG) {
                                    throw new java.lang.IndexOutOfBoundsException("Object Index exceeds teh maximum JavaScript number capacity. (2^" + org.kevoree.modeling.api.KConfig.LONG_SIZE + ")");
                                }
                                return objectKey;
                            };
                            KeyCalculator.prototype.lastComputedIndex = function () {
                                return this._currentIndex;
                            };
                            KeyCalculator.prototype.prefix = function () {
                                return parseInt(this._prefix, org.kevoree.modeling.api.KConfig.PREFIX_SIZE);
                            };
                            return KeyCalculator;
                        })();
                        manager.KeyCalculator = KeyCalculator;
                        var LookupAllRunnable = (function () {
                            function LookupAllRunnable(p_originView, p_keys, p_callback, p_store) {
                                this._originView = p_originView;
                                this._keys = p_keys;
                                this._callback = p_callback;
                                this._store = p_store;
                            }
                            LookupAllRunnable.prototype.run = function () {
                                var _this = this;
                                var tempKeys = new Array();
                                for (var i = 0; i < this._keys.length; i++) {
                                    if (this._keys[i] != org.kevoree.modeling.api.KConfig.NULL_LONG) {
                                        tempKeys[i] = org.kevoree.modeling.api.data.cache.KContentKey.createUniverseTree(this._keys[i]);
                                    }
                                }
                                this._store.bumpKeysToCache(tempKeys, function (universeIndexes) {
                                    for (var i = 0; i < _this._keys.length; i++) {
                                        var toLoadKey = null;
                                        if (universeIndexes[i] != null) {
                                            var closestUniverse = org.kevoree.modeling.api.data.manager.ResolutionHelper.resolve_universe(_this._store.globalUniverseOrder(), universeIndexes[i], _this._originView.now(), _this._originView.universe().key());
                                            toLoadKey = org.kevoree.modeling.api.data.cache.KContentKey.createTimeTree(closestUniverse, _this._keys[i]);
                                        }
                                        tempKeys[i] = toLoadKey;
                                    }
                                    _this._store.bumpKeysToCache(tempKeys, function (timeIndexes) {
                                        for (var i = 0; i < _this._keys.length; i++) {
                                            var resolvedContentKey = null;
                                            if (timeIndexes[i] != null) {
                                                var cachedIndexTree = timeIndexes[i];
                                                var resolvedNode = cachedIndexTree.previousOrEqual(_this._originView.now());
                                                if (resolvedNode != null) {
                                                    resolvedContentKey = org.kevoree.modeling.api.data.cache.KContentKey.createObject(tempKeys[i].universe(), resolvedNode.getKey(), _this._keys[i]);
                                                }
                                            }
                                            tempKeys[i] = resolvedContentKey;
                                        }
                                        _this._store.bumpKeysToCache(tempKeys, function (cachedObjects) {
                                            var proxies = new Array();
                                            for (var i = 0; i < _this._keys.length; i++) {
                                                if (cachedObjects[i] != null && cachedObjects[i] instanceof org.kevoree.modeling.api.data.cache.KCacheEntry) {
                                                    proxies[i] = _this._originView.createProxy(cachedObjects[i].metaClass, _this._keys[i]);
                                                    if (proxies[i] != null) {
                                                        var cachedIndexTree = timeIndexes[i];
                                                        cachedObjects[i].inc();
                                                        cachedIndexTree.inc();
                                                    }
                                                }
                                            }
                                            _this._callback(proxies);
                                        });
                                    });
                                });
                            };
                            return LookupAllRunnable;
                        })();
                        manager.LookupAllRunnable = LookupAllRunnable;
                        var ResolutionHelper = (function () {
                            function ResolutionHelper() {
                            }
                            ResolutionHelper.resolve_universe = function (globalTree, objUniverseTree, timeToResolve, originUniverseId) {
                                if (globalTree == null || objUniverseTree == null) {
                                    return originUniverseId;
                                }
                                var currentUniverse = originUniverseId;
                                var previousUniverse = org.kevoree.modeling.api.KConfig.NULL_LONG;
                                var divergenceTime = objUniverseTree.get(currentUniverse);
                                while (currentUniverse != previousUniverse) {
                                    if (divergenceTime != org.kevoree.modeling.api.KConfig.NULL_LONG && divergenceTime <= timeToResolve) {
                                        return currentUniverse;
                                    }
                                    previousUniverse = currentUniverse;
                                    currentUniverse = globalTree.get(currentUniverse);
                                    divergenceTime = objUniverseTree.get(currentUniverse);
                                }
                                return originUniverseId;
                            };
                            ResolutionHelper.universeSelectByRange = function (globalTree, objUniverseTree, rangeMin, rangeMax, originUniverseId) {
                                var collected = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                var currentUniverse = originUniverseId;
                                var previousUniverse = org.kevoree.modeling.api.KConfig.NULL_LONG;
                                var divergenceTime = objUniverseTree.get(currentUniverse);
                                while (currentUniverse != previousUniverse) {
                                    if (divergenceTime != org.kevoree.modeling.api.KConfig.NULL_LONG) {
                                        if (divergenceTime <= rangeMin) {
                                            collected.put(collected.size(), currentUniverse);
                                            break;
                                        }
                                        else {
                                            if (divergenceTime <= rangeMax) {
                                                collected.put(collected.size(), currentUniverse);
                                            }
                                        }
                                    }
                                    previousUniverse = currentUniverse;
                                    currentUniverse = globalTree.get(currentUniverse);
                                    divergenceTime = objUniverseTree.get(currentUniverse);
                                }
                                var trimmed = new Array();
                                for (var i = 0; i < collected.size(); i++) {
                                    trimmed[i] = collected.get(i);
                                }
                                return trimmed;
                            };
                            return ResolutionHelper;
                        })();
                        manager.ResolutionHelper = ResolutionHelper;
                    })(manager = data.manager || (data.manager = {}));
                })(data = api.data || (api.data = {}));
                var event;
                (function (event) {
                    var LocalEventListeners = (function () {
                        function LocalEventListeners() {
                            this._internalListenerKeyGen = new org.kevoree.modeling.api.data.manager.KeyCalculator(0, 0);
                            this._simpleListener = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                            this._multiListener = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                            this._obj2Listener = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                            this._listener2Object = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                            this._listener2Objects = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                            this._group2Listener = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                        }
                        LocalEventListeners.prototype.registerListener = function (groupId, origin, listener) {
                            var generateNewID = this._internalListenerKeyGen.nextKey();
                            this._simpleListener.put(generateNewID, listener);
                            this._listener2Object.put(generateNewID, origin.universe().key());
                            var subLayer = this._obj2Listener.get(origin.uuid());
                            if (subLayer == null) {
                                subLayer = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                this._obj2Listener.put(origin.uuid(), subLayer);
                            }
                            subLayer.put(generateNewID, origin.universe().key());
                            subLayer = this._group2Listener.get(groupId);
                            if (subLayer == null) {
                                subLayer = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                this._group2Listener.put(groupId, subLayer);
                            }
                            subLayer.put(generateNewID, 1);
                        };
                        LocalEventListeners.prototype.registerListenerAll = function (groupId, origin, objects, listener) {
                            var generateNewID = this._internalListenerKeyGen.nextKey();
                            this._multiListener.put(generateNewID, listener);
                            this._listener2Objects.put(generateNewID, objects);
                            var subLayer;
                            for (var i = 0; i < objects.length; i++) {
                                subLayer = this._obj2Listener.get(objects[i]);
                                if (subLayer == null) {
                                    subLayer = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                    this._obj2Listener.put(objects[i], subLayer);
                                }
                                subLayer.put(generateNewID, origin.key());
                            }
                            subLayer = this._group2Listener.get(groupId);
                            if (subLayer == null) {
                                subLayer = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                this._group2Listener.put(groupId, subLayer);
                            }
                            subLayer.put(generateNewID, 2);
                        };
                        LocalEventListeners.prototype.unregister = function (groupId) {
                            var _this = this;
                            var groupLayer = this._group2Listener.get(groupId);
                            if (groupLayer != null) {
                                groupLayer.each(function (listenerID, value) {
                                    if (value == 1) {
                                        _this._simpleListener.remove(listenerID);
                                        var previousObject = _this._listener2Object.get(listenerID);
                                        _this._listener2Object.remove(listenerID);
                                        var _obj2ListenerLayer = _this._obj2Listener.get(previousObject);
                                        if (_obj2ListenerLayer != null) {
                                            _obj2ListenerLayer.remove(listenerID);
                                        }
                                    }
                                    else {
                                        _this._multiListener.remove(listenerID);
                                        var previousObjects = _this._listener2Objects.get(listenerID);
                                        for (var i = 0; i < previousObjects.length; i++) {
                                            var _obj2ListenerLayer = _this._obj2Listener.get(previousObjects[i]);
                                            if (_obj2ListenerLayer != null) {
                                                _obj2ListenerLayer.remove(listenerID);
                                            }
                                        }
                                        _this._listener2Objects.remove(listenerID);
                                    }
                                });
                                this._group2Listener.remove(groupId);
                            }
                        };
                        LocalEventListeners.prototype.clear = function () {
                            this._simpleListener.clear();
                            this._multiListener.clear();
                            this._obj2Listener.clear();
                            this._group2Listener.clear();
                            this._listener2Object.clear();
                            this._listener2Objects.clear();
                        };
                        LocalEventListeners.prototype.setManager = function (manager) {
                            this._manager = manager;
                        };
                        LocalEventListeners.prototype.dispatch = function (param) {
                            var _this = this;
                            if (this._manager != null) {
                                var _cacheUniverse = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                if (param instanceof org.kevoree.modeling.api.msg.KEvents) {
                                    var messages = param;
                                    var toLoad = new Array();
                                    var multiCounters = new Array();
                                    for (var i = 0; i < messages.size(); i++) {
                                        var loopKey = messages.getKey(i);
                                        var listeners = this._obj2Listener.get(loopKey.obj());
                                        var isSelect = [false];
                                        if (listeners != null) {
                                            listeners.each(function (listenerKey, universeKey) {
                                                if (universeKey == loopKey.universe()) {
                                                    isSelect[0] = true;
                                                    if (_this._multiListener.containsKey(listenerKey)) {
                                                        if (multiCounters[0] == null) {
                                                            multiCounters[0] = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                                        }
                                                        var previous = 0;
                                                        if (multiCounters[0].containsKey(listenerKey)) {
                                                            previous = multiCounters[0].get(listenerKey);
                                                        }
                                                        previous++;
                                                        multiCounters[0].put(listenerKey, previous);
                                                    }
                                                }
                                            });
                                        }
                                        if (isSelect[0]) {
                                            toLoad[i] = loopKey;
                                        }
                                    }
                                    this._manager.bumpKeysToCache(toLoad, function (kCacheObjects) {
                                        var multiObjectSets = new Array();
                                        var multiObjectIndexes = new Array();
                                        if (multiCounters[0] != null) {
                                            multiObjectSets[0] = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                            multiObjectIndexes[0] = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                            multiCounters[0].each(function (listenerKey, value) {
                                                multiObjectSets[0].put(listenerKey, new Array());
                                                multiObjectIndexes[0].put(listenerKey, 0);
                                            });
                                        }
                                        var listeners;
                                        for (var i = 0; i < messages.size(); i++) {
                                            if (kCacheObjects[i] != null && kCacheObjects[i] instanceof org.kevoree.modeling.api.data.cache.KCacheEntry) {
                                                var correspondingKey = toLoad[i];
                                                listeners = _this._obj2Listener.get(correspondingKey.obj());
                                                if (listeners != null) {
                                                    var cachedUniverse = _cacheUniverse.get(correspondingKey.universe());
                                                    if (cachedUniverse == null) {
                                                        cachedUniverse = _this._manager.model().universe(correspondingKey.universe());
                                                        _cacheUniverse.put(correspondingKey.universe(), cachedUniverse);
                                                    }
                                                    var toDispatch = cachedUniverse.time(correspondingKey.time()).createProxy(kCacheObjects[i].metaClass, correspondingKey.obj());
                                                    if (toDispatch != null) {
                                                        kCacheObjects[i].inc();
                                                    }
                                                    var meta = new Array();
                                                    for (var j = 0; j < messages.getIndexes(i).length; j++) {
                                                        if (messages.getIndexes(i)[j] >= org.kevoree.modeling.api.data.manager.Index.RESERVED_INDEXES) {
                                                            meta[j] = toDispatch.metaClass().meta(messages.getIndexes(i)[j]);
                                                        }
                                                    }
                                                    listeners.each(function (listenerKey, value) {
                                                        var listener = _this._simpleListener.get(listenerKey);
                                                        if (listener != null) {
                                                            listener(toDispatch, meta);
                                                        }
                                                        else {
                                                            var multiListener = _this._multiListener.get(listenerKey);
                                                            if (multiListener != null) {
                                                                if (multiObjectSets[0] != null && multiObjectIndexes[0] != null) {
                                                                    var index = multiObjectIndexes[0].get(listenerKey);
                                                                    multiObjectSets[0].get(listenerKey)[index] = toDispatch;
                                                                    index = index + 1;
                                                                    multiObjectIndexes[0].put(listenerKey, index);
                                                                }
                                                            }
                                                        }
                                                    });
                                                }
                                            }
                                        }
                                        if (multiObjectSets[0] != null) {
                                            multiObjectSets[0].each(function (key, value) {
                                                var multiListener = _this._multiListener.get(key);
                                                if (multiListener != null) {
                                                    multiListener(value);
                                                }
                                            });
                                        }
                                    });
                                }
                            }
                        };
                        return LocalEventListeners;
                    })();
                    event.LocalEventListeners = LocalEventListeners;
                })(event = api.event || (api.event = {}));
                var extrapolation;
                (function (extrapolation) {
                    var DiscreteExtrapolation = (function () {
                        function DiscreteExtrapolation() {
                        }
                        DiscreteExtrapolation.instance = function () {
                            if (DiscreteExtrapolation.INSTANCE == null) {
                                DiscreteExtrapolation.INSTANCE = new org.kevoree.modeling.api.extrapolation.DiscreteExtrapolation();
                            }
                            return DiscreteExtrapolation.INSTANCE;
                        };
                        DiscreteExtrapolation.prototype.extrapolate = function (current, attribute) {
                            var payload = current.view().universe().model().manager().entry(current, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                            if (payload != null) {
                                return payload.get(attribute.index());
                            }
                            else {
                                return null;
                            }
                        };
                        DiscreteExtrapolation.prototype.mutate = function (current, attribute, payload) {
                            var internalPayload = current.view().universe().model().manager().entry(current, org.kevoree.modeling.api.data.manager.AccessMode.WRITE);
                            if (internalPayload != null) {
                                internalPayload.set(attribute.index(), payload);
                            }
                        };
                        DiscreteExtrapolation.prototype.save = function (cache, attribute) {
                            if (cache != null) {
                                return attribute.attributeType().save(cache);
                            }
                            else {
                                return null;
                            }
                        };
                        DiscreteExtrapolation.prototype.load = function (payload, attribute, now) {
                            if (payload != null) {
                                return attribute.attributeType().load(payload);
                            }
                            return null;
                        };
                        return DiscreteExtrapolation;
                    })();
                    extrapolation.DiscreteExtrapolation = DiscreteExtrapolation;
                    var PolynomialExtrapolation = (function () {
                        function PolynomialExtrapolation() {
                        }
                        PolynomialExtrapolation.prototype.extrapolate = function (current, attribute) {
                            var pol = current.view().universe().model().manager().entry(current, org.kevoree.modeling.api.data.manager.AccessMode.READ).get(attribute.index());
                            if (pol != null) {
                                var extrapolatedValue = pol.extrapolate(current.now());
                                if (attribute.attributeType() == org.kevoree.modeling.api.meta.PrimitiveTypes.DOUBLE) {
                                    return extrapolatedValue;
                                }
                                else {
                                    if (attribute.attributeType() == org.kevoree.modeling.api.meta.PrimitiveTypes.LONG) {
                                        return extrapolatedValue.longValue();
                                    }
                                    else {
                                        if (attribute.attributeType() == org.kevoree.modeling.api.meta.PrimitiveTypes.FLOAT) {
                                            return extrapolatedValue.floatValue();
                                        }
                                        else {
                                            if (attribute.attributeType() == org.kevoree.modeling.api.meta.PrimitiveTypes.INT) {
                                                return extrapolatedValue.intValue();
                                            }
                                            else {
                                                if (attribute.attributeType() == org.kevoree.modeling.api.meta.PrimitiveTypes.SHORT) {
                                                    return extrapolatedValue.shortValue();
                                                }
                                                else {
                                                    return null;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            else {
                                return null;
                            }
                        };
                        PolynomialExtrapolation.prototype.mutate = function (current, attribute, payload) {
                            var raw = current.view().universe().model().manager().entry(current, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                            var previous = raw.get(attribute.index());
                            if (previous == null) {
                                var pol = this.createPolynomialModel(current.now(), attribute.precision());
                                pol.insert(current.now(), java.lang.Double.parseDouble(payload.toString()));
                                current.view().universe().model().manager().entry(current, org.kevoree.modeling.api.data.manager.AccessMode.WRITE).set(attribute.index(), pol);
                            }
                            else {
                                var previousPol = previous;
                                if (!previousPol.insert(current.now(), java.lang.Double.parseDouble(payload.toString()))) {
                                    var pol = this.createPolynomialModel(previousPol.lastIndex(), attribute.precision());
                                    pol.insert(previousPol.lastIndex(), previousPol.extrapolate(previousPol.lastIndex()));
                                    pol.insert(current.now(), java.lang.Double.parseDouble(payload.toString()));
                                    current.view().universe().model().manager().entry(current, org.kevoree.modeling.api.data.manager.AccessMode.WRITE).set(attribute.index(), pol);
                                }
                                else {
                                    if (previousPol.isDirty()) {
                                        raw.set(attribute.index(), previousPol);
                                    }
                                }
                            }
                        };
                        PolynomialExtrapolation.prototype.save = function (cache, attribute) {
                            try {
                                return cache.save();
                            }
                            catch ($ex$) {
                                if ($ex$ instanceof java.lang.Exception) {
                                    var e = $ex$;
                                    e.printStackTrace();
                                    return null;
                                }
                            }
                        };
                        PolynomialExtrapolation.prototype.load = function (payload, attribute, now) {
                            var pol = this.createPolynomialModel(now, attribute.precision());
                            pol.load(payload);
                            return pol;
                        };
                        PolynomialExtrapolation.instance = function () {
                            if (PolynomialExtrapolation.INSTANCE == null) {
                                PolynomialExtrapolation.INSTANCE = new org.kevoree.modeling.api.extrapolation.PolynomialExtrapolation();
                            }
                            return PolynomialExtrapolation.INSTANCE;
                        };
                        PolynomialExtrapolation.prototype.createPolynomialModel = function (origin, precision) {
                            return new org.kevoree.modeling.api.polynomial.doublepolynomial.DoublePolynomialModel(origin, precision, 20, org.kevoree.modeling.api.polynomial.util.Prioritization.LOWDEGREES);
                        };
                        return PolynomialExtrapolation;
                    })();
                    extrapolation.PolynomialExtrapolation = PolynomialExtrapolation;
                })(extrapolation = api.extrapolation || (api.extrapolation = {}));
                var infer;
                (function (infer) {
                    var AnalyticKInfer = (function (_super) {
                        __extends(AnalyticKInfer, _super);
                        function AnalyticKInfer(p_view, p_uuid, p_universeTree) {
                            _super.call(this, p_view, p_uuid, p_universeTree, null);
                        }
                        AnalyticKInfer.prototype.train = function (trainingSet, expectedResultSet, callback) {
                            var currentState = this.modifyState();
                            for (var i = 0; i < expectedResultSet.length; i++) {
                                var value = java.lang.Double.parseDouble(expectedResultSet[i].toString());
                                currentState.train(value);
                            }
                        };
                        AnalyticKInfer.prototype.infer = function (features) {
                            var currentState = this.readOnlyState();
                            return currentState.getAverage();
                        };
                        AnalyticKInfer.prototype.accuracy = function (testSet, expectedResultSet) {
                            return null;
                        };
                        AnalyticKInfer.prototype.clear = function () {
                            var currentState = this.modifyState();
                            currentState.clear();
                        };
                        AnalyticKInfer.prototype.createEmptyState = function () {
                            return new org.kevoree.modeling.api.infer.states.AnalyticKInferState();
                        };
                        return AnalyticKInfer;
                    })(org.kevoree.modeling.api.abs.AbstractKObjectInfer);
                    infer.AnalyticKInfer = AnalyticKInfer;
                    var GaussianClassificationKInfer = (function (_super) {
                        __extends(GaussianClassificationKInfer, _super);
                        function GaussianClassificationKInfer(p_view, p_uuid, p_universeTree, p_metaClass) {
                            _super.call(this, p_view, p_uuid, p_universeTree, p_metaClass);
                            this.alpha = 0.05;
                        }
                        GaussianClassificationKInfer.prototype.getAlpha = function () {
                            return this.alpha;
                        };
                        GaussianClassificationKInfer.prototype.setAlpha = function (alpha) {
                            this.alpha = alpha;
                        };
                        GaussianClassificationKInfer.prototype.train = function (trainingSet, expectedResultSet, callback) {
                            var currentState = this.modifyState();
                            var featuresize = trainingSet[0].length;
                            var features = new Array();
                            var results = new Array();
                            for (var i = 0; i < trainingSet.length; i++) {
                                features[i] = new Array();
                                for (var j = 0; j < featuresize; j++) {
                                    features[i][j] = trainingSet[i][j];
                                }
                                results[i] = expectedResultSet[i];
                                currentState.train(features[i], results[i], this.alpha);
                            }
                        };
                        GaussianClassificationKInfer.prototype.infer = function (features) {
                            var currentState = this.readOnlyState();
                            var ft = new Array();
                            for (var i = 0; i < features.length; i++) {
                                ft[i] = features[i];
                            }
                            return currentState.infer(ft);
                        };
                        GaussianClassificationKInfer.prototype.accuracy = function (testSet, expectedResultSet) {
                            return null;
                        };
                        GaussianClassificationKInfer.prototype.clear = function () {
                        };
                        GaussianClassificationKInfer.prototype.createEmptyState = function () {
                            return null;
                        };
                        return GaussianClassificationKInfer;
                    })(org.kevoree.modeling.api.abs.AbstractKObjectInfer);
                    infer.GaussianClassificationKInfer = GaussianClassificationKInfer;
                    var LinearRegressionKInfer = (function (_super) {
                        __extends(LinearRegressionKInfer, _super);
                        function LinearRegressionKInfer(p_view, p_uuid, p_universeTree, p_metaClass) {
                            _super.call(this, p_view, p_uuid, p_universeTree, p_metaClass);
                            this.alpha = 0.0001;
                            this.iterations = 100;
                        }
                        LinearRegressionKInfer.prototype.getAlpha = function () {
                            return this.alpha;
                        };
                        LinearRegressionKInfer.prototype.setAlpha = function (alpha) {
                            this.alpha = alpha;
                        };
                        LinearRegressionKInfer.prototype.getIterations = function () {
                            return this.iterations;
                        };
                        LinearRegressionKInfer.prototype.setIterations = function (iterations) {
                            this.iterations = iterations;
                        };
                        LinearRegressionKInfer.prototype.calculate = function (weights, features) {
                            var result = 0;
                            for (var i = 0; i < features.length; i++) {
                                result += weights[i] * features[i];
                            }
                            result += weights[features.length];
                            return result;
                        };
                        LinearRegressionKInfer.prototype.train = function (trainingSet, expectedResultSet, callback) {
                            var currentState = this.modifyState();
                            var weights = currentState.getWeights();
                            var featuresize = trainingSet[0].length;
                            if (weights == null) {
                                weights = new Array();
                            }
                            var features = new Array();
                            var results = new Array();
                            for (var i = 0; i < trainingSet.length; i++) {
                                features[i] = new Array();
                                for (var j = 0; j < featuresize; j++) {
                                    features[i][j] = trainingSet[i][j];
                                }
                                results[i] = expectedResultSet[i];
                            }
                            for (var j = 0; j < this.iterations; j++) {
                                for (var i = 0; i < trainingSet.length; i++) {
                                    var h = this.calculate(weights, features[i]);
                                    var err = -this.alpha * (h - results[i]);
                                    for (var k = 0; k < featuresize; k++) {
                                        weights[k] = weights[k] + err * features[i][k];
                                    }
                                    weights[featuresize] = weights[featuresize] + err;
                                }
                            }
                            currentState.setWeights(weights);
                        };
                        LinearRegressionKInfer.prototype.infer = function (features) {
                            var currentState = this.readOnlyState();
                            var weights = currentState.getWeights();
                            var ft = new Array();
                            for (var i = 0; i < features.length; i++) {
                                ft[i] = features[i];
                            }
                            return this.calculate(weights, ft);
                        };
                        LinearRegressionKInfer.prototype.accuracy = function (testSet, expectedResultSet) {
                            return null;
                        };
                        LinearRegressionKInfer.prototype.clear = function () {
                            var currentState = this.modifyState();
                            currentState.setWeights(null);
                        };
                        LinearRegressionKInfer.prototype.createEmptyState = function () {
                            return new org.kevoree.modeling.api.infer.states.DoubleArrayKInferState();
                        };
                        return LinearRegressionKInfer;
                    })(org.kevoree.modeling.api.abs.AbstractKObjectInfer);
                    infer.LinearRegressionKInfer = LinearRegressionKInfer;
                    var PerceptronClassificationKInfer = (function (_super) {
                        __extends(PerceptronClassificationKInfer, _super);
                        function PerceptronClassificationKInfer(p_view, p_uuid, p_universeTree, p_metaClass) {
                            _super.call(this, p_view, p_uuid, p_universeTree, p_metaClass);
                            this.alpha = 0.001;
                            this.iterations = 100;
                        }
                        PerceptronClassificationKInfer.prototype.getAlpha = function () {
                            return this.alpha;
                        };
                        PerceptronClassificationKInfer.prototype.setAlpha = function (alpha) {
                            this.alpha = alpha;
                        };
                        PerceptronClassificationKInfer.prototype.getIterations = function () {
                            return this.iterations;
                        };
                        PerceptronClassificationKInfer.prototype.setIterations = function (iterations) {
                            this.iterations = iterations;
                        };
                        PerceptronClassificationKInfer.prototype.calculate = function (weights, features) {
                            var res = 0;
                            for (var i = 0; i < features.length; i++) {
                                res = res + weights[i] * (features[i]);
                            }
                            res = res + weights[features.length];
                            if (res >= 0) {
                                return 1;
                            }
                            else {
                                return 0;
                            }
                        };
                        PerceptronClassificationKInfer.prototype.train = function (trainingSet, expectedResultSet, callback) {
                            var currentState = this.modifyState();
                            var weights = currentState.getWeights();
                            var featuresize = trainingSet[0].length;
                            if (weights == null) {
                                weights = new Array();
                            }
                            var features = new Array();
                            var results = new Array();
                            for (var i = 0; i < trainingSet.length; i++) {
                                features[i] = new Array();
                                for (var j = 0; j < featuresize; j++) {
                                    features[i][j] = trainingSet[i][j];
                                }
                                results[i] = expectedResultSet[i];
                                if (results[i] == 0) {
                                    results[i] = -1;
                                }
                            }
                            for (var j = 0; j < this.iterations; j++) {
                                for (var i = 0; i < trainingSet.length; i++) {
                                    var h = this.calculate(weights, features[i]);
                                    if (h == 0) {
                                        h = -1;
                                    }
                                    if (h * results[i] <= 0) {
                                        for (var k = 0; k < featuresize; k++) {
                                            weights[k] = weights[k] + this.alpha * (results[i] * features[i][k]);
                                        }
                                        weights[featuresize] = weights[featuresize] + this.alpha * (results[i]);
                                    }
                                }
                            }
                            currentState.setWeights(weights);
                        };
                        PerceptronClassificationKInfer.prototype.infer = function (features) {
                            var currentState = this.readOnlyState();
                            var weights = currentState.getWeights();
                            var ft = new Array();
                            for (var i = 0; i < features.length; i++) {
                                ft[i] = features[i];
                            }
                            return this.calculate(weights, ft);
                        };
                        PerceptronClassificationKInfer.prototype.accuracy = function (testSet, expectedResultSet) {
                            return null;
                        };
                        PerceptronClassificationKInfer.prototype.clear = function () {
                            var currentState = this.modifyState();
                            currentState.setWeights(null);
                        };
                        PerceptronClassificationKInfer.prototype.createEmptyState = function () {
                            return new org.kevoree.modeling.api.infer.states.DoubleArrayKInferState();
                        };
                        return PerceptronClassificationKInfer;
                    })(org.kevoree.modeling.api.abs.AbstractKObjectInfer);
                    infer.PerceptronClassificationKInfer = PerceptronClassificationKInfer;
                    var PolynomialOfflineKInfer = (function (_super) {
                        __extends(PolynomialOfflineKInfer, _super);
                        function PolynomialOfflineKInfer(p_view, p_uuid, p_universeTree, p_metaClass) {
                            _super.call(this, p_view, p_uuid, p_universeTree, p_metaClass);
                            this.maxDegree = 20;
                            this.toleratedErr = 0.01;
                        }
                        PolynomialOfflineKInfer.prototype.getToleratedErr = function () {
                            return this.toleratedErr;
                        };
                        PolynomialOfflineKInfer.prototype.setToleratedErr = function (toleratedErr) {
                            this.toleratedErr = toleratedErr;
                        };
                        PolynomialOfflineKInfer.prototype.getMaxDegree = function () {
                            return this.maxDegree;
                        };
                        PolynomialOfflineKInfer.prototype.setMaxDegree = function (maxDegree) {
                            this.maxDegree = maxDegree;
                        };
                        PolynomialOfflineKInfer.prototype.calculateLong = function (time, weights, timeOrigin, unit) {
                            var t = (time - timeOrigin) / unit;
                            return this.calculate(weights, t);
                        };
                        PolynomialOfflineKInfer.prototype.calculate = function (weights, t) {
                            var result = 0;
                            var power = 1;
                            for (var j = 0; j < weights.length; j++) {
                                result += weights[j] * power;
                                power = power * t;
                            }
                            return result;
                        };
                        PolynomialOfflineKInfer.prototype.train = function (trainingSet, expectedResultSet, callback) {
                            var currentState = this.modifyState();
                            var weights;
                            var featuresize = trainingSet[0].length;
                            var times = new Array();
                            var results = new Array();
                            for (var i = 0; i < trainingSet.length; i++) {
                                times[i] = trainingSet[i][0];
                                results[i] = expectedResultSet[i];
                            }
                            if (times.length == 0) {
                                return;
                            }
                            if (times.length == 1) {
                                weights = new Array();
                                weights[0] = results[0];
                                currentState.setWeights(weights);
                                return;
                            }
                            var maxcurdeg = Math.min(times.length, this.maxDegree);
                            var timeOrigin = times[0];
                            var unit = times[1] - times[0];
                            var normalizedTimes = new Array();
                            for (var i = 0; i < times.length; i++) {
                                normalizedTimes[i] = (times[i] - times[0]) / unit;
                            }
                            for (var deg = 0; deg < maxcurdeg; deg++) {
                                var pf = new org.kevoree.modeling.api.polynomial.util.PolynomialFitEjml(deg);
                                pf.fit(normalizedTimes, results);
                                if (org.kevoree.modeling.api.infer.states.PolynomialKInferState.maxError(pf.getCoef(), normalizedTimes, results) <= this.toleratedErr) {
                                    currentState.setUnit(unit);
                                    currentState.setTimeOrigin(timeOrigin);
                                    currentState.setWeights(pf.getCoef());
                                    return;
                                }
                            }
                        };
                        PolynomialOfflineKInfer.prototype.infer = function (features) {
                            var currentState = this.readOnlyState();
                            var time = features[0];
                            return currentState.infer(time);
                        };
                        PolynomialOfflineKInfer.prototype.accuracy = function (testSet, expectedResultSet) {
                            return null;
                        };
                        PolynomialOfflineKInfer.prototype.clear = function () {
                            var currentState = this.modifyState();
                            currentState.setWeights(null);
                        };
                        PolynomialOfflineKInfer.prototype.createEmptyState = function () {
                            return new org.kevoree.modeling.api.infer.states.DoubleArrayKInferState();
                        };
                        return PolynomialOfflineKInfer;
                    })(org.kevoree.modeling.api.abs.AbstractKObjectInfer);
                    infer.PolynomialOfflineKInfer = PolynomialOfflineKInfer;
                    var PolynomialOnlineKInfer = (function (_super) {
                        __extends(PolynomialOnlineKInfer, _super);
                        function PolynomialOnlineKInfer(p_view, p_uuid, p_universeTree, p_metaClass) {
                            _super.call(this, p_view, p_uuid, p_universeTree, p_metaClass);
                            this.maxDegree = 20;
                            this.toleratedErr = 0.01;
                        }
                        PolynomialOnlineKInfer.prototype.getToleratedErr = function () {
                            return this.toleratedErr;
                        };
                        PolynomialOnlineKInfer.prototype.setToleratedErr = function (toleratedErr) {
                            this.toleratedErr = toleratedErr;
                        };
                        PolynomialOnlineKInfer.prototype.getMaxDegree = function () {
                            return this.maxDegree;
                        };
                        PolynomialOnlineKInfer.prototype.setMaxDegree = function (maxDegree) {
                            this.maxDegree = maxDegree;
                        };
                        PolynomialOnlineKInfer.prototype.calculateLong = function (time, weights, timeOrigin, unit) {
                            var t = (time - timeOrigin) / unit;
                            return this.calculate(weights, t);
                        };
                        PolynomialOnlineKInfer.prototype.calculate = function (weights, t) {
                            var result = 0;
                            var power = 1;
                            for (var j = 0; j < weights.length; j++) {
                                result += weights[j] * power;
                                power = power * t;
                            }
                            return result;
                        };
                        PolynomialOnlineKInfer.prototype.train = function (trainingSet, expectedResultSet, callback) {
                            var currentState = this.modifyState();
                            var weights;
                            var featuresize = trainingSet[0].length;
                            var times = new Array();
                            var results = new Array();
                            for (var i = 0; i < trainingSet.length; i++) {
                                times[i] = trainingSet[i][0];
                                results[i] = expectedResultSet[i];
                            }
                            if (times.length == 0) {
                                return;
                            }
                            if (times.length == 1) {
                                weights = new Array();
                                weights[0] = results[0];
                                currentState.setWeights(weights);
                                return;
                            }
                            var maxcurdeg = Math.min(times.length, this.maxDegree);
                            var timeOrigin = times[0];
                            var unit = times[1] - times[0];
                            var normalizedTimes = new Array();
                            for (var i = 0; i < times.length; i++) {
                                normalizedTimes[i] = (times[i] - times[0]) / unit;
                            }
                            for (var deg = 0; deg < maxcurdeg; deg++) {
                                var pf = new org.kevoree.modeling.api.polynomial.util.PolynomialFitEjml(deg);
                                pf.fit(normalizedTimes, results);
                                if (org.kevoree.modeling.api.infer.states.PolynomialKInferState.maxError(pf.getCoef(), normalizedTimes, results) <= this.toleratedErr) {
                                    currentState.setUnit(unit);
                                    currentState.setTimeOrigin(timeOrigin);
                                    currentState.setWeights(pf.getCoef());
                                    return;
                                }
                            }
                        };
                        PolynomialOnlineKInfer.prototype.infer = function (features) {
                            var currentState = this.readOnlyState();
                            var time = features[0];
                            return currentState.infer(time);
                        };
                        PolynomialOnlineKInfer.prototype.accuracy = function (testSet, expectedResultSet) {
                            return null;
                        };
                        PolynomialOnlineKInfer.prototype.clear = function () {
                            var currentState = this.modifyState();
                            currentState.setWeights(null);
                        };
                        PolynomialOnlineKInfer.prototype.createEmptyState = function () {
                            return new org.kevoree.modeling.api.infer.states.DoubleArrayKInferState();
                        };
                        return PolynomialOnlineKInfer;
                    })(org.kevoree.modeling.api.abs.AbstractKObjectInfer);
                    infer.PolynomialOnlineKInfer = PolynomialOnlineKInfer;
                    var WinnowClassificationKInfer = (function (_super) {
                        __extends(WinnowClassificationKInfer, _super);
                        function WinnowClassificationKInfer(p_view, p_uuid, p_universeTree, p_metaClass) {
                            _super.call(this, p_view, p_uuid, p_universeTree, p_metaClass);
                            this.alpha = 2;
                            this.beta = 2;
                        }
                        WinnowClassificationKInfer.prototype.getAlpha = function () {
                            return this.alpha;
                        };
                        WinnowClassificationKInfer.prototype.setAlpha = function (alpha) {
                            this.alpha = alpha;
                        };
                        WinnowClassificationKInfer.prototype.getBeta = function () {
                            return this.beta;
                        };
                        WinnowClassificationKInfer.prototype.setBeta = function (beta) {
                            this.beta = beta;
                        };
                        WinnowClassificationKInfer.prototype.calculate = function (weights, features) {
                            var result = 0;
                            for (var i = 0; i < features.length; i++) {
                                result += weights[i] * features[i];
                            }
                            if (result >= features.length) {
                                return 1.0;
                            }
                            else {
                                return 0.0;
                            }
                        };
                        WinnowClassificationKInfer.prototype.train = function (trainingSet, expectedResultSet, callback) {
                            var currentState = this.modifyState();
                            var weights = currentState.getWeights();
                            var featuresize = trainingSet[0].length;
                            if (weights == null) {
                                weights = new Array();
                                for (var i = 0; i < weights.length; i++) {
                                    weights[i] = 2;
                                }
                            }
                            var features = new Array();
                            var results = new Array();
                            for (var i = 0; i < trainingSet.length; i++) {
                                features[i] = new Array();
                                for (var j = 0; j < featuresize; j++) {
                                    features[i][j] = trainingSet[i][j];
                                }
                                results[i] = expectedResultSet[i];
                            }
                            for (var i = 0; i < trainingSet.length; i++) {
                                if (this.calculate(weights, features[i]) == results[i]) {
                                    continue;
                                }
                                if (results[i] == 0) {
                                    for (var j = 0; j < features[i].length; j++) {
                                        if (features[i][j] != 0) {
                                            weights[j] = weights[j] / this.beta;
                                        }
                                    }
                                }
                                else {
                                    for (var j = 0; i < features[i].length; j++) {
                                        if (features[i][j] != 0) {
                                            weights[j] = weights[j] * this.alpha;
                                        }
                                    }
                                }
                            }
                            currentState.setWeights(weights);
                        };
                        WinnowClassificationKInfer.prototype.infer = function (features) {
                            var currentState = this.readOnlyState();
                            var weights = currentState.getWeights();
                            var ft = new Array();
                            for (var i = 0; i < features.length; i++) {
                                ft[i] = features[i];
                            }
                            return this.calculate(weights, ft);
                        };
                        WinnowClassificationKInfer.prototype.accuracy = function (testSet, expectedResultSet) {
                            return null;
                        };
                        WinnowClassificationKInfer.prototype.clear = function () {
                            var currentState = this.modifyState();
                            currentState.setWeights(null);
                        };
                        WinnowClassificationKInfer.prototype.createEmptyState = function () {
                            return new org.kevoree.modeling.api.infer.states.DoubleArrayKInferState();
                        };
                        return WinnowClassificationKInfer;
                    })(org.kevoree.modeling.api.abs.AbstractKObjectInfer);
                    infer.WinnowClassificationKInfer = WinnowClassificationKInfer;
                    var states;
                    (function (states) {
                        var AnalyticKInferState = (function (_super) {
                            __extends(AnalyticKInferState, _super);
                            function AnalyticKInferState() {
                                _super.apply(this, arguments);
                                this._isDirty = false;
                                this.sumSquares = 0;
                                this.sum = 0;
                                this.nb = 0;
                            }
                            AnalyticKInferState.prototype.getSumSquares = function () {
                                return this.sumSquares;
                            };
                            AnalyticKInferState.prototype.setSumSquares = function (sumSquares) {
                                this.sumSquares = sumSquares;
                            };
                            AnalyticKInferState.prototype.getMin = function () {
                                return this.min;
                            };
                            AnalyticKInferState.prototype.setMin = function (min) {
                                this._isDirty = true;
                                this.min = min;
                            };
                            AnalyticKInferState.prototype.getMax = function () {
                                return this.max;
                            };
                            AnalyticKInferState.prototype.setMax = function (max) {
                                this._isDirty = true;
                                this.max = max;
                            };
                            AnalyticKInferState.prototype.getNb = function () {
                                return this.nb;
                            };
                            AnalyticKInferState.prototype.setNb = function (nb) {
                                this._isDirty = true;
                                this.nb = nb;
                            };
                            AnalyticKInferState.prototype.getSum = function () {
                                return this.sum;
                            };
                            AnalyticKInferState.prototype.setSum = function (sum) {
                                this._isDirty = true;
                                this.sum = sum;
                            };
                            AnalyticKInferState.prototype.getAverage = function () {
                                if (this.nb != 0) {
                                    return this.sum / this.nb;
                                }
                                else {
                                    return null;
                                }
                            };
                            AnalyticKInferState.prototype.train = function (value) {
                                if (this.nb == 0) {
                                    this.max = value;
                                    this.min = value;
                                }
                                else {
                                    if (value < this.min) {
                                        this.min = value;
                                    }
                                    if (value > this.max) {
                                        this.max = value;
                                    }
                                }
                                this.sum += value;
                                this.sumSquares += value * value;
                                this.nb++;
                                this._isDirty = true;
                            };
                            AnalyticKInferState.prototype.getVariance = function () {
                                if (this.nb != 0) {
                                    var avg = this.sum / this.nb;
                                    var newvar = this.sumSquares / this.nb - avg * avg;
                                    return newvar;
                                }
                                else {
                                    return null;
                                }
                            };
                            AnalyticKInferState.prototype.clear = function () {
                                this.nb = 0;
                                this.sum = 0;
                                this.sumSquares = 0;
                                this._isDirty = true;
                            };
                            AnalyticKInferState.prototype.save = function () {
                                return this.sum + "/" + this.nb + "/" + this.min + "/" + this.max + "/" + this.sumSquares;
                            };
                            AnalyticKInferState.prototype.load = function (payload) {
                                try {
                                    var previousState = payload.split("/");
                                    this.sum = java.lang.Double.parseDouble(previousState[0]);
                                    this.nb = java.lang.Integer.parseInt(previousState[1]);
                                    this.min = java.lang.Double.parseDouble(previousState[2]);
                                    this.max = java.lang.Double.parseDouble(previousState[3]);
                                    this.sumSquares = java.lang.Double.parseDouble(previousState[4]);
                                }
                                catch ($ex$) {
                                    if ($ex$ instanceof java.lang.Exception) {
                                        var e = $ex$;
                                        this.sum = 0;
                                        this.nb = 0;
                                    }
                                }
                                this._isDirty = false;
                            };
                            AnalyticKInferState.prototype.isDirty = function () {
                                return this._isDirty;
                            };
                            AnalyticKInferState.prototype.cloneState = function () {
                                var cloned = new org.kevoree.modeling.api.infer.states.AnalyticKInferState();
                                cloned.setSumSquares(this.getSumSquares());
                                cloned.setNb(this.getNb());
                                cloned.setSum(this.getSum());
                                cloned.setMax(this.getMax());
                                cloned.setMin(this.getMin());
                                return cloned;
                            };
                            return AnalyticKInferState;
                        })(org.kevoree.modeling.api.KInferState);
                        states.AnalyticKInferState = AnalyticKInferState;
                        var BayesianClassificationState = (function (_super) {
                            __extends(BayesianClassificationState, _super);
                            function BayesianClassificationState() {
                                _super.apply(this, arguments);
                            }
                            BayesianClassificationState.prototype.initialize = function (metaFeatures, MetaClassification) {
                                this.numOfFeatures = metaFeatures.length;
                                this.numOfClasses = 0;
                                this.states = new Array(new Array());
                                this.classStats = new org.kevoree.modeling.api.infer.states.Bayesian.EnumSubstate();
                                this.classStats.initialize(this.numOfClasses);
                                for (var i = 0; i < this.numOfFeatures; i++) {
                                }
                            };
                            BayesianClassificationState.prototype.predict = function (features) {
                                var temp;
                                var prediction = -1;
                                var max = 0;
                                for (var i = 0; i < this.numOfClasses; i++) {
                                    temp = this.classStats.calculateProbability(i);
                                    for (var j = 0; j < this.numOfFeatures; j++) {
                                        temp = temp * this.states[i][j].calculateProbability(features[j]);
                                    }
                                    if (temp >= max) {
                                        max = temp;
                                        prediction = i;
                                    }
                                }
                                return prediction;
                            };
                            BayesianClassificationState.prototype.train = function (features, classNum) {
                                for (var i = 0; i < this.numOfFeatures; i++) {
                                    this.states[classNum][i].train(features[i]);
                                    this.states[this.numOfClasses][i].train(features[i]);
                                }
                                this.classStats.train(classNum);
                            };
                            BayesianClassificationState.prototype.save = function () {
                                var sb = new java.lang.StringBuilder();
                                sb.append(this.numOfClasses + BayesianClassificationState.interStateSep);
                                sb.append(this.numOfFeatures + BayesianClassificationState.interStateSep);
                                for (var i = 0; i < this.numOfClasses + 1; i++) {
                                    for (var j = 0; j < this.numOfFeatures; j++) {
                                        sb.append(this.states[i][j].save(BayesianClassificationState.stateSep));
                                        sb.append(BayesianClassificationState.interStateSep);
                                    }
                                }
                                sb.append(this.classStats.save(BayesianClassificationState.stateSep));
                                return sb.toString();
                            };
                            BayesianClassificationState.prototype.load = function (payload) {
                                var st = payload.split(BayesianClassificationState.interStateSep);
                                this.numOfClasses = java.lang.Integer.parseInt(st[0]);
                                this.numOfFeatures = java.lang.Integer.parseInt(st[1]);
                                this.states = new Array(new Array());
                                var counter = 2;
                                for (var i = 0; i < this.numOfClasses + 1; i++) {
                                    for (var j = 0; j < this.numOfFeatures; j++) {
                                        var s = st[counter].split(BayesianClassificationState.stateSep)[0];
                                        if (s.equals("EnumSubstate")) {
                                            this.states[i][j] = new org.kevoree.modeling.api.infer.states.Bayesian.EnumSubstate();
                                        }
                                        else {
                                            if (s.equals("GaussianSubState")) {
                                                this.states[i][j] = new org.kevoree.modeling.api.infer.states.Bayesian.GaussianSubState();
                                            }
                                        }
                                        s = st[counter].substring(s.length + 1);
                                        this.states[i][j].load(s, BayesianClassificationState.stateSep);
                                        counter++;
                                    }
                                }
                                var s = st[counter].split(BayesianClassificationState.stateSep)[0];
                                s = st[counter].substring(s.length + 1);
                                this.classStats = new org.kevoree.modeling.api.infer.states.Bayesian.EnumSubstate();
                                this.classStats.load(s, BayesianClassificationState.stateSep);
                            };
                            BayesianClassificationState.prototype.isDirty = function () {
                                return false;
                            };
                            BayesianClassificationState.prototype.cloneState = function () {
                                return null;
                            };
                            BayesianClassificationState.stateSep = "/";
                            BayesianClassificationState.interStateSep = "|";
                            return BayesianClassificationState;
                        })(org.kevoree.modeling.api.KInferState);
                        states.BayesianClassificationState = BayesianClassificationState;
                        var DoubleArrayKInferState = (function (_super) {
                            __extends(DoubleArrayKInferState, _super);
                            function DoubleArrayKInferState() {
                                _super.apply(this, arguments);
                                this._isDirty = false;
                            }
                            DoubleArrayKInferState.prototype.save = function () {
                                var s = "";
                                var sb = new java.lang.StringBuilder();
                                if (this.weights != null) {
                                    for (var i = 0; i < this.weights.length; i++) {
                                        sb.append(this.weights[i] + "/");
                                    }
                                    s = sb.toString();
                                }
                                return s;
                            };
                            DoubleArrayKInferState.prototype.load = function (payload) {
                                try {
                                    var previousState = payload.split("/");
                                    if (previousState.length > 0) {
                                        this.weights = new Array();
                                        for (var i = 0; i < previousState.length; i++) {
                                            this.weights[i] = java.lang.Double.parseDouble(previousState[i]);
                                        }
                                    }
                                }
                                catch ($ex$) {
                                    if ($ex$ instanceof java.lang.Exception) {
                                        var e = $ex$;
                                    }
                                }
                                this._isDirty = false;
                            };
                            DoubleArrayKInferState.prototype.isDirty = function () {
                                return this._isDirty;
                            };
                            DoubleArrayKInferState.prototype.set_isDirty = function (value) {
                                this._isDirty = value;
                            };
                            DoubleArrayKInferState.prototype.cloneState = function () {
                                var cloned = new org.kevoree.modeling.api.infer.states.DoubleArrayKInferState();
                                var clonearray = new Array();
                                for (var i = 0; i < this.weights.length; i++) {
                                    clonearray[i] = this.weights[i];
                                }
                                cloned.setWeights(clonearray);
                                return cloned;
                            };
                            DoubleArrayKInferState.prototype.getWeights = function () {
                                return this.weights;
                            };
                            DoubleArrayKInferState.prototype.setWeights = function (weights) {
                                this.weights = weights;
                                this._isDirty = true;
                            };
                            return DoubleArrayKInferState;
                        })(org.kevoree.modeling.api.KInferState);
                        states.DoubleArrayKInferState = DoubleArrayKInferState;
                        var GaussianArrayKInferState = (function (_super) {
                            __extends(GaussianArrayKInferState, _super);
                            function GaussianArrayKInferState() {
                                _super.apply(this, arguments);
                                this._isDirty = false;
                                this.sumSquares = null;
                                this.sum = null;
                                this.epsilon = 0;
                                this.nb = 0;
                            }
                            GaussianArrayKInferState.prototype.getSumSquares = function () {
                                return this.sumSquares;
                            };
                            GaussianArrayKInferState.prototype.setSumSquares = function (sumSquares) {
                                this.sumSquares = sumSquares;
                            };
                            GaussianArrayKInferState.prototype.getNb = function () {
                                return this.nb;
                            };
                            GaussianArrayKInferState.prototype.setNb = function (nb) {
                                this._isDirty = true;
                                this.nb = nb;
                            };
                            GaussianArrayKInferState.prototype.getSum = function () {
                                return this.sum;
                            };
                            GaussianArrayKInferState.prototype.setSum = function (sum) {
                                this._isDirty = true;
                                this.sum = sum;
                            };
                            GaussianArrayKInferState.prototype.calculateProbability = function (features) {
                                var size = this.sum.length;
                                var avg = new Array();
                                var variances = new Array();
                                var p = 1;
                                for (var i = 0; i < size; i++) {
                                    avg[i] = this.sum[i] / this.nb;
                                    variances[i] = this.sumSquares[i] / this.nb - avg[i] * avg[i];
                                    p = p * (1 / Math.sqrt(2 * Math.PI * variances[i])) * Math.exp(-((features[i] - avg[i]) * (features[i] - avg[i])) / (2 * variances[i]));
                                }
                                return p;
                            };
                            GaussianArrayKInferState.prototype.infer = function (features) {
                                return (this.calculateProbability(features) <= this.epsilon);
                            };
                            GaussianArrayKInferState.prototype.getAverage = function () {
                                if (this.nb != 0) {
                                    var size = this.sum.length;
                                    var avg = new Array();
                                    for (var i = 0; i < size; i++) {
                                        avg[i] = this.sum[i] / this.nb;
                                    }
                                    return avg;
                                }
                                else {
                                    return null;
                                }
                            };
                            GaussianArrayKInferState.prototype.train = function (features, result, alpha) {
                                var size = features.length;
                                if (this.nb == 0) {
                                    this.sumSquares = new Array();
                                    this.sum = new Array();
                                }
                                for (var i = 0; i < size; i++) {
                                    this.sum[i] += features[i];
                                    this.sumSquares[i] += features[i] * features[i];
                                }
                                this.nb++;
                                var proba = this.calculateProbability(features);
                                var diff = proba - this.epsilon;
                                if ((proba < this.epsilon && result == false) || (proba > this.epsilon && result == true)) {
                                    this.epsilon = this.epsilon + alpha * diff;
                                }
                                this._isDirty = true;
                            };
                            GaussianArrayKInferState.prototype.getVariance = function () {
                                if (this.nb != 0) {
                                    var size = this.sum.length;
                                    var avg = new Array();
                                    var newvar = new Array();
                                    for (var i = 0; i < size; i++) {
                                        avg[i] = this.sum[i] / this.nb;
                                        newvar[i] = this.sumSquares[i] / this.nb - avg[i] * avg[i];
                                    }
                                    return newvar;
                                }
                                else {
                                    return null;
                                }
                            };
                            GaussianArrayKInferState.prototype.clear = function () {
                                this.nb = 0;
                                this.sum = null;
                                this.sumSquares = null;
                                this._isDirty = true;
                            };
                            GaussianArrayKInferState.prototype.save = function () {
                                var sb = new java.lang.StringBuilder();
                                sb.append(this.nb + "/");
                                sb.append(this.epsilon + "/");
                                var size = this.sumSquares.length;
                                for (var i = 0; i < size; i++) {
                                    sb.append(this.sum[i] + "/");
                                }
                                for (var i = 0; i < size; i++) {
                                    sb.append(this.sumSquares[i] + "/");
                                }
                                return sb.toString();
                            };
                            GaussianArrayKInferState.prototype.load = function (payload) {
                                try {
                                    var previousState = payload.split("/");
                                    this.nb = java.lang.Integer.parseInt(previousState[0]);
                                    this.epsilon = java.lang.Double.parseDouble(previousState[1]);
                                    var size = (previousState.length - 2) / 2;
                                    this.sum = new Array();
                                    this.sumSquares = new Array();
                                    for (var i = 0; i < size; i++) {
                                        this.sum[i] = java.lang.Double.parseDouble(previousState[i + 2]);
                                    }
                                    for (var i = 0; i < size; i++) {
                                        this.sumSquares[i] = java.lang.Double.parseDouble(previousState[i + 2 + size]);
                                    }
                                }
                                catch ($ex$) {
                                    if ($ex$ instanceof java.lang.Exception) {
                                        var e = $ex$;
                                        this.sum = null;
                                        this.sumSquares = null;
                                        this.nb = 0;
                                    }
                                }
                                this._isDirty = false;
                            };
                            GaussianArrayKInferState.prototype.isDirty = function () {
                                return this._isDirty;
                            };
                            GaussianArrayKInferState.prototype.cloneState = function () {
                                var cloned = new org.kevoree.modeling.api.infer.states.GaussianArrayKInferState();
                                cloned.setNb(this.getNb());
                                if (this.nb != 0) {
                                    var newSum = new Array();
                                    var newSumSquares = new Array();
                                    for (var i = 0; i < this.sum.length; i++) {
                                        newSum[i] = this.sum[i];
                                        newSumSquares[i] = this.sumSquares[i];
                                    }
                                    cloned.setSum(newSum);
                                    cloned.setSumSquares(newSumSquares);
                                }
                                return cloned;
                            };
                            GaussianArrayKInferState.prototype.getEpsilon = function () {
                                return this.epsilon;
                            };
                            return GaussianArrayKInferState;
                        })(org.kevoree.modeling.api.KInferState);
                        states.GaussianArrayKInferState = GaussianArrayKInferState;
                        var PolynomialKInferState = (function (_super) {
                            __extends(PolynomialKInferState, _super);
                            function PolynomialKInferState() {
                                _super.apply(this, arguments);
                                this._isDirty = false;
                            }
                            PolynomialKInferState.prototype.getTimeOrigin = function () {
                                return this.timeOrigin;
                            };
                            PolynomialKInferState.prototype.setTimeOrigin = function (timeOrigin) {
                                this.timeOrigin = timeOrigin;
                            };
                            PolynomialKInferState.prototype.is_isDirty = function () {
                                return this._isDirty;
                            };
                            PolynomialKInferState.prototype.getUnit = function () {
                                return this.unit;
                            };
                            PolynomialKInferState.prototype.setUnit = function (unit) {
                                this.unit = unit;
                            };
                            PolynomialKInferState.maxError = function (coef, normalizedTimes, results) {
                                var maxErr = 0;
                                var temp = 0;
                                for (var i = 0; i < normalizedTimes.length; i++) {
                                    var val = org.kevoree.modeling.api.infer.states.PolynomialKInferState.internal_extrapolate(normalizedTimes[i], coef);
                                    temp = Math.abs(val - results[i]);
                                    if (temp > maxErr) {
                                        maxErr = temp;
                                    }
                                }
                                return maxErr;
                            };
                            PolynomialKInferState.internal_extrapolate = function (normalizedTime, coef) {
                                var result = 0;
                                var power = 1;
                                for (var j = 0; j < coef.length; j++) {
                                    result += coef[j] * power;
                                    power = power * normalizedTime;
                                }
                                return result;
                            };
                            PolynomialKInferState.prototype.save = function () {
                                var s = "";
                                var sb = new java.lang.StringBuilder();
                                sb.append(this.timeOrigin + "/");
                                sb.append(this.unit + "/");
                                if (this.weights != null) {
                                    for (var i = 0; i < this.weights.length; i++) {
                                        sb.append(this.weights[i] + "/");
                                    }
                                    s = sb.toString();
                                }
                                return s;
                            };
                            PolynomialKInferState.prototype.load = function (payload) {
                                try {
                                    var previousState = payload.split("/");
                                    if (previousState.length > 0) {
                                        this.timeOrigin = java.lang.Long.parseLong(previousState[0]);
                                        this.unit = java.lang.Long.parseLong(previousState[1]);
                                        var size = previousState.length - 2;
                                        this.weights = new Array();
                                        for (var i = 0; i < size; i++) {
                                            this.weights[i] = java.lang.Double.parseDouble(previousState[i - 2]);
                                        }
                                    }
                                }
                                catch ($ex$) {
                                    if ($ex$ instanceof java.lang.Exception) {
                                        var e = $ex$;
                                    }
                                }
                                this._isDirty = false;
                            };
                            PolynomialKInferState.prototype.isDirty = function () {
                                return this._isDirty;
                            };
                            PolynomialKInferState.prototype.set_isDirty = function (value) {
                                this._isDirty = value;
                            };
                            PolynomialKInferState.prototype.cloneState = function () {
                                var cloned = new org.kevoree.modeling.api.infer.states.PolynomialKInferState();
                                var clonearray = new Array();
                                for (var i = 0; i < this.weights.length; i++) {
                                    clonearray[i] = this.weights[i];
                                }
                                cloned.setWeights(clonearray);
                                cloned.setTimeOrigin(this.getTimeOrigin());
                                cloned.setUnit(this.getUnit());
                                return cloned;
                            };
                            PolynomialKInferState.prototype.getWeights = function () {
                                return this.weights;
                            };
                            PolynomialKInferState.prototype.setWeights = function (weights) {
                                this.weights = weights;
                                this._isDirty = true;
                            };
                            PolynomialKInferState.prototype.infer = function (time) {
                                var t = (time - this.timeOrigin) / this.unit;
                                return org.kevoree.modeling.api.infer.states.PolynomialKInferState.internal_extrapolate(t, this.weights);
                            };
                            return PolynomialKInferState;
                        })(org.kevoree.modeling.api.KInferState);
                        states.PolynomialKInferState = PolynomialKInferState;
                        var Bayesian;
                        (function (Bayesian) {
                            var BayesianSubstate = (function () {
                                function BayesianSubstate() {
                                }
                                BayesianSubstate.prototype.calculateProbability = function (feature) {
                                    throw "Abstract method";
                                };
                                BayesianSubstate.prototype.train = function (feature) {
                                    throw "Abstract method";
                                };
                                BayesianSubstate.prototype.save = function (separator) {
                                    throw "Abstract method";
                                };
                                BayesianSubstate.prototype.load = function (payload, separator) {
                                    throw "Abstract method";
                                };
                                BayesianSubstate.prototype.cloneState = function () {
                                    throw "Abstract method";
                                };
                                return BayesianSubstate;
                            })();
                            Bayesian.BayesianSubstate = BayesianSubstate;
                            var EnumSubstate = (function (_super) {
                                __extends(EnumSubstate, _super);
                                function EnumSubstate() {
                                    _super.apply(this, arguments);
                                    this.total = 0;
                                }
                                EnumSubstate.prototype.getCounter = function () {
                                    return this.counter;
                                };
                                EnumSubstate.prototype.setCounter = function (counter) {
                                    this.counter = counter;
                                };
                                EnumSubstate.prototype.getTotal = function () {
                                    return this.total;
                                };
                                EnumSubstate.prototype.setTotal = function (total) {
                                    this.total = total;
                                };
                                EnumSubstate.prototype.initialize = function (number) {
                                    this.counter = new Array();
                                };
                                EnumSubstate.prototype.calculateProbability = function (feature) {
                                    var res = feature;
                                    var p = this.counter[res];
                                    if (this.total != 0) {
                                        return p / this.total;
                                    }
                                    else {
                                        return 0;
                                    }
                                };
                                EnumSubstate.prototype.train = function (feature) {
                                    var res = feature;
                                    this.counter[res]++;
                                    this.total++;
                                };
                                EnumSubstate.prototype.save = function (separator) {
                                    if (this.counter == null || this.counter.length == 0) {
                                        return "EnumSubstate" + separator;
                                    }
                                    var sb = new java.lang.StringBuilder();
                                    sb.append("EnumSubstate" + separator);
                                    for (var i = 0; i < this.counter.length; i++) {
                                        sb.append(this.counter[i] + separator);
                                    }
                                    return sb.toString();
                                };
                                EnumSubstate.prototype.load = function (payload, separator) {
                                    var res = payload.split(separator);
                                    this.counter = new Array();
                                    this.total = 0;
                                    for (var i = 0; i < res.length; i++) {
                                        this.counter[i] = java.lang.Integer.parseInt(res[i]);
                                        this.total += this.counter[i];
                                    }
                                };
                                EnumSubstate.prototype.cloneState = function () {
                                    var cloned = new org.kevoree.modeling.api.infer.states.Bayesian.EnumSubstate();
                                    var newCounter = new Array();
                                    for (var i = 0; i < this.counter.length; i++) {
                                        newCounter[i] = this.counter[i];
                                    }
                                    cloned.setCounter(newCounter);
                                    cloned.setTotal(this.total);
                                    return cloned;
                                };
                                return EnumSubstate;
                            })(org.kevoree.modeling.api.infer.states.Bayesian.BayesianSubstate);
                            Bayesian.EnumSubstate = EnumSubstate;
                            var GaussianSubState = (function (_super) {
                                __extends(GaussianSubState, _super);
                                function GaussianSubState() {
                                    _super.apply(this, arguments);
                                    this.sumSquares = 0;
                                    this.sum = 0;
                                    this.nb = 0;
                                }
                                GaussianSubState.prototype.getSumSquares = function () {
                                    return this.sumSquares;
                                };
                                GaussianSubState.prototype.setSumSquares = function (sumSquares) {
                                    this.sumSquares = sumSquares;
                                };
                                GaussianSubState.prototype.getNb = function () {
                                    return this.nb;
                                };
                                GaussianSubState.prototype.setNb = function (nb) {
                                    this.nb = nb;
                                };
                                GaussianSubState.prototype.getSum = function () {
                                    return this.sum;
                                };
                                GaussianSubState.prototype.setSum = function (sum) {
                                    this.sum = sum;
                                };
                                GaussianSubState.prototype.calculateProbability = function (feature) {
                                    var fet = feature;
                                    var avg = this.sum / this.nb;
                                    var variances = this.sumSquares / this.nb - avg * avg;
                                    return (1 / Math.sqrt(2 * Math.PI * variances)) * Math.exp(-((fet - avg) * (fet - avg)) / (2 * variances));
                                };
                                GaussianSubState.prototype.getAverage = function () {
                                    if (this.nb != 0) {
                                        var avg = this.sum / this.nb;
                                        return avg;
                                    }
                                    else {
                                        return null;
                                    }
                                };
                                GaussianSubState.prototype.train = function (feature) {
                                    var fet = feature;
                                    this.sum += fet;
                                    this.sumSquares += fet * fet;
                                    this.nb++;
                                };
                                GaussianSubState.prototype.getVariance = function () {
                                    if (this.nb != 0) {
                                        var avg = this.sum / this.nb;
                                        var newvar = this.sumSquares / this.nb - avg * avg;
                                        return newvar;
                                    }
                                    else {
                                        return null;
                                    }
                                };
                                GaussianSubState.prototype.clear = function () {
                                    this.nb = 0;
                                    this.sum = 0;
                                    this.sumSquares = 0;
                                };
                                GaussianSubState.prototype.save = function (separator) {
                                    var sb = new java.lang.StringBuilder();
                                    sb.append("GaussianSubState" + separator);
                                    sb.append(this.nb + separator);
                                    sb.append(this.sum + separator);
                                    sb.append(this.sumSquares);
                                    return sb.toString();
                                };
                                GaussianSubState.prototype.load = function (payload, separator) {
                                    try {
                                        var previousState = payload.split(separator);
                                        this.nb = java.lang.Integer.parseInt(previousState[0]);
                                        this.sum = java.lang.Double.parseDouble(previousState[1]);
                                        this.sumSquares = java.lang.Double.parseDouble(previousState[2]);
                                    }
                                    catch ($ex$) {
                                        if ($ex$ instanceof java.lang.Exception) {
                                            var e = $ex$;
                                            this.sum = 0;
                                            this.sumSquares = 0;
                                            this.nb = 0;
                                        }
                                    }
                                };
                                GaussianSubState.prototype.cloneState = function () {
                                    var cloned = new org.kevoree.modeling.api.infer.states.Bayesian.GaussianSubState();
                                    cloned.setNb(this.getNb());
                                    cloned.setSum(this.getSum());
                                    cloned.setSumSquares(this.getSumSquares());
                                    return cloned;
                                };
                                return GaussianSubState;
                            })(org.kevoree.modeling.api.infer.states.Bayesian.BayesianSubstate);
                            Bayesian.GaussianSubState = GaussianSubState;
                        })(Bayesian = states.Bayesian || (states.Bayesian = {}));
                    })(states = infer.states || (infer.states = {}));
                })(infer = api.infer || (api.infer = {}));
                var json;
                (function (json) {
                    var JsonFormat = (function () {
                        function JsonFormat(p_view) {
                            this._view = p_view;
                        }
                        JsonFormat.prototype.save = function (model) {
                            if (org.kevoree.modeling.api.util.Checker.isDefined(model)) {
                                var wrapper = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                                org.kevoree.modeling.api.json.JsonModelSerializer.serialize(model, wrapper.initCallback());
                                return wrapper;
                            }
                            else {
                                throw new java.lang.RuntimeException(JsonFormat.NULL_PARAM_MSG);
                            }
                        };
                        JsonFormat.prototype.saveRoot = function () {
                            var wrapper = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            this._view.universe().model().manager().getRoot(this._view, function (root) {
                                if (root == null) {
                                    wrapper.initCallback()(null);
                                }
                                else {
                                    org.kevoree.modeling.api.json.JsonModelSerializer.serialize(root, wrapper.initCallback());
                                }
                            });
                            return wrapper;
                        };
                        JsonFormat.prototype.load = function (payload) {
                            if (org.kevoree.modeling.api.util.Checker.isDefined(payload)) {
                                var wrapper = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                                org.kevoree.modeling.api.json.JsonModelLoader.load(this._view, payload, wrapper.initCallback());
                                return wrapper;
                            }
                            else {
                                throw new java.lang.RuntimeException(JsonFormat.NULL_PARAM_MSG);
                            }
                        };
                        JsonFormat.KEY_META = "@meta";
                        JsonFormat.KEY_UUID = "@uuid";
                        JsonFormat.KEY_ROOT = "@root";
                        JsonFormat.PARENT_META = "@parent";
                        JsonFormat.PARENT_REF_META = "@ref";
                        JsonFormat.INBOUNDS_META = "@inbounds";
                        JsonFormat.NULL_PARAM_MSG = "one parameter is null";
                        return JsonFormat;
                    })();
                    json.JsonFormat = JsonFormat;
                    var JsonModelLoader = (function () {
                        function JsonModelLoader() {
                        }
                        JsonModelLoader.load = function (factory, payload, callback) {
                            if (payload == null) {
                                callback(null);
                            }
                            else {
                                var metaModel = factory.universe().model().metaModel();
                                var toLoadObj = JSON.parse(payload);
                                var rootElem = [];
                                var mappedKeys = new org.kevoree.modeling.api.map.LongLongHashMap(toLoadObj.length, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                for (var i = 0; i < toLoadObj.length; i++) {
                                    var elem = toLoadObj[i];
                                    var kid = elem[org.kevoree.modeling.api.json.JsonFormat.KEY_UUID];
                                    mappedKeys.put(kid, factory.universe().model().manager().nextObjectKey());
                                }
                                for (var i = 0; i < toLoadObj.length; i++) {
                                    var elemRaw = toLoadObj[i];
                                    var elem2 = new org.kevoree.modeling.api.map.StringHashMap(Object.keys(elemRaw).length, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                    for (var ik in elemRaw) {
                                        elem2[ik] = elemRaw[ik];
                                    }
                                    try {
                                        org.kevoree.modeling.api.json.JsonModelLoader.loadObj(elem2, metaModel, factory, mappedKeys, rootElem);
                                    }
                                    catch (e) {
                                        console.error(e);
                                    }
                                }
                                if (rootElem[0] != null) {
                                    factory.setRoot(rootElem[0]).then(function (throwable) {
                                        if (callback != null) {
                                            callback(throwable);
                                        }
                                    });
                                }
                                else {
                                    if (callback != null) {
                                        callback(null);
                                    }
                                }
                            }
                        };
                        JsonModelLoader.loadObj = function (p_param, p_metaModel, p_factory, p_mappedKeys, p_rootElem) {
                            var kid = java.lang.Long.parseLong(p_param.get(org.kevoree.modeling.api.json.JsonFormat.KEY_UUID).toString());
                            var meta = p_param.get(org.kevoree.modeling.api.json.JsonFormat.KEY_META).toString();
                            var metaClass = p_metaModel.metaClass(meta);
                            var current = p_factory.createProxy(metaClass, p_mappedKeys.get(kid));
                            p_factory.universe().model().manager().initKObject(current, p_factory);
                            var raw = p_factory.universe().model().manager().entry(current, org.kevoree.modeling.api.data.manager.AccessMode.WRITE);
                            p_param.each(function (metaKey, payload_content) {
                                if (metaKey.equals(org.kevoree.modeling.api.json.JsonFormat.INBOUNDS_META)) {
                                    try {
                                        raw.set(org.kevoree.modeling.api.data.manager.Index.INBOUNDS_INDEX, org.kevoree.modeling.api.json.JsonModelLoader.transposeArr(payload_content, p_mappedKeys));
                                    }
                                    catch ($ex$) {
                                        if ($ex$ instanceof java.lang.Exception) {
                                            var e = $ex$;
                                            e.printStackTrace();
                                        }
                                    }
                                }
                                else {
                                    if (metaKey.equals(org.kevoree.modeling.api.json.JsonFormat.PARENT_META)) {
                                        try {
                                            var parentKeys = payload_content;
                                            var parentTransposed = org.kevoree.modeling.api.json.JsonModelLoader.transposeArr(parentKeys, p_mappedKeys);
                                            if (parentTransposed != null && parentTransposed.length > 0 && parentTransposed[0] != org.kevoree.modeling.api.KConfig.NULL_LONG) {
                                                var parentKey = new Array();
                                                parentKey[0] = parentTransposed[0];
                                                raw.set(org.kevoree.modeling.api.data.manager.Index.PARENT_INDEX, parentKey);
                                            }
                                        }
                                        catch ($ex$) {
                                            if ($ex$ instanceof java.lang.Exception) {
                                                var e = $ex$;
                                                e.printStackTrace();
                                            }
                                        }
                                    }
                                    else {
                                        if (metaKey.equals(org.kevoree.modeling.api.json.JsonFormat.PARENT_REF_META)) {
                                            try {
                                                var parentRef_payload = payload_content.toString();
                                                var elems = parentRef_payload.split(org.kevoree.modeling.api.data.manager.JsonRaw.SEP);
                                                if (elems.length == 2) {
                                                    var foundMeta = p_metaModel.metaClass(elems[0].trim());
                                                    if (foundMeta != null) {
                                                        var metaReference = foundMeta.metaByName(elems[1].trim());
                                                        if (metaReference != null && metaReference instanceof org.kevoree.modeling.api.abs.AbstractMetaReference) {
                                                            raw.set(org.kevoree.modeling.api.data.manager.Index.REF_IN_PARENT_INDEX, metaReference);
                                                        }
                                                    }
                                                }
                                            }
                                            catch ($ex$) {
                                                if ($ex$ instanceof java.lang.Exception) {
                                                    var e = $ex$;
                                                    e.printStackTrace();
                                                }
                                            }
                                        }
                                        else {
                                            if (metaKey.equals(org.kevoree.modeling.api.json.JsonFormat.KEY_ROOT)) {
                                                p_rootElem[0] = current;
                                            }
                                            else {
                                                var metaElement = metaClass.metaByName(metaKey);
                                                if (payload_content != null) {
                                                    if (metaElement != null && metaElement.metaType().equals(org.kevoree.modeling.api.meta.MetaType.ATTRIBUTE)) {
                                                        raw.set(metaElement.index(), metaElement.strategy().load(payload_content.toString(), metaElement, p_factory.now()));
                                                    }
                                                    else {
                                                        if (metaElement != null && metaElement instanceof org.kevoree.modeling.api.abs.AbstractMetaReference) {
                                                            try {
                                                                raw.set(metaElement.index(), org.kevoree.modeling.api.json.JsonModelLoader.transposeArr(payload_content, p_mappedKeys));
                                                            }
                                                            catch ($ex$) {
                                                                if ($ex$ instanceof java.lang.Exception) {
                                                                    var e = $ex$;
                                                                    e.printStackTrace();
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            });
                        };
                        JsonModelLoader.transposeArr = function (plainRawSet, p_mappedKeys) {
                            if (plainRawSet == null) {
                                return null;
                            }
                            var convertedRaw = new Array();
                            for (var l in plainRawSet) {
                                try {
                                    var converted = java.lang.Long.parseLong(plainRawSet[l]);
                                    if (p_mappedKeys.containsKey(converted)) {
                                        converted = p_mappedKeys.get(converted);
                                    }
                                    convertedRaw[l] = converted;
                                }
                                catch ($ex$) {
                                    if ($ex$ instanceof java.lang.Exception) {
                                        var e = $ex$;
                                        e.printStackTrace();
                                    }
                                }
                            }
                            return convertedRaw;
                        };
                        return JsonModelLoader;
                    })();
                    json.JsonModelLoader = JsonModelLoader;
                    var JsonModelSerializer = (function () {
                        function JsonModelSerializer() {
                        }
                        JsonModelSerializer.serialize = function (model, callback) {
                            model.view().getRoot().then(function (rootObj) {
                                var isRoot = false;
                                if (rootObj != null) {
                                    isRoot = rootObj.uuid() == model.uuid();
                                }
                                var builder = new java.lang.StringBuilder();
                                builder.append("[\n");
                                org.kevoree.modeling.api.json.JsonModelSerializer.printJSON(model, builder, isRoot);
                                model.visit(org.kevoree.modeling.api.VisitRequest.ALL, function (elem) {
                                    var isRoot2 = false;
                                    if (rootObj != null) {
                                        isRoot2 = rootObj.uuid() == elem.uuid();
                                    }
                                    builder.append(",\n");
                                    try {
                                        org.kevoree.modeling.api.json.JsonModelSerializer.printJSON(elem, builder, isRoot2);
                                    }
                                    catch ($ex$) {
                                        if ($ex$ instanceof java.lang.Exception) {
                                            var e = $ex$;
                                            e.printStackTrace();
                                            builder.append("{}");
                                        }
                                    }
                                    return org.kevoree.modeling.api.VisitResult.CONTINUE;
                                }).then(function (throwable) {
                                    builder.append("\n]\n");
                                    callback(builder.toString());
                                });
                            });
                        };
                        JsonModelSerializer.printJSON = function (elem, builder, isRoot) {
                            if (elem != null) {
                                var raw = elem.view().universe().model().manager().entry(elem, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                                if (raw != null) {
                                    builder.append(org.kevoree.modeling.api.data.manager.JsonRaw.encode(raw, elem.uuid(), elem.metaClass(), isRoot));
                                }
                            }
                        };
                        return JsonModelSerializer;
                    })();
                    json.JsonModelSerializer = JsonModelSerializer;
                    var JsonObjectReader = (function () {
                        function JsonObjectReader() {
                        }
                        JsonObjectReader.prototype.parseObject = function (payload) {
                            this.readObject = JSON.parse(payload);
                        };
                        JsonObjectReader.prototype.get = function (name) {
                            return this.readObject[name];
                        };
                        JsonObjectReader.prototype.getAsStringArray = function (name) {
                            return this.readObject[name];
                        };
                        JsonObjectReader.prototype.keys = function () {
                            var keysArr = [];
                            for (var key in this.readObject) {
                                keysArr.push(key);
                            }
                            return keysArr;
                        };
                        return JsonObjectReader;
                    })();
                    json.JsonObjectReader = JsonObjectReader;
                    var JsonString = (function () {
                        function JsonString() {
                        }
                        JsonString.encodeBuffer = function (buffer, chain) {
                            if (chain == null) {
                                return;
                            }
                            var i = 0;
                            while (i < chain.length) {
                                var ch = chain.charAt(i);
                                if (ch == '"') {
                                    buffer.append(JsonString.ESCAPE_CHAR);
                                    buffer.append('"');
                                }
                                else {
                                    if (ch == JsonString.ESCAPE_CHAR) {
                                        buffer.append(JsonString.ESCAPE_CHAR);
                                        buffer.append(JsonString.ESCAPE_CHAR);
                                    }
                                    else {
                                        if (ch == '\n') {
                                            buffer.append(JsonString.ESCAPE_CHAR);
                                            buffer.append('n');
                                        }
                                        else {
                                            if (ch == '\r') {
                                                buffer.append(JsonString.ESCAPE_CHAR);
                                                buffer.append('r');
                                            }
                                            else {
                                                if (ch == '\t') {
                                                    buffer.append(JsonString.ESCAPE_CHAR);
                                                    buffer.append('t');
                                                }
                                                else {
                                                    if (ch == '\u2028') {
                                                        buffer.append(JsonString.ESCAPE_CHAR);
                                                        buffer.append('u');
                                                        buffer.append('2');
                                                        buffer.append('0');
                                                        buffer.append('2');
                                                        buffer.append('8');
                                                    }
                                                    else {
                                                        if (ch == '\u2029') {
                                                            buffer.append(JsonString.ESCAPE_CHAR);
                                                            buffer.append('u');
                                                            buffer.append('2');
                                                            buffer.append('0');
                                                            buffer.append('2');
                                                            buffer.append('9');
                                                        }
                                                        else {
                                                            buffer.append(ch);
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                                i = i + 1;
                            }
                        };
                        JsonString.encode = function (p_chain) {
                            var sb = new java.lang.StringBuilder();
                            org.kevoree.modeling.api.json.JsonString.encodeBuffer(sb, p_chain);
                            return sb.toString();
                        };
                        JsonString.unescape = function (p_src) {
                            if (p_src == null) {
                                return null;
                            }
                            if (p_src.length == 0) {
                                return p_src;
                            }
                            var builder = null;
                            var i = 0;
                            while (i < p_src.length) {
                                var current = p_src.charAt(i);
                                if (current == JsonString.ESCAPE_CHAR) {
                                    if (builder == null) {
                                        builder = new java.lang.StringBuilder();
                                        builder.append(p_src.substring(0, i));
                                    }
                                    i++;
                                    var current2 = p_src.charAt(i);
                                    switch (current2) {
                                        case '"':
                                            builder.append('\"');
                                            break;
                                        case '\\':
                                            builder.append(current2);
                                            break;
                                        case '/':
                                            builder.append(current2);
                                            break;
                                        case 'b':
                                            builder.append('\b');
                                            break;
                                        case 'f':
                                            builder.append('\f');
                                            break;
                                        case 'n':
                                            builder.append('\n');
                                            break;
                                        case 'r':
                                            builder.append('\r');
                                            break;
                                        case 't':
                                            builder.append('\t');
                                            break;
                                        case '{':
                                            builder.append("\\{");
                                            break;
                                        case '}':
                                            builder.append("\\}");
                                            break;
                                        case '[':
                                            builder.append("\\[");
                                            break;
                                        case ']':
                                            builder.append("\\]");
                                            break;
                                        case ',':
                                            builder.append("\\,");
                                            break;
                                    }
                                }
                                else {
                                    if (builder != null) {
                                        builder = builder.append(current);
                                    }
                                }
                                i++;
                            }
                            if (builder != null) {
                                return builder.toString();
                            }
                            else {
                                return p_src;
                            }
                        };
                        JsonString.ESCAPE_CHAR = '\\';
                        return JsonString;
                    })();
                    json.JsonString = JsonString;
                })(json = api.json || (api.json = {}));
                var map;
                (function (map) {
                    var IntHashMap = (function () {
                        function IntHashMap(initalCapacity, loadFactor) {
                        }
                        IntHashMap.prototype.clear = function () {
                            for (var p in this) {
                                if (this.hasOwnProperty(p)) {
                                    delete this[p];
                                }
                            }
                        };
                        IntHashMap.prototype.get = function (key) {
                            return this[key];
                        };
                        IntHashMap.prototype.put = function (key, pval) {
                            var previousVal = this[key];
                            this[key] = pval;
                            return previousVal;
                        };
                        IntHashMap.prototype.containsKey = function (key) {
                            return this.hasOwnProperty(key);
                        };
                        IntHashMap.prototype.remove = function (key) {
                            var tmp = this[key];
                            delete this[key];
                            return tmp;
                        };
                        IntHashMap.prototype.size = function () {
                            return Object.keys(this).length;
                        };
                        IntHashMap.prototype.each = function (callback) {
                            for (var p in this) {
                                if (this.hasOwnProperty(p)) {
                                    callback(p, this[p]);
                                }
                            }
                        };
                        return IntHashMap;
                    })();
                    map.IntHashMap = IntHashMap;
                    var LongHashMap = (function () {
                        function LongHashMap(initalCapacity, loadFactor) {
                        }
                        LongHashMap.prototype.clear = function () {
                            for (var p in this) {
                                if (this.hasOwnProperty(p)) {
                                    delete this[p];
                                }
                            }
                        };
                        LongHashMap.prototype.get = function (key) {
                            return this[key];
                        };
                        LongHashMap.prototype.put = function (key, pval) {
                            var previousVal = this[key];
                            this[key] = pval;
                            return previousVal;
                        };
                        LongHashMap.prototype.containsKey = function (key) {
                            return this.hasOwnProperty(key);
                        };
                        LongHashMap.prototype.remove = function (key) {
                            var tmp = this[key];
                            delete this[key];
                            return tmp;
                        };
                        LongHashMap.prototype.size = function () {
                            return Object.keys(this).length;
                        };
                        LongHashMap.prototype.each = function (callback) {
                            for (var p in this) {
                                if (this.hasOwnProperty(p)) {
                                    callback(p, this[p]);
                                }
                            }
                        };
                        return LongHashMap;
                    })();
                    map.LongHashMap = LongHashMap;
                    var LongLongHashMap = (function () {
                        function LongLongHashMap(initalCapacity, loadFactor) {
                            this._counter = 0;
                            this._isDirty = false;
                        }
                        LongLongHashMap.prototype.clear = function () {
                            for (var p in this) {
                                if (this.hasOwnProperty(p) && p.indexOf('_') != 0) {
                                    delete this[p];
                                }
                            }
                        };
                        LongLongHashMap.prototype.get = function (key) {
                            return this[key];
                        };
                        LongLongHashMap.prototype.put = function (key, pval) {
                            this._isDirty = false;
                            var previousVal = this[key];
                            this[key] = pval;
                            return previousVal;
                        };
                        LongLongHashMap.prototype.containsKey = function (key) {
                            return this.hasOwnProperty(key);
                        };
                        LongLongHashMap.prototype.remove = function (key) {
                            var tmp = this[key];
                            delete this[key];
                            return tmp;
                        };
                        LongLongHashMap.prototype.size = function () {
                            return Object.keys(this).length - 2;
                        };
                        LongLongHashMap.prototype.each = function (callback) {
                            for (var p in this) {
                                if (this.hasOwnProperty(p) && p.indexOf('_') != 0) {
                                    callback(p, this[p]);
                                }
                            }
                        };
                        LongLongHashMap.prototype.counter = function () {
                            return this._counter;
                        };
                        LongLongHashMap.prototype.inc = function () {
                            this._counter++;
                        };
                        LongLongHashMap.prototype.dec = function () {
                            this._counter--;
                        };
                        LongLongHashMap.prototype.isDirty = function () {
                            return this._isDirty;
                        };
                        LongLongHashMap.prototype.setClean = function () {
                            this._isDirty = false;
                        };
                        LongLongHashMap.prototype.serialize = function () {
                            var buffer = "" + this.size();
                            this.each(function (key, value) {
                                buffer = buffer + LongLongHashMap.CHUNK_SEP + key + LongLongHashMap.ELEMENT_SEP + value;
                            });
                            return buffer;
                        };
                        LongLongHashMap.prototype.unserialize = function (key, payload, metaModel) {
                            if (payload == null || payload.length == 0) {
                                return;
                            }
                            var cursor = 0;
                            while (cursor < payload.length && payload.charAt(cursor) != LongLongHashMap.CHUNK_SEP) {
                                cursor++;
                            }
                            var nbElement = java.lang.Integer.parseInt(payload.substring(0, cursor));
                            while (cursor < payload.length) {
                                cursor++;
                                var beginChunk = cursor;
                                while (cursor < payload.length && payload.charAt(cursor) != LongLongHashMap.ELEMENT_SEP) {
                                    cursor++;
                                }
                                var middleChunk = cursor;
                                while (cursor < payload.length && payload.charAt(cursor) != LongLongHashMap.CHUNK_SEP) {
                                    cursor++;
                                }
                                var loopKey = java.lang.Long.parseLong(payload.substring(beginChunk, middleChunk));
                                var loopVal = java.lang.Long.parseLong(payload.substring(middleChunk + 1, cursor));
                                this.put(loopKey, loopVal);
                            }
                            this._isDirty = false;
                        };
                        LongLongHashMap.ELEMENT_SEP = ',';
                        LongLongHashMap.CHUNK_SEP = '/';
                        return LongLongHashMap;
                    })();
                    map.LongLongHashMap = LongLongHashMap;
                    var StringHashMap = (function () {
                        function StringHashMap(initalCapacity, loadFactor) {
                        }
                        StringHashMap.prototype.clear = function () {
                            for (var p in this) {
                                if (this.hasOwnProperty(p)) {
                                    delete this[p];
                                }
                            }
                        };
                        StringHashMap.prototype.get = function (key) {
                            return this[key];
                        };
                        StringHashMap.prototype.put = function (key, pval) {
                            var previousVal = this[key];
                            this[key] = pval;
                            return previousVal;
                        };
                        StringHashMap.prototype.containsKey = function (key) {
                            return this.hasOwnProperty(key);
                        };
                        StringHashMap.prototype.remove = function (key) {
                            var tmp = this[key];
                            delete this[key];
                            return tmp;
                        };
                        StringHashMap.prototype.size = function () {
                            return Object.keys(this).length;
                        };
                        StringHashMap.prototype.each = function (callback) {
                            for (var p in this) {
                                if (this.hasOwnProperty(p)) {
                                    callback(p, this[p]);
                                }
                            }
                        };
                        return StringHashMap;
                    })();
                    map.StringHashMap = StringHashMap;
                })(map = api.map || (api.map = {}));
                var meta;
                (function (meta) {
                    var MetaInferClass = (function () {
                        function MetaInferClass() {
                            this._attributes = null;
                            this._metaReferences = new Array();
                            this._attributes = new Array();
                            this._attributes[0] = new org.kevoree.modeling.api.abs.AbstractMetaAttribute("RAW", org.kevoree.modeling.api.data.manager.Index.RESERVED_INDEXES, -1, false, org.kevoree.modeling.api.meta.PrimitiveTypes.STRING, new org.kevoree.modeling.api.extrapolation.DiscreteExtrapolation());
                            this._attributes[1] = new org.kevoree.modeling.api.abs.AbstractMetaAttribute("CACHE", org.kevoree.modeling.api.data.manager.Index.RESERVED_INDEXES + 1, -1, false, org.kevoree.modeling.api.meta.PrimitiveTypes.TRANSIENT, new org.kevoree.modeling.api.extrapolation.DiscreteExtrapolation());
                        }
                        MetaInferClass.getInstance = function () {
                            if (MetaInferClass._INSTANCE == null) {
                                MetaInferClass._INSTANCE = new org.kevoree.modeling.api.meta.MetaInferClass();
                            }
                            return MetaInferClass._INSTANCE;
                        };
                        MetaInferClass.prototype.getRaw = function () {
                            return this._attributes[0];
                        };
                        MetaInferClass.prototype.getCache = function () {
                            return this._attributes[1];
                        };
                        MetaInferClass.prototype.metaElements = function () {
                            return new Array();
                        };
                        MetaInferClass.prototype.meta = function (index) {
                            var offset = index - org.kevoree.modeling.api.data.manager.Index.RESERVED_INDEXES;
                            if (offset == 0 || offset == 1) {
                                return this._attributes[offset];
                            }
                            else {
                                return null;
                            }
                        };
                        MetaInferClass.prototype.metaAttributes = function () {
                            return this._attributes;
                        };
                        MetaInferClass.prototype.metaReferences = function () {
                            return this._metaReferences;
                        };
                        MetaInferClass.prototype.metaByName = function (name) {
                            return this.attribute(name);
                        };
                        MetaInferClass.prototype.attribute = function (name) {
                            if (name == null) {
                                return null;
                            }
                            else {
                                if (name.equals(this._attributes[0].metaName())) {
                                    return this._attributes[0];
                                }
                                else {
                                    if (name.equals(this._attributes[1].metaName())) {
                                        return this._attributes[1];
                                    }
                                    else {
                                        return null;
                                    }
                                }
                            }
                        };
                        MetaInferClass.prototype.reference = function (name) {
                            return null;
                        };
                        MetaInferClass.prototype.operation = function (name) {
                            return null;
                        };
                        MetaInferClass.prototype.metaName = function () {
                            return "KInfer";
                        };
                        MetaInferClass.prototype.metaType = function () {
                            return org.kevoree.modeling.api.meta.MetaType.CLASS;
                        };
                        MetaInferClass.prototype.index = function () {
                            return -1;
                        };
                        MetaInferClass._INSTANCE = null;
                        return MetaInferClass;
                    })();
                    meta.MetaInferClass = MetaInferClass;
                    var MetaType = (function () {
                        function MetaType() {
                        }
                        MetaType.prototype.equals = function (other) {
                            return this == other;
                        };
                        MetaType.values = function () {
                            return MetaType._MetaTypeVALUES;
                        };
                        MetaType.ATTRIBUTE = new MetaType();
                        MetaType.REFERENCE = new MetaType();
                        MetaType.OPERATION = new MetaType();
                        MetaType.CLASS = new MetaType();
                        MetaType.MODEL = new MetaType();
                        MetaType._MetaTypeVALUES = [
                            MetaType.ATTRIBUTE,
                            MetaType.REFERENCE,
                            MetaType.OPERATION,
                            MetaType.CLASS,
                            MetaType.MODEL
                        ];
                        return MetaType;
                    })();
                    meta.MetaType = MetaType;
                    var PrimitiveTypes = (function () {
                        function PrimitiveTypes() {
                        }
                        PrimitiveTypes.STRING = new org.kevoree.modeling.api.abs.AbstractKDataType("STRING", false);
                        PrimitiveTypes.LONG = new org.kevoree.modeling.api.abs.AbstractKDataType("LONG", false);
                        PrimitiveTypes.INT = new org.kevoree.modeling.api.abs.AbstractKDataType("INT", false);
                        PrimitiveTypes.BOOL = new org.kevoree.modeling.api.abs.AbstractKDataType("BOOL", false);
                        PrimitiveTypes.SHORT = new org.kevoree.modeling.api.abs.AbstractKDataType("SHORT", false);
                        PrimitiveTypes.DOUBLE = new org.kevoree.modeling.api.abs.AbstractKDataType("DOUBLE", false);
                        PrimitiveTypes.FLOAT = new org.kevoree.modeling.api.abs.AbstractKDataType("FLOAT", false);
                        PrimitiveTypes.TRANSIENT = new org.kevoree.modeling.api.abs.AbstractKDataType("TRANSIENT", false);
                        return PrimitiveTypes;
                    })();
                    meta.PrimitiveTypes = PrimitiveTypes;
                })(meta = api.meta || (api.meta = {}));
                var msg;
                (function (msg) {
                    var KAtomicGetRequest = (function () {
                        function KAtomicGetRequest() {
                        }
                        KAtomicGetRequest.prototype.json = function () {
                            var buffer = new java.lang.StringBuilder();
                            org.kevoree.modeling.api.msg.KMessageHelper.printJsonStart(buffer);
                            org.kevoree.modeling.api.msg.KMessageHelper.printType(buffer, this.type());
                            org.kevoree.modeling.api.msg.KMessageHelper.printElem(this.id, org.kevoree.modeling.api.msg.KMessageLoader.ID_NAME, buffer);
                            org.kevoree.modeling.api.msg.KMessageHelper.printElem(this.key, org.kevoree.modeling.api.msg.KMessageLoader.KEY_NAME, buffer);
                            if (this.operation != null) {
                                org.kevoree.modeling.api.msg.KMessageHelper.printElem(this.operation.operationKey(), org.kevoree.modeling.api.msg.KMessageLoader.OPERATION_NAME, buffer);
                            }
                            org.kevoree.modeling.api.msg.KMessageHelper.printJsonEnd(buffer);
                            return buffer.toString();
                        };
                        KAtomicGetRequest.prototype.type = function () {
                            return org.kevoree.modeling.api.msg.KMessageLoader.ATOMIC_OPERATION_REQUEST_TYPE;
                        };
                        return KAtomicGetRequest;
                    })();
                    msg.KAtomicGetRequest = KAtomicGetRequest;
                    var KAtomicGetResult = (function () {
                        function KAtomicGetResult() {
                        }
                        KAtomicGetResult.prototype.json = function () {
                            var buffer = new java.lang.StringBuilder();
                            org.kevoree.modeling.api.msg.KMessageHelper.printJsonStart(buffer);
                            org.kevoree.modeling.api.msg.KMessageHelper.printType(buffer, this.type());
                            org.kevoree.modeling.api.msg.KMessageHelper.printElem(this.id, org.kevoree.modeling.api.msg.KMessageLoader.ID_NAME, buffer);
                            org.kevoree.modeling.api.msg.KMessageHelper.printElem(this.value, org.kevoree.modeling.api.msg.KMessageLoader.VALUE_NAME, buffer);
                            org.kevoree.modeling.api.msg.KMessageHelper.printJsonEnd(buffer);
                            return buffer.toString();
                        };
                        KAtomicGetResult.prototype.type = function () {
                            return org.kevoree.modeling.api.msg.KMessageLoader.ATOMIC_OPERATION_RESULT_TYPE;
                        };
                        return KAtomicGetResult;
                    })();
                    msg.KAtomicGetResult = KAtomicGetResult;
                    var KEvents = (function () {
                        function KEvents(nbObject) {
                            this._objIds = new Array();
                            this._metaindexes = new Array();
                            this._size = nbObject;
                        }
                        KEvents.prototype.allKeys = function () {
                            return this._objIds;
                        };
                        KEvents.prototype.json = function () {
                            var buffer = new java.lang.StringBuilder();
                            org.kevoree.modeling.api.msg.KMessageHelper.printJsonStart(buffer);
                            org.kevoree.modeling.api.msg.KMessageHelper.printType(buffer, this.type());
                            buffer.append(",");
                            buffer.append("\"");
                            buffer.append(org.kevoree.modeling.api.msg.KMessageLoader.KEYS_NAME).append("\":[");
                            for (var i = 0; i < this._objIds.length; i++) {
                                if (i != 0) {
                                    buffer.append(",");
                                }
                                buffer.append("\"");
                                buffer.append(this._objIds[i]);
                                buffer.append("\"");
                            }
                            buffer.append("]\n");
                            if (this._metaindexes != null) {
                                buffer.append(",");
                                buffer.append("\"");
                                buffer.append(org.kevoree.modeling.api.msg.KMessageLoader.VALUES_NAME).append("\":[");
                                for (var i = 0; i < this._metaindexes.length; i++) {
                                    if (i != 0) {
                                        buffer.append(",");
                                    }
                                    buffer.append("\"");
                                    var metaModified = this._metaindexes[i];
                                    if (metaModified != null) {
                                        for (var j = 0; j < metaModified.length; j++) {
                                            if (j != 0) {
                                                buffer.append("%");
                                            }
                                            buffer.append(metaModified[j]);
                                        }
                                    }
                                    buffer.append("\"");
                                }
                                buffer.append("]\n");
                            }
                            org.kevoree.modeling.api.msg.KMessageHelper.printJsonEnd(buffer);
                            return buffer.toString();
                        };
                        KEvents.prototype.type = function () {
                            return org.kevoree.modeling.api.msg.KMessageLoader.EVENTS_TYPE;
                        };
                        KEvents.prototype.size = function () {
                            return this._size;
                        };
                        KEvents.prototype.setEvent = function (index, p_objId, p_metaIndexes) {
                            this._objIds[index] = p_objId;
                            this._metaindexes[index] = p_metaIndexes;
                        };
                        KEvents.prototype.getKey = function (index) {
                            return this._objIds[index];
                        };
                        KEvents.prototype.getIndexes = function (index) {
                            return this._metaindexes[index];
                        };
                        return KEvents;
                    })();
                    msg.KEvents = KEvents;
                    var KGetRequest = (function () {
                        function KGetRequest() {
                        }
                        KGetRequest.prototype.json = function () {
                            var buffer = new java.lang.StringBuilder();
                            org.kevoree.modeling.api.msg.KMessageHelper.printJsonStart(buffer);
                            org.kevoree.modeling.api.msg.KMessageHelper.printType(buffer, this.type());
                            org.kevoree.modeling.api.msg.KMessageHelper.printElem(this.id, org.kevoree.modeling.api.msg.KMessageLoader.ID_NAME, buffer);
                            if (this.keys != null) {
                                buffer.append(",");
                                buffer.append("\"");
                                buffer.append(org.kevoree.modeling.api.msg.KMessageLoader.KEYS_NAME).append("\":[");
                                for (var i = 0; i < this.keys.length; i++) {
                                    if (i != 0) {
                                        buffer.append(",");
                                    }
                                    buffer.append("\"");
                                    buffer.append(this.keys[i].toString());
                                    buffer.append("\"");
                                }
                                buffer.append("]\n");
                            }
                            org.kevoree.modeling.api.msg.KMessageHelper.printJsonEnd(buffer);
                            return buffer.toString();
                        };
                        KGetRequest.prototype.type = function () {
                            return org.kevoree.modeling.api.msg.KMessageLoader.GET_REQ_TYPE;
                        };
                        return KGetRequest;
                    })();
                    msg.KGetRequest = KGetRequest;
                    var KGetResult = (function () {
                        function KGetResult() {
                        }
                        KGetResult.prototype.json = function () {
                            var buffer = new java.lang.StringBuilder();
                            org.kevoree.modeling.api.msg.KMessageHelper.printJsonStart(buffer);
                            org.kevoree.modeling.api.msg.KMessageHelper.printType(buffer, this.type());
                            org.kevoree.modeling.api.msg.KMessageHelper.printElem(this.id, org.kevoree.modeling.api.msg.KMessageLoader.ID_NAME, buffer);
                            if (this.values != null) {
                                buffer.append(",");
                                buffer.append("\"");
                                buffer.append(org.kevoree.modeling.api.msg.KMessageLoader.VALUES_NAME).append("\":[");
                                for (var i = 0; i < this.values.length; i++) {
                                    if (i != 0) {
                                        buffer.append(",");
                                    }
                                    buffer.append("\"");
                                    buffer.append(org.kevoree.modeling.api.json.JsonString.encode(this.values[i]));
                                    buffer.append("\"");
                                }
                                buffer.append("]\n");
                            }
                            org.kevoree.modeling.api.msg.KMessageHelper.printJsonEnd(buffer);
                            return buffer.toString();
                        };
                        KGetResult.prototype.type = function () {
                            return org.kevoree.modeling.api.msg.KMessageLoader.GET_RES_TYPE;
                        };
                        return KGetResult;
                    })();
                    msg.KGetResult = KGetResult;
                    var KMessageHelper = (function () {
                        function KMessageHelper() {
                        }
                        KMessageHelper.printJsonStart = function (builder) {
                            builder.append("{\n");
                        };
                        KMessageHelper.printJsonEnd = function (builder) {
                            builder.append("}\n");
                        };
                        KMessageHelper.printType = function (builder, type) {
                            builder.append("\"");
                            builder.append(org.kevoree.modeling.api.msg.KMessageLoader.TYPE_NAME);
                            builder.append("\":\"");
                            builder.append(type);
                            builder.append("\"\n");
                        };
                        KMessageHelper.printElem = function (elem, name, builder) {
                            if (elem != null) {
                                builder.append(",");
                                builder.append("\"");
                                builder.append(name);
                                builder.append("\":\"");
                                builder.append(elem.toString());
                                builder.append("\"\n");
                            }
                        };
                        return KMessageHelper;
                    })();
                    msg.KMessageHelper = KMessageHelper;
                    var KMessageLoader = (function () {
                        function KMessageLoader() {
                        }
                        KMessageLoader.load = function (payload) {
                            if (payload == null) {
                                return null;
                            }
                            var objectReader = new org.kevoree.modeling.api.json.JsonObjectReader();
                            objectReader.parseObject(payload);
                            try {
                                var parsedType = java.lang.Integer.parseInt(objectReader.get(KMessageLoader.TYPE_NAME).toString());
                                if (parsedType == KMessageLoader.EVENTS_TYPE) {
                                    var eventsMessage = null;
                                    if (objectReader.get(KMessageLoader.KEYS_NAME) != null) {
                                        var objIdsRaw = objectReader.getAsStringArray(KMessageLoader.KEYS_NAME);
                                        eventsMessage = new org.kevoree.modeling.api.msg.KEvents(objIdsRaw.length);
                                        var keys = new Array();
                                        for (var i = 0; i < objIdsRaw.length; i++) {
                                            try {
                                                keys[i] = org.kevoree.modeling.api.data.cache.KContentKey.create(objIdsRaw[i]);
                                            }
                                            catch ($ex$) {
                                                if ($ex$ instanceof java.lang.Exception) {
                                                    var e = $ex$;
                                                    e.printStackTrace();
                                                }
                                            }
                                        }
                                        eventsMessage._objIds = keys;
                                        if (objectReader.get(KMessageLoader.VALUES_NAME) != null) {
                                            var metaInt = objectReader.getAsStringArray(KMessageLoader.VALUES_NAME);
                                            var metaIndexes = new Array();
                                            for (var i = 0; i < metaInt.length; i++) {
                                                try {
                                                    if (metaInt[i] != null) {
                                                        var splitted = metaInt[i].split("%");
                                                        var newMeta = new Array();
                                                        for (var h = 0; h < splitted.length; h++) {
                                                            if (splitted[h] != null && !splitted[h].isEmpty()) {
                                                                newMeta[h] = java.lang.Integer.parseInt(splitted[h]);
                                                            }
                                                        }
                                                        metaIndexes[i] = newMeta;
                                                    }
                                                }
                                                catch ($ex$) {
                                                    if ($ex$ instanceof java.lang.Exception) {
                                                        var e = $ex$;
                                                        e.printStackTrace();
                                                    }
                                                }
                                            }
                                            eventsMessage._metaindexes = metaIndexes;
                                        }
                                    }
                                    return eventsMessage;
                                }
                                else {
                                    if (parsedType == KMessageLoader.GET_REQ_TYPE) {
                                        var getKeysRequest = new org.kevoree.modeling.api.msg.KGetRequest();
                                        if (objectReader.get(KMessageLoader.ID_NAME) != null) {
                                            getKeysRequest.id = java.lang.Long.parseLong(objectReader.get(KMessageLoader.ID_NAME).toString());
                                        }
                                        if (objectReader.get(KMessageLoader.KEYS_NAME) != null) {
                                            var metaInt = objectReader.getAsStringArray(KMessageLoader.KEYS_NAME);
                                            var keys = new Array();
                                            for (var i = 0; i < metaInt.length; i++) {
                                                keys[i] = org.kevoree.modeling.api.data.cache.KContentKey.create(metaInt[i]);
                                            }
                                            getKeysRequest.keys = keys;
                                        }
                                        return getKeysRequest;
                                    }
                                    else {
                                        if (parsedType == KMessageLoader.GET_RES_TYPE) {
                                            var getResult = new org.kevoree.modeling.api.msg.KGetResult();
                                            if (objectReader.get(KMessageLoader.ID_NAME) != null) {
                                                getResult.id = java.lang.Long.parseLong(objectReader.get(KMessageLoader.ID_NAME).toString());
                                            }
                                            if (objectReader.get(KMessageLoader.VALUES_NAME) != null) {
                                                var metaInt = objectReader.getAsStringArray(KMessageLoader.VALUES_NAME);
                                                var values = new Array();
                                                for (var i = 0; i < metaInt.length; i++) {
                                                    values[i] = org.kevoree.modeling.api.json.JsonString.unescape(metaInt[i]);
                                                }
                                                getResult.values = values;
                                            }
                                            return getResult;
                                        }
                                        else {
                                            if (parsedType == KMessageLoader.PUT_REQ_TYPE) {
                                                var putRequest = new org.kevoree.modeling.api.msg.KPutRequest();
                                                if (objectReader.get(KMessageLoader.ID_NAME) != null) {
                                                    putRequest.id = java.lang.Long.parseLong(objectReader.get(KMessageLoader.ID_NAME).toString());
                                                }
                                                var toFlatKeys = null;
                                                var toFlatValues = null;
                                                if (objectReader.get(KMessageLoader.KEYS_NAME) != null) {
                                                    toFlatKeys = objectReader.getAsStringArray(KMessageLoader.KEYS_NAME);
                                                }
                                                if (objectReader.get(KMessageLoader.VALUES_NAME) != null) {
                                                    toFlatValues = objectReader.getAsStringArray(KMessageLoader.VALUES_NAME);
                                                }
                                                if (toFlatKeys != null && toFlatValues != null && toFlatKeys.length == toFlatValues.length) {
                                                    if (putRequest.request == null) {
                                                        putRequest.request = new org.kevoree.modeling.api.data.cdn.KContentPutRequest(toFlatKeys.length);
                                                    }
                                                    for (var i = 0; i < toFlatKeys.length; i++) {
                                                        putRequest.request.put(org.kevoree.modeling.api.data.cache.KContentKey.create(toFlatKeys[i]), org.kevoree.modeling.api.json.JsonString.unescape(toFlatValues[i]));
                                                    }
                                                }
                                                return putRequest;
                                            }
                                            else {
                                                if (parsedType == KMessageLoader.PUT_RES_TYPE) {
                                                    var putResult = new org.kevoree.modeling.api.msg.KPutResult();
                                                    if (objectReader.get(KMessageLoader.ID_NAME) != null) {
                                                        putResult.id = java.lang.Long.parseLong(objectReader.get(KMessageLoader.ID_NAME).toString());
                                                    }
                                                    return putResult;
                                                }
                                                else {
                                                    if (parsedType == KMessageLoader.OPERATION_CALL_TYPE) {
                                                        var callMessage = new org.kevoree.modeling.api.msg.KOperationCallMessage();
                                                        if (objectReader.get(KMessageLoader.ID_NAME) != null) {
                                                            callMessage.id = java.lang.Long.parseLong(objectReader.get(KMessageLoader.ID_NAME).toString());
                                                        }
                                                        if (objectReader.get(KMessageLoader.KEY_NAME) != null) {
                                                            callMessage.key = org.kevoree.modeling.api.data.cache.KContentKey.create(objectReader.get(KMessageLoader.KEY_NAME).toString());
                                                        }
                                                        if (objectReader.get(KMessageLoader.CLASS_IDX_NAME) != null) {
                                                            callMessage.classIndex = java.lang.Integer.parseInt(objectReader.get(KMessageLoader.CLASS_IDX_NAME).toString());
                                                        }
                                                        if (objectReader.get(KMessageLoader.OPERATION_NAME) != null) {
                                                            callMessage.opIndex = java.lang.Integer.parseInt(objectReader.get(KMessageLoader.OPERATION_NAME).toString());
                                                        }
                                                        if (objectReader.get(KMessageLoader.PARAMETERS_NAME) != null) {
                                                            var params = objectReader.getAsStringArray(KMessageLoader.PARAMETERS_NAME);
                                                            var toFlat = new Array();
                                                            for (var i = 0; i < params.length; i++) {
                                                                toFlat[i] = org.kevoree.modeling.api.json.JsonString.unescape(params[i]);
                                                            }
                                                            callMessage.params = toFlat;
                                                        }
                                                        return callMessage;
                                                    }
                                                    else {
                                                        if (parsedType == KMessageLoader.OPERATION_RESULT_TYPE) {
                                                            var resultMessage = new org.kevoree.modeling.api.msg.KOperationResultMessage();
                                                            if (objectReader.get(KMessageLoader.ID_NAME) != null) {
                                                                resultMessage.id = java.lang.Long.parseLong(objectReader.get(KMessageLoader.ID_NAME).toString());
                                                            }
                                                            if (objectReader.get(KMessageLoader.KEY_NAME) != null) {
                                                                resultMessage.key = org.kevoree.modeling.api.data.cache.KContentKey.create(objectReader.get(KMessageLoader.KEY_NAME).toString());
                                                            }
                                                            if (objectReader.get(KMessageLoader.VALUE_NAME) != null) {
                                                                resultMessage.value = objectReader.get(KMessageLoader.VALUE_NAME).toString();
                                                            }
                                                            return resultMessage;
                                                        }
                                                        else {
                                                            if (parsedType == KMessageLoader.ATOMIC_OPERATION_REQUEST_TYPE) {
                                                                var atomicGetMessage = new org.kevoree.modeling.api.msg.KAtomicGetRequest();
                                                                if (objectReader.get(KMessageLoader.ID_NAME) != null) {
                                                                    atomicGetMessage.id = java.lang.Long.parseLong(objectReader.get(KMessageLoader.ID_NAME).toString());
                                                                }
                                                                if (objectReader.get(KMessageLoader.KEY_NAME) != null) {
                                                                    atomicGetMessage.key = org.kevoree.modeling.api.data.cache.KContentKey.create(objectReader.get(KMessageLoader.KEY_NAME).toString());
                                                                }
                                                                if (objectReader.get(KMessageLoader.OPERATION_NAME) != null) {
                                                                    atomicGetMessage.operation = org.kevoree.modeling.api.data.cdn.AtomicOperationFactory.getOperationWithKey(java.lang.Integer.parseInt(objectReader.get(KMessageLoader.OPERATION_NAME)));
                                                                }
                                                                return atomicGetMessage;
                                                            }
                                                            else {
                                                                if (parsedType == KMessageLoader.ATOMIC_OPERATION_RESULT_TYPE) {
                                                                    var atomicGetResultMessage = new org.kevoree.modeling.api.msg.KAtomicGetResult();
                                                                    if (objectReader.get(KMessageLoader.ID_NAME) != null) {
                                                                        atomicGetResultMessage.id = java.lang.Long.parseLong(objectReader.get(KMessageLoader.ID_NAME).toString());
                                                                    }
                                                                    if (objectReader.get(KMessageLoader.VALUE_NAME) != null) {
                                                                        atomicGetResultMessage.value = objectReader.get(KMessageLoader.VALUE_NAME).toString();
                                                                    }
                                                                    return atomicGetResultMessage;
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                                return null;
                            }
                            catch ($ex$) {
                                if ($ex$ instanceof java.lang.Exception) {
                                    var e = $ex$;
                                    e.printStackTrace();
                                    return null;
                                }
                            }
                        };
                        KMessageLoader.TYPE_NAME = "type";
                        KMessageLoader.OPERATION_NAME = "op";
                        KMessageLoader.KEY_NAME = "key";
                        KMessageLoader.KEYS_NAME = "keys";
                        KMessageLoader.ID_NAME = "id";
                        KMessageLoader.VALUE_NAME = "value";
                        KMessageLoader.VALUES_NAME = "values";
                        KMessageLoader.CLASS_IDX_NAME = "class";
                        KMessageLoader.PARAMETERS_NAME = "params";
                        KMessageLoader.EVENTS_TYPE = 0;
                        KMessageLoader.GET_REQ_TYPE = 1;
                        KMessageLoader.GET_RES_TYPE = 2;
                        KMessageLoader.PUT_REQ_TYPE = 3;
                        KMessageLoader.PUT_RES_TYPE = 4;
                        KMessageLoader.OPERATION_CALL_TYPE = 5;
                        KMessageLoader.OPERATION_RESULT_TYPE = 6;
                        KMessageLoader.ATOMIC_OPERATION_REQUEST_TYPE = 7;
                        KMessageLoader.ATOMIC_OPERATION_RESULT_TYPE = 8;
                        return KMessageLoader;
                    })();
                    msg.KMessageLoader = KMessageLoader;
                    var KOperationCallMessage = (function () {
                        function KOperationCallMessage() {
                        }
                        KOperationCallMessage.prototype.json = function () {
                            var buffer = new java.lang.StringBuilder();
                            org.kevoree.modeling.api.msg.KMessageHelper.printJsonStart(buffer);
                            org.kevoree.modeling.api.msg.KMessageHelper.printType(buffer, this.type());
                            org.kevoree.modeling.api.msg.KMessageHelper.printElem(this.id, org.kevoree.modeling.api.msg.KMessageLoader.ID_NAME, buffer);
                            org.kevoree.modeling.api.msg.KMessageHelper.printElem(this.key, org.kevoree.modeling.api.msg.KMessageLoader.KEY_NAME, buffer);
                            buffer.append(",\"").append(org.kevoree.modeling.api.msg.KMessageLoader.CLASS_IDX_NAME).append("\":\"").append(this.classIndex).append("\"");
                            buffer.append(",\"").append(org.kevoree.modeling.api.msg.KMessageLoader.OPERATION_NAME).append("\":\"").append(this.opIndex).append("\"");
                            if (this.params != null) {
                                buffer.append(",\"");
                                buffer.append(org.kevoree.modeling.api.msg.KMessageLoader.PARAMETERS_NAME).append("\":[");
                                for (var i = 0; i < this.params.length; i++) {
                                    if (i != 0) {
                                        buffer.append(",");
                                    }
                                    buffer.append("\"");
                                    buffer.append(org.kevoree.modeling.api.json.JsonString.encode(this.params[i]));
                                    buffer.append("\"");
                                }
                                buffer.append("]\n");
                            }
                            org.kevoree.modeling.api.msg.KMessageHelper.printJsonEnd(buffer);
                            return buffer.toString();
                        };
                        KOperationCallMessage.prototype.type = function () {
                            return org.kevoree.modeling.api.msg.KMessageLoader.OPERATION_CALL_TYPE;
                        };
                        return KOperationCallMessage;
                    })();
                    msg.KOperationCallMessage = KOperationCallMessage;
                    var KOperationResultMessage = (function () {
                        function KOperationResultMessage() {
                        }
                        KOperationResultMessage.prototype.json = function () {
                            var buffer = new java.lang.StringBuilder();
                            org.kevoree.modeling.api.msg.KMessageHelper.printJsonStart(buffer);
                            org.kevoree.modeling.api.msg.KMessageHelper.printType(buffer, this.type());
                            org.kevoree.modeling.api.msg.KMessageHelper.printElem(this.id, org.kevoree.modeling.api.msg.KMessageLoader.ID_NAME, buffer);
                            org.kevoree.modeling.api.msg.KMessageHelper.printElem(this.key, org.kevoree.modeling.api.msg.KMessageLoader.KEY_NAME, buffer);
                            org.kevoree.modeling.api.msg.KMessageHelper.printElem(this.value, org.kevoree.modeling.api.msg.KMessageLoader.VALUE_NAME, buffer);
                            org.kevoree.modeling.api.msg.KMessageHelper.printJsonEnd(buffer);
                            return buffer.toString();
                        };
                        KOperationResultMessage.prototype.type = function () {
                            return org.kevoree.modeling.api.msg.KMessageLoader.OPERATION_RESULT_TYPE;
                        };
                        return KOperationResultMessage;
                    })();
                    msg.KOperationResultMessage = KOperationResultMessage;
                    var KPutRequest = (function () {
                        function KPutRequest() {
                        }
                        KPutRequest.prototype.json = function () {
                            var buffer = new java.lang.StringBuilder();
                            org.kevoree.modeling.api.msg.KMessageHelper.printJsonStart(buffer);
                            org.kevoree.modeling.api.msg.KMessageHelper.printType(buffer, this.type());
                            org.kevoree.modeling.api.msg.KMessageHelper.printElem(this.id, org.kevoree.modeling.api.msg.KMessageLoader.ID_NAME, buffer);
                            if (this.request != null) {
                                buffer.append(",\"");
                                buffer.append(org.kevoree.modeling.api.msg.KMessageLoader.KEYS_NAME).append("\":[");
                                for (var i = 0; i < this.request.size(); i++) {
                                    if (i != 0) {
                                        buffer.append(",");
                                    }
                                    buffer.append("\"");
                                    buffer.append(this.request.getKey(i));
                                    buffer.append("\"");
                                }
                                buffer.append("]\n");
                                buffer.append(",\"");
                                buffer.append(org.kevoree.modeling.api.msg.KMessageLoader.VALUES_NAME).append("\":[");
                                for (var i = 0; i < this.request.size(); i++) {
                                    if (i != 0) {
                                        buffer.append(",");
                                    }
                                    buffer.append("\"");
                                    buffer.append(org.kevoree.modeling.api.json.JsonString.encode(this.request.getContent(i)));
                                    buffer.append("\"");
                                }
                                buffer.append("]\n");
                            }
                            org.kevoree.modeling.api.msg.KMessageHelper.printJsonEnd(buffer);
                            return buffer.toString();
                        };
                        KPutRequest.prototype.type = function () {
                            return org.kevoree.modeling.api.msg.KMessageLoader.PUT_REQ_TYPE;
                        };
                        return KPutRequest;
                    })();
                    msg.KPutRequest = KPutRequest;
                    var KPutResult = (function () {
                        function KPutResult() {
                        }
                        KPutResult.prototype.json = function () {
                            var buffer = new java.lang.StringBuilder();
                            org.kevoree.modeling.api.msg.KMessageHelper.printJsonStart(buffer);
                            org.kevoree.modeling.api.msg.KMessageHelper.printType(buffer, this.type());
                            org.kevoree.modeling.api.msg.KMessageHelper.printElem(this.id, org.kevoree.modeling.api.msg.KMessageLoader.ID_NAME, buffer);
                            org.kevoree.modeling.api.msg.KMessageHelper.printJsonEnd(buffer);
                            return buffer.toString();
                        };
                        KPutResult.prototype.type = function () {
                            return org.kevoree.modeling.api.msg.KMessageLoader.PUT_RES_TYPE;
                        };
                        return KPutResult;
                    })();
                    msg.KPutResult = KPutResult;
                })(msg = api.msg || (api.msg = {}));
                var polynomial;
                (function (polynomial) {
                    var doublepolynomial;
                    (function (doublepolynomial) {
                        var DoublePolynomialModel = (function () {
                            function DoublePolynomialModel(p_timeOrigin, p_toleratedError, p_maxDegree, p_prioritization) {
                                this._isDirty = false;
                                this._polyTime = new org.kevoree.modeling.api.polynomial.doublepolynomial.TimePolynomial(p_timeOrigin);
                                this._prioritization = p_prioritization;
                                this._maxDegree = p_maxDegree;
                                this._toleratedError = p_toleratedError;
                            }
                            DoublePolynomialModel.prototype.degree = function () {
                                if (this._weights == null) {
                                    return -1;
                                }
                                else {
                                    return this._weights.length - 1;
                                }
                            };
                            DoublePolynomialModel.prototype.timeOrigin = function () {
                                return this._polyTime.timeOrigin();
                            };
                            DoublePolynomialModel.prototype.comparePolynome = function (p2, err) {
                                if (this._weights.length != p2._weights.length) {
                                    return false;
                                }
                                for (var i = 0; i < this._weights.length; i++) {
                                    if (Math.abs(this._weights[i] - this._weights[i]) > err) {
                                        return false;
                                    }
                                }
                                return true;
                            };
                            DoublePolynomialModel.prototype.extrapolate = function (time) {
                                return this.test_extrapolate(this._polyTime.denormalize(time), this._weights);
                            };
                            DoublePolynomialModel.prototype.insert = function (time, value) {
                                if (this._weights == null) {
                                    this.internal_feed(time, value);
                                    this._isDirty = true;
                                    return true;
                                }
                                if (this._polyTime.insert(time)) {
                                    var maxError = this.maxErr();
                                    if (Math.abs(this.extrapolate(time) - value) <= maxError) {
                                        return true;
                                    }
                                    var deg = this.degree();
                                    var newMaxDegree = Math.min(this._polyTime.nbSamples() - 1, this._maxDegree);
                                    if (deg < newMaxDegree) {
                                        deg++;
                                        var ss = Math.min(deg * 2, this._polyTime.nbSamples() - 1);
                                        var times = new Array();
                                        var values = new Array();
                                        var current = this._polyTime.nbSamples() - 1;
                                        for (var i = 0; i < ss; i++) {
                                            times[i] = this._polyTime.getNormalizedTime((i * current / ss));
                                            values[i] = this.test_extrapolate(times[i], this._weights);
                                        }
                                        times[ss] = this._polyTime.denormalize(time);
                                        values[ss] = value;
                                        var pf = new org.kevoree.modeling.api.polynomial.util.PolynomialFitEjml(deg);
                                        pf.fit(times, values);
                                        if (this.maxError(pf.getCoef(), time, value) <= maxError) {
                                            this._weights = new Array();
                                            for (var i = 0; i < pf.getCoef().length; i++) {
                                                this._weights[i] = pf.getCoef()[i];
                                            }
                                            this._isDirty = true;
                                            return true;
                                        }
                                    }
                                    this._polyTime.removeLast();
                                    return false;
                                }
                                else {
                                    return false;
                                }
                            };
                            DoublePolynomialModel.prototype.lastIndex = function () {
                                return this._polyTime.lastIndex();
                            };
                            DoublePolynomialModel.prototype.save = function () {
                                var builder = new java.lang.StringBuilder();
                                for (var i = 0; i < this._weights.length; i++) {
                                    if (i != 0) {
                                        builder.append(DoublePolynomialModel.sepW);
                                    }
                                    builder.append(this._weights[i] + "");
                                }
                                builder.append(DoublePolynomialModel.sep);
                                builder.append(this._polyTime.save());
                                this._isDirty = false;
                                return builder.toString();
                            };
                            DoublePolynomialModel.prototype.load = function (payload) {
                                var parts = payload.split(DoublePolynomialModel.sep);
                                if (parts.length == 2) {
                                    var welems = parts[0].split(DoublePolynomialModel.sepW);
                                    this._weights = new Array();
                                    for (var i = 0; i < welems.length; i++) {
                                        this._weights[i] = java.lang.Double.parseDouble(welems[i]);
                                    }
                                    this._polyTime.load(parts[1]);
                                }
                                else {
                                    System.err.println("Bad Polynomial String " + payload);
                                }
                                this._isDirty = false;
                            };
                            DoublePolynomialModel.prototype.isDirty = function () {
                                return this._isDirty || this._polyTime.isDirty();
                            };
                            DoublePolynomialModel.prototype.maxErr = function () {
                                var tol = this._toleratedError;
                                if (this._prioritization == org.kevoree.modeling.api.polynomial.util.Prioritization.HIGHDEGREES) {
                                    tol = this._toleratedError / Math.pow(2, this._maxDegree - this.degree());
                                }
                                else {
                                    if (this._prioritization == org.kevoree.modeling.api.polynomial.util.Prioritization.LOWDEGREES) {
                                        tol = this._toleratedError / Math.pow(2, this.degree() + 0.5);
                                    }
                                    else {
                                        if (this._prioritization == org.kevoree.modeling.api.polynomial.util.Prioritization.SAMEPRIORITY) {
                                            tol = this._toleratedError * this.degree() * 2 / (2 * this._maxDegree);
                                        }
                                    }
                                }
                                return tol;
                            };
                            DoublePolynomialModel.prototype.internal_feed = function (time, value) {
                                if (this._weights == null) {
                                    this._weights = new Array();
                                    this._weights[0] = value;
                                    this._polyTime.insert(time);
                                }
                            };
                            DoublePolynomialModel.prototype.maxError = function (computedWeights, time, value) {
                                var maxErr = 0;
                                var temp;
                                var ds;
                                for (var i = 0; i < this._polyTime.nbSamples() - 1; i++) {
                                    ds = this._polyTime.getNormalizedTime(i);
                                    var val = this.test_extrapolate(ds, computedWeights);
                                    temp = Math.abs(val - this.test_extrapolate(ds, this._weights));
                                    if (temp > maxErr) {
                                        maxErr = temp;
                                    }
                                }
                                temp = Math.abs(this.test_extrapolate(this._polyTime.denormalize(time), computedWeights) - value);
                                if (temp > maxErr) {
                                    maxErr = temp;
                                }
                                return maxErr;
                            };
                            DoublePolynomialModel.prototype.test_extrapolate = function (time, weights) {
                                var result = 0;
                                var power = 1;
                                for (var j = 0; j < weights.length; j++) {
                                    result += weights[j] * power;
                                    power = power * time;
                                }
                                return result;
                            };
                            DoublePolynomialModel.sep = "/";
                            DoublePolynomialModel.sepW = "%";
                            return DoublePolynomialModel;
                        })();
                        doublepolynomial.DoublePolynomialModel = DoublePolynomialModel;
                        var TimePolynomial = (function () {
                            function TimePolynomial(p_timeOrigin) {
                                this._isDirty = false;
                                this._timeOrigin = p_timeOrigin;
                            }
                            TimePolynomial.prototype.timeOrigin = function () {
                                return this._timeOrigin;
                            };
                            TimePolynomial.prototype.samplingPeriod = function () {
                                return this._samplingPeriod;
                            };
                            TimePolynomial.prototype.weights = function () {
                                return this._weights;
                            };
                            TimePolynomial.prototype.degree = function () {
                                if (this._weights == null) {
                                    return -1;
                                }
                                else {
                                    return this._weights.length - 1;
                                }
                            };
                            TimePolynomial.prototype.denormalize = function (p_time) {
                                return (p_time - this._timeOrigin) / this._samplingPeriod;
                            };
                            TimePolynomial.prototype.getNormalizedTime = function (id) {
                                var result = 0;
                                var power = 1;
                                for (var j = 0; j < this._weights.length; j++) {
                                    result += this._weights[j] * power;
                                    power = power * id;
                                }
                                return result;
                            };
                            TimePolynomial.prototype.extrapolate = function (id) {
                                return this.test_extrapolate(id, this._weights);
                            };
                            TimePolynomial.prototype.nbSamples = function () {
                                return this._nbSamples;
                            };
                            TimePolynomial.prototype.insert = function (time) {
                                if (this._weights == null) {
                                    this._timeOrigin = time;
                                    this._weights = new Array();
                                    this._weights[0] = 0;
                                    this._nbSamples = 1;
                                    this._isDirty = true;
                                    return true;
                                }
                                if (this._nbSamples == 1) {
                                    this._samplingPeriod = time - this._timeOrigin;
                                    this._weights = new Array();
                                    this._weights[0] = 0;
                                    this._weights[1] = 1;
                                    this._nbSamples = 2;
                                    this._isDirty = true;
                                    return true;
                                }
                                if (time > this.extrapolate(this._nbSamples - 1)) {
                                    var maxError = this._samplingPeriod / TimePolynomial.toleratedErrorRatio;
                                    if (Math.abs(this.extrapolate(this._nbSamples) - time) <= maxError) {
                                        this._nbSamples++;
                                        this._isDirty = true;
                                        return true;
                                    }
                                    var deg = this.degree();
                                    var newMaxDegree = Math.min(this._nbSamples, TimePolynomial.maxTimeDegree);
                                    while (deg < newMaxDegree) {
                                        deg++;
                                        var ss = Math.min(deg * 2, this._nbSamples);
                                        var ids = new Array();
                                        var times = new Array();
                                        var idtemp;
                                        for (var i = 0; i < ss; i++) {
                                            idtemp = (i * this._nbSamples / ss);
                                            ids[i] = idtemp;
                                            times[i] = (this.extrapolate(idtemp) - this._timeOrigin) / (this._samplingPeriod);
                                        }
                                        ids[ss] = this._nbSamples;
                                        times[ss] = (time - this._timeOrigin) / (this._samplingPeriod);
                                        var pf = new org.kevoree.modeling.api.polynomial.util.PolynomialFitEjml(deg);
                                        pf.fit(ids, times);
                                        if (this.maxError(pf.getCoef(), this._nbSamples, time) <= maxError) {
                                            this._weights = new Array();
                                            for (var i = 0; i < pf.getCoef().length; i++) {
                                                this._weights[i] = pf.getCoef()[i];
                                            }
                                            this._nbSamples++;
                                            this._isDirty = true;
                                            return true;
                                        }
                                    }
                                    return false;
                                }
                                else {
                                }
                                return false;
                            };
                            TimePolynomial.prototype.maxError = function (computedWeights, lastId, newtime) {
                                var maxErr = 0;
                                var time;
                                var temp;
                                for (var i = 0; i < lastId; i++) {
                                    time = this.test_extrapolate(i, computedWeights);
                                    temp = Math.abs(time - this.extrapolate(i));
                                    if (temp > maxErr) {
                                        maxErr = temp;
                                    }
                                }
                                temp = Math.abs(this.test_extrapolate(this._nbSamples, computedWeights) - newtime);
                                if (temp > maxErr) {
                                    maxErr = temp;
                                }
                                return maxErr;
                            };
                            TimePolynomial.prototype.test_extrapolate = function (id, newWeights) {
                                var result = 0;
                                var power = 1;
                                for (var j = 0; j < newWeights.length; j++) {
                                    result += newWeights[j] * power;
                                    power = power * id;
                                }
                                result = result * (this._samplingPeriod) + this._timeOrigin;
                                return result;
                            };
                            TimePolynomial.prototype.removeLast = function () {
                                this._nbSamples = this._nbSamples - 1;
                            };
                            TimePolynomial.prototype.lastIndex = function () {
                                if (this._nbSamples > 0) {
                                    return this.extrapolate(this._nbSamples - 1);
                                }
                                return -1;
                            };
                            TimePolynomial.prototype.save = function () {
                                var builder = new java.lang.StringBuilder();
                                for (var i = 0; i < this._weights.length; i++) {
                                    if (i != 0) {
                                        builder.append(org.kevoree.modeling.api.polynomial.doublepolynomial.DoublePolynomialModel.sepW);
                                    }
                                    builder.append(this._weights[i] + "");
                                }
                                builder.append(org.kevoree.modeling.api.polynomial.doublepolynomial.DoublePolynomialModel.sepW);
                                builder.append(this._nbSamples);
                                builder.append(org.kevoree.modeling.api.polynomial.doublepolynomial.DoublePolynomialModel.sepW);
                                builder.append(this._samplingPeriod);
                                this._isDirty = false;
                                return builder.toString();
                            };
                            TimePolynomial.prototype.load = function (payload) {
                                var parts = payload.split(org.kevoree.modeling.api.polynomial.doublepolynomial.DoublePolynomialModel.sepW);
                                this._weights = new Array();
                                for (var i = 0; i < parts.length - 2; i++) {
                                    this._weights[i] = java.lang.Double.parseDouble(parts[i]);
                                }
                                this._nbSamples = java.lang.Integer.parseInt(parts[parts.length - 1]);
                                this._samplingPeriod = java.lang.Integer.parseInt(parts[parts.length - 2]);
                                this._isDirty = false;
                            };
                            TimePolynomial.prototype.isDirty = function () {
                                return this._isDirty;
                            };
                            TimePolynomial.toleratedErrorRatio = 10;
                            TimePolynomial.maxTimeDegree = 20;
                            return TimePolynomial;
                        })();
                        doublepolynomial.TimePolynomial = TimePolynomial;
                    })(doublepolynomial = polynomial.doublepolynomial || (polynomial.doublepolynomial = {}));
                    var simplepolynomial;
                    (function (simplepolynomial) {
                        var SimplePolynomialModel = (function () {
                            function SimplePolynomialModel(timeOrigin, toleratedError, maxDegree, prioritization) {
                                this.samples = new java.util.ArrayList();
                                this._lastIndex = -1;
                                this._isDirty = false;
                                this.timeOrigin = timeOrigin;
                                this.degradeFactor = 1;
                                this.prioritization = prioritization;
                                this.maxDegree = maxDegree;
                                this.toleratedError = toleratedError;
                            }
                            SimplePolynomialModel.prototype.getSamples = function () {
                                return this.samples;
                            };
                            SimplePolynomialModel.prototype.getDegree = function () {
                                if (this.weights == null) {
                                    return -1;
                                }
                                else {
                                    return this.weights.length - 1;
                                }
                            };
                            SimplePolynomialModel.prototype.getTimeOrigin = function () {
                                return this.timeOrigin;
                            };
                            SimplePolynomialModel.prototype.getMaxErr = function (degree, toleratedError, maxDegree, prioritization) {
                                var tol = toleratedError;
                                if (prioritization == org.kevoree.modeling.api.polynomial.util.Prioritization.HIGHDEGREES) {
                                    tol = toleratedError / Math.pow(2, maxDegree - degree);
                                }
                                else {
                                    if (prioritization == org.kevoree.modeling.api.polynomial.util.Prioritization.LOWDEGREES) {
                                        tol = toleratedError / Math.pow(2, degree + 0.5);
                                    }
                                    else {
                                        if (prioritization == org.kevoree.modeling.api.polynomial.util.Prioritization.SAMEPRIORITY) {
                                            tol = toleratedError * degree * 2 / (2 * maxDegree);
                                        }
                                    }
                                }
                                return tol;
                            };
                            SimplePolynomialModel.prototype.internal_feed = function (time, value) {
                                if (this.weights == null) {
                                    this.weights = new Array();
                                    this.weights[0] = value;
                                    this.timeOrigin = time;
                                    this.samples.add(new org.kevoree.modeling.api.polynomial.util.DataSample(time, value));
                                }
                            };
                            SimplePolynomialModel.prototype.maxError = function (computedWeights, time, value) {
                                var maxErr = 0;
                                var temp = 0;
                                var ds;
                                for (var i = 0; i < this.samples.size(); i++) {
                                    ds = this.samples.get(i);
                                    var val = this.internal_extrapolate(ds.time, computedWeights);
                                    temp = Math.abs(val - ds.value);
                                    if (temp > maxErr) {
                                        maxErr = temp;
                                    }
                                }
                                temp = Math.abs(this.internal_extrapolate(time, computedWeights) - value);
                                if (temp > maxErr) {
                                    maxErr = temp;
                                }
                                return maxErr;
                            };
                            SimplePolynomialModel.prototype.comparePolynome = function (p2, err) {
                                if (this.weights.length != p2.weights.length) {
                                    return false;
                                }
                                for (var i = 0; i < this.weights.length; i++) {
                                    if (Math.abs(this.weights[i] - this.weights[i]) > err) {
                                        return false;
                                    }
                                }
                                return true;
                            };
                            SimplePolynomialModel.prototype.internal_extrapolate = function (time, weights) {
                                var result = 0;
                                var t = (time - this.timeOrigin) / this.degradeFactor;
                                var power = 1;
                                for (var j = 0; j < weights.length; j++) {
                                    result += weights[j] * power;
                                    power = power * t;
                                }
                                return result;
                            };
                            SimplePolynomialModel.prototype.extrapolate = function (time) {
                                return this.internal_extrapolate(time, this.weights);
                            };
                            SimplePolynomialModel.prototype.insert = function (time, value) {
                                if (this.weights == null) {
                                    this.internal_feed(time, value);
                                    this._lastIndex = time;
                                    this._isDirty = true;
                                    return true;
                                }
                                var maxError = this.getMaxErr(this.getDegree(), this.toleratedError, this.maxDegree, this.prioritization);
                                if (Math.abs(this.extrapolate(time) - value) <= maxError) {
                                    this.samples.add(new org.kevoree.modeling.api.polynomial.util.DataSample(time, value));
                                    this._lastIndex = time;
                                    return true;
                                }
                                var deg = this.getDegree();
                                if (deg < this.maxDegree) {
                                    deg++;
                                    var ss = Math.min(deg * 2, this.samples.size());
                                    var times = new Array();
                                    var values = new Array();
                                    var current = this.samples.size();
                                    for (var i = 0; i < ss; i++) {
                                        var index = Math.round(i * current / ss);
                                        var ds = this.samples.get(index);
                                        times[i] = (ds.time - this.timeOrigin) / this.degradeFactor;
                                        values[i] = ds.value;
                                    }
                                    times[ss] = (time - this.timeOrigin) / this.degradeFactor;
                                    values[ss] = value;
                                    var pf = new org.kevoree.modeling.api.polynomial.util.PolynomialFitEjml(deg);
                                    pf.fit(times, values);
                                    if (this.maxError(pf.getCoef(), time, value) <= maxError) {
                                        this.weights = new Array();
                                        for (var i = 0; i < pf.getCoef().length; i++) {
                                            this.weights[i] = pf.getCoef()[i];
                                        }
                                        this.samples.add(new org.kevoree.modeling.api.polynomial.util.DataSample(time, value));
                                        this._lastIndex = time;
                                        this._isDirty = true;
                                        return true;
                                    }
                                }
                                return false;
                            };
                            SimplePolynomialModel.prototype.lastIndex = function () {
                                return this._lastIndex;
                            };
                            SimplePolynomialModel.prototype.save = function () {
                                var builder = new java.lang.StringBuilder();
                                for (var i = 0; i < this.weights.length; i++) {
                                    if (i != 0) {
                                        builder.append(SimplePolynomialModel.sep);
                                    }
                                    builder.append(this.weights[i] + "");
                                }
                                this._isDirty = false;
                                return builder.toString();
                            };
                            SimplePolynomialModel.prototype.load = function (payload) {
                                var elems = payload.split(SimplePolynomialModel.sep);
                                this.weights = new Array();
                                for (var i = 0; i < elems.length; i++) {
                                    this.weights[i] = java.lang.Double.parseDouble(elems[i]);
                                }
                                this._isDirty = false;
                            };
                            SimplePolynomialModel.prototype.isDirty = function () {
                                return this._isDirty;
                            };
                            SimplePolynomialModel.sep = "/";
                            return SimplePolynomialModel;
                        })();
                        simplepolynomial.SimplePolynomialModel = SimplePolynomialModel;
                    })(simplepolynomial = polynomial.simplepolynomial || (polynomial.simplepolynomial = {}));
                    var util;
                    (function (util) {
                        var AdjLinearSolverQr = (function () {
                            function AdjLinearSolverQr() {
                                this.maxRows = -1;
                                this.maxCols = -1;
                                this.decomposer = new org.kevoree.modeling.api.polynomial.util.QRDecompositionHouseholderColumn_D64();
                            }
                            AdjLinearSolverQr.prototype.setA = function (A) {
                                if (A.numRows > this.maxRows || A.numCols > this.maxCols) {
                                    this.setMaxSize(A.numRows, A.numCols);
                                }
                                this.numRows = A.numRows;
                                this.numCols = A.numCols;
                                if (!this.decomposer.decompose(A)) {
                                    return false;
                                }
                                this.Q.reshape(this.numRows, this.numRows, false);
                                this.R.reshape(this.numRows, this.numCols, false);
                                this.decomposer.getQ(this.Q, false);
                                this.decomposer.getR(this.R, false);
                                return true;
                            };
                            AdjLinearSolverQr.prototype.solveU = function (U, b, n) {
                                for (var i = n - 1; i >= 0; i--) {
                                    var sum = b[i];
                                    var indexU = i * n + i + 1;
                                    for (var j = i + 1; j < n; j++) {
                                        sum -= U[indexU++] * b[j];
                                    }
                                    b[i] = sum / U[i * n + i];
                                }
                            };
                            AdjLinearSolverQr.prototype.solve = function (B, X) {
                                var BnumCols = B.numCols;
                                this.Y.reshape(this.numRows, 1, false);
                                this.Z.reshape(this.numRows, 1, false);
                                for (var colB = 0; colB < BnumCols; colB++) {
                                    for (var i = 0; i < this.numRows; i++) {
                                        this.Y.data[i] = B.unsafe_get(i, colB);
                                    }
                                    org.kevoree.modeling.api.polynomial.util.DenseMatrix64F.multTransA(this.Q, this.Y, this.Z);
                                    this.solveU(this.R.data, this.Z.data, this.numCols);
                                    for (var i = 0; i < this.numCols; i++) {
                                        X.cset(i, colB, this.Z.data[i]);
                                    }
                                }
                            };
                            AdjLinearSolverQr.prototype.setMaxSize = function (maxRows, maxCols) {
                                maxRows += 5;
                                this.maxRows = maxRows;
                                this.maxCols = maxCols;
                                this.Q = new org.kevoree.modeling.api.polynomial.util.DenseMatrix64F(maxRows, maxRows);
                                this.R = new org.kevoree.modeling.api.polynomial.util.DenseMatrix64F(maxRows, maxCols);
                                this.Y = new org.kevoree.modeling.api.polynomial.util.DenseMatrix64F(maxRows, 1);
                                this.Z = new org.kevoree.modeling.api.polynomial.util.DenseMatrix64F(maxRows, 1);
                            };
                            return AdjLinearSolverQr;
                        })();
                        util.AdjLinearSolverQr = AdjLinearSolverQr;
                        var DataSample = (function () {
                            function DataSample(time, value) {
                                this.time = time;
                                this.value = value;
                            }
                            return DataSample;
                        })();
                        util.DataSample = DataSample;
                        var DenseMatrix64F = (function () {
                            function DenseMatrix64F(numRows, numCols) {
                                this.data = new Array();
                                this.numRows = numRows;
                                this.numCols = numCols;
                            }
                            DenseMatrix64F.multTransA_smallMV = function (A, B, C) {
                                var cIndex = 0;
                                for (var i = 0; i < A.numCols; i++) {
                                    var total = 0.0;
                                    var indexA = i;
                                    for (var j = 0; j < A.numRows; j++) {
                                        total += A.get(indexA) * B.get(j);
                                        indexA += A.numCols;
                                    }
                                    C.set(cIndex++, total);
                                }
                            };
                            DenseMatrix64F.multTransA_reorderMV = function (A, B, C) {
                                if (A.numRows == 0) {
                                    org.kevoree.modeling.api.polynomial.util.DenseMatrix64F.fill(C, 0);
                                    return;
                                }
                                var B_val = B.get(0);
                                for (var i = 0; i < A.numCols; i++) {
                                    C.set(i, A.get(i) * B_val);
                                }
                                var indexA = A.numCols;
                                for (var i = 1; i < A.numRows; i++) {
                                    B_val = B.get(i);
                                    for (var j = 0; j < A.numCols; j++) {
                                        C.plus(j, A.get(indexA++) * B_val);
                                    }
                                }
                            };
                            DenseMatrix64F.multTransA_reorderMM = function (a, b, c) {
                                if (a.numCols == 0 || a.numRows == 0) {
                                    org.kevoree.modeling.api.polynomial.util.DenseMatrix64F.fill(c, 0);
                                    return;
                                }
                                var valA;
                                for (var i = 0; i < a.numCols; i++) {
                                    var indexC_start = i * c.numCols;
                                    valA = a.get(i);
                                    var indexB = 0;
                                    var end = indexB + b.numCols;
                                    var indexC = indexC_start;
                                    while (indexB < end) {
                                        c.set(indexC++, valA * b.get(indexB++));
                                    }
                                    for (var k = 1; k < a.numRows; k++) {
                                        valA = a.unsafe_get(k, i);
                                        end = indexB + b.numCols;
                                        indexC = indexC_start;
                                        while (indexB < end) {
                                            c.plus(indexC++, valA * b.get(indexB++));
                                        }
                                    }
                                }
                            };
                            DenseMatrix64F.multTransA_smallMM = function (a, b, c) {
                                var cIndex = 0;
                                for (var i = 0; i < a.numCols; i++) {
                                    for (var j = 0; j < b.numCols; j++) {
                                        var indexA = i;
                                        var indexB = j;
                                        var end = indexB + b.numRows * b.numCols;
                                        var total = 0;
                                        for (; indexB < end; indexB += b.numCols) {
                                            total += a.get(indexA) * b.get(indexB);
                                            indexA += a.numCols;
                                        }
                                        c.set(cIndex++, total);
                                    }
                                }
                            };
                            DenseMatrix64F.multTransA = function (a, b, c) {
                                if (b.numCols == 1) {
                                    if (a.numCols >= org.kevoree.modeling.api.polynomial.util.DenseMatrix64F.MULT_COLUMN_SWITCH) {
                                        org.kevoree.modeling.api.polynomial.util.DenseMatrix64F.multTransA_reorderMV(a, b, c);
                                    }
                                    else {
                                        org.kevoree.modeling.api.polynomial.util.DenseMatrix64F.multTransA_smallMV(a, b, c);
                                    }
                                }
                                else {
                                    if (a.numCols >= org.kevoree.modeling.api.polynomial.util.DenseMatrix64F.MULT_COLUMN_SWITCH || b.numCols >= org.kevoree.modeling.api.polynomial.util.DenseMatrix64F.MULT_COLUMN_SWITCH) {
                                        org.kevoree.modeling.api.polynomial.util.DenseMatrix64F.multTransA_reorderMM(a, b, c);
                                    }
                                    else {
                                        org.kevoree.modeling.api.polynomial.util.DenseMatrix64F.multTransA_smallMM(a, b, c);
                                    }
                                }
                            };
                            DenseMatrix64F.setIdentity = function (mat) {
                                var width = mat.numRows < mat.numCols ? mat.numRows : mat.numCols;
                                java.util.Arrays.fill(mat.data, 0, mat.getNumElements(), 0);
                                var index = 0;
                                for (var i = 0; i < width; i++) {
                                    mat.data[index] = 1;
                                    index += mat.numCols + 1;
                                }
                            };
                            DenseMatrix64F.widentity = function (width) {
                                var ret = new org.kevoree.modeling.api.polynomial.util.DenseMatrix64F(width, width);
                                for (var i = 0; i < width; i++) {
                                    ret.cset(i, i, 1.0);
                                }
                                return ret;
                            };
                            DenseMatrix64F.identity = function (numRows, numCols) {
                                var ret = new org.kevoree.modeling.api.polynomial.util.DenseMatrix64F(numRows, numCols);
                                var small = numRows < numCols ? numRows : numCols;
                                for (var i = 0; i < small; i++) {
                                    ret.cset(i, i, 1.0);
                                }
                                return ret;
                            };
                            DenseMatrix64F.fill = function (a, value) {
                                java.util.Arrays.fill(a.data, 0, a.getNumElements(), value);
                            };
                            DenseMatrix64F.prototype.get = function (index) {
                                return this.data[index];
                            };
                            DenseMatrix64F.prototype.set = function (index, val) {
                                return this.data[index] = val;
                            };
                            DenseMatrix64F.prototype.plus = function (index, val) {
                                return this.data[index] += val;
                            };
                            DenseMatrix64F.prototype.reshape = function (numRows, numCols, saveValues) {
                                if (this.data.length < numRows * numCols) {
                                    var d = new Array();
                                    if (saveValues) {
                                        System.arraycopy(this.data, 0, d, 0, this.getNumElements());
                                    }
                                    this.data = d;
                                }
                                this.numRows = numRows;
                                this.numCols = numCols;
                            };
                            DenseMatrix64F.prototype.cset = function (row, col, value) {
                                this.data[row * this.numCols + col] = value;
                            };
                            DenseMatrix64F.prototype.unsafe_get = function (row, col) {
                                return this.data[row * this.numCols + col];
                            };
                            DenseMatrix64F.prototype.getNumElements = function () {
                                return this.numRows * this.numCols;
                            };
                            DenseMatrix64F.MULT_COLUMN_SWITCH = 15;
                            return DenseMatrix64F;
                        })();
                        util.DenseMatrix64F = DenseMatrix64F;
                        var PolynomialFitEjml = (function () {
                            function PolynomialFitEjml(degree) {
                                this.coef = new org.kevoree.modeling.api.polynomial.util.DenseMatrix64F(degree + 1, 1);
                                this.A = new org.kevoree.modeling.api.polynomial.util.DenseMatrix64F(1, degree + 1);
                                this.y = new org.kevoree.modeling.api.polynomial.util.DenseMatrix64F(1, 1);
                                this.solver = new org.kevoree.modeling.api.polynomial.util.AdjLinearSolverQr();
                            }
                            PolynomialFitEjml.prototype.getCoef = function () {
                                return this.coef.data;
                            };
                            PolynomialFitEjml.prototype.fit = function (samplePoints, observations) {
                                this.y.reshape(observations.length, 1, false);
                                System.arraycopy(observations, 0, this.y.data, 0, observations.length);
                                this.A.reshape(this.y.numRows, this.coef.numRows, false);
                                for (var i = 0; i < observations.length; i++) {
                                    var obs = 1;
                                    for (var j = 0; j < this.coef.numRows; j++) {
                                        this.A.cset(i, j, obs);
                                        obs *= samplePoints[i];
                                    }
                                }
                                this.solver.setA(this.A);
                                this.solver.solve(this.y, this.coef);
                            };
                            return PolynomialFitEjml;
                        })();
                        util.PolynomialFitEjml = PolynomialFitEjml;
                        var Prioritization = (function () {
                            function Prioritization() {
                            }
                            Prioritization.prototype.equals = function (other) {
                                return this == other;
                            };
                            Prioritization.values = function () {
                                return Prioritization._PrioritizationVALUES;
                            };
                            Prioritization.SAMEPRIORITY = new Prioritization();
                            Prioritization.HIGHDEGREES = new Prioritization();
                            Prioritization.LOWDEGREES = new Prioritization();
                            Prioritization._PrioritizationVALUES = [
                                Prioritization.SAMEPRIORITY,
                                Prioritization.HIGHDEGREES,
                                Prioritization.LOWDEGREES
                            ];
                            return Prioritization;
                        })();
                        util.Prioritization = Prioritization;
                        var QRDecompositionHouseholderColumn_D64 = (function () {
                            function QRDecompositionHouseholderColumn_D64() {
                            }
                            QRDecompositionHouseholderColumn_D64.prototype.setExpectedMaxSize = function (numRows, numCols) {
                                this.numCols = numCols;
                                this.numRows = numRows;
                                this.minLength = Math.min(numCols, numRows);
                                var maxLength = Math.max(numCols, numRows);
                                if (this.dataQR == null || this.dataQR.length < numCols || this.dataQR[0].length < numRows) {
                                    this.dataQR = new Array(new Array());
                                    for (var i = 0; i < numCols; i++) {
                                        this.dataQR[i] = new Array();
                                    }
                                    this.v = new Array();
                                    this.gammas = new Array();
                                }
                                if (this.v.length < maxLength) {
                                    this.v = new Array();
                                }
                                if (this.gammas.length < this.minLength) {
                                    this.gammas = new Array();
                                }
                            };
                            QRDecompositionHouseholderColumn_D64.prototype.getQ = function (Q, compact) {
                                if (compact) {
                                    if (Q == null) {
                                        Q = org.kevoree.modeling.api.polynomial.util.DenseMatrix64F.identity(this.numRows, this.minLength);
                                    }
                                    else {
                                        org.kevoree.modeling.api.polynomial.util.DenseMatrix64F.setIdentity(Q);
                                    }
                                }
                                else {
                                    if (Q == null) {
                                        Q = org.kevoree.modeling.api.polynomial.util.DenseMatrix64F.widentity(this.numRows);
                                    }
                                    else {
                                        org.kevoree.modeling.api.polynomial.util.DenseMatrix64F.setIdentity(Q);
                                    }
                                }
                                for (var j = this.minLength - 1; j >= 0; j--) {
                                    var u = this.dataQR[j];
                                    var vv = u[j];
                                    u[j] = 1;
                                    org.kevoree.modeling.api.polynomial.util.QRDecompositionHouseholderColumn_D64.rank1UpdateMultR(Q, u, this.gammas[j], j, j, this.numRows, this.v);
                                    u[j] = vv;
                                }
                                return Q;
                            };
                            QRDecompositionHouseholderColumn_D64.prototype.getR = function (R, compact) {
                                if (R == null) {
                                    if (compact) {
                                        R = new org.kevoree.modeling.api.polynomial.util.DenseMatrix64F(this.minLength, this.numCols);
                                    }
                                    else {
                                        R = new org.kevoree.modeling.api.polynomial.util.DenseMatrix64F(this.numRows, this.numCols);
                                    }
                                }
                                else {
                                    for (var i = 0; i < R.numRows; i++) {
                                        var min = Math.min(i, R.numCols);
                                        for (var j = 0; j < min; j++) {
                                            R.cset(i, j, 0);
                                        }
                                    }
                                }
                                for (var j = 0; j < this.numCols; j++) {
                                    var colR = this.dataQR[j];
                                    var l = Math.min(j, this.numRows - 1);
                                    for (var i = 0; i <= l; i++) {
                                        var val = colR[i];
                                        R.cset(i, j, val);
                                    }
                                }
                                return R;
                            };
                            QRDecompositionHouseholderColumn_D64.prototype.decompose = function (A) {
                                this.setExpectedMaxSize(A.numRows, A.numCols);
                                this.convertToColumnMajor(A);
                                this.error = false;
                                for (var j = 0; j < this.minLength; j++) {
                                    this.householder(j);
                                    this.updateA(j);
                                }
                                return !this.error;
                            };
                            QRDecompositionHouseholderColumn_D64.prototype.convertToColumnMajor = function (A) {
                                for (var x = 0; x < this.numCols; x++) {
                                    var colQ = this.dataQR[x];
                                    for (var y = 0; y < this.numRows; y++) {
                                        colQ[y] = A.data[y * this.numCols + x];
                                    }
                                }
                            };
                            QRDecompositionHouseholderColumn_D64.prototype.householder = function (j) {
                                var u = this.dataQR[j];
                                var max = org.kevoree.modeling.api.polynomial.util.QRDecompositionHouseholderColumn_D64.findMax(u, j, this.numRows - j);
                                if (max == 0.0) {
                                    this.gamma = 0;
                                    this.error = true;
                                }
                                else {
                                    this.tau = org.kevoree.modeling.api.polynomial.util.QRDecompositionHouseholderColumn_D64.computeTauAndDivide(j, this.numRows, u, max);
                                    var u_0 = u[j] + this.tau;
                                    org.kevoree.modeling.api.polynomial.util.QRDecompositionHouseholderColumn_D64.divideElements(j + 1, this.numRows, u, u_0);
                                    this.gamma = u_0 / this.tau;
                                    this.tau *= max;
                                    u[j] = -this.tau;
                                }
                                this.gammas[j] = this.gamma;
                            };
                            QRDecompositionHouseholderColumn_D64.prototype.updateA = function (w) {
                                var u = this.dataQR[w];
                                for (var j = w + 1; j < this.numCols; j++) {
                                    var colQ = this.dataQR[j];
                                    var val = colQ[w];
                                    for (var k = w + 1; k < this.numRows; k++) {
                                        val += u[k] * colQ[k];
                                    }
                                    val *= this.gamma;
                                    colQ[w] -= val;
                                    for (var i = w + 1; i < this.numRows; i++) {
                                        colQ[i] -= u[i] * val;
                                    }
                                }
                            };
                            QRDecompositionHouseholderColumn_D64.findMax = function (u, startU, length) {
                                var max = -1;
                                var index = startU;
                                var stopIndex = startU + length;
                                for (; index < stopIndex; index++) {
                                    var val = u[index];
                                    val = (val < 0.0) ? -val : val;
                                    if (val > max) {
                                        max = val;
                                    }
                                }
                                return max;
                            };
                            QRDecompositionHouseholderColumn_D64.divideElements = function (j, numRows, u, u_0) {
                                for (var i = j; i < numRows; i++) {
                                    u[i] /= u_0;
                                }
                            };
                            QRDecompositionHouseholderColumn_D64.computeTauAndDivide = function (j, numRows, u, max) {
                                var tau = 0;
                                for (var i = j; i < numRows; i++) {
                                    var d = u[i] /= max;
                                    tau += d * d;
                                }
                                tau = Math.sqrt(tau);
                                if (u[j] < 0) {
                                    tau = -tau;
                                }
                                return tau;
                            };
                            QRDecompositionHouseholderColumn_D64.rank1UpdateMultR = function (A, u, gamma, colA0, w0, w1, _temp) {
                                for (var i = colA0; i < A.numCols; i++) {
                                    _temp[i] = u[w0] * A.data[w0 * A.numCols + i];
                                }
                                for (var k = w0 + 1; k < w1; k++) {
                                    var indexA = k * A.numCols + colA0;
                                    var valU = u[k];
                                    for (var i = colA0; i < A.numCols; i++) {
                                        _temp[i] += valU * A.data[indexA++];
                                    }
                                }
                                for (var i = colA0; i < A.numCols; i++) {
                                    _temp[i] *= gamma;
                                }
                                for (var i = w0; i < w1; i++) {
                                    var valU = u[i];
                                    var indexA = i * A.numCols + colA0;
                                    for (var j = colA0; j < A.numCols; j++) {
                                        A.data[indexA++] -= valU * _temp[j];
                                    }
                                }
                            };
                            return QRDecompositionHouseholderColumn_D64;
                        })();
                        util.QRDecompositionHouseholderColumn_D64 = QRDecompositionHouseholderColumn_D64;
                    })(util = polynomial.util || (polynomial.util = {}));
                })(polynomial = api.polynomial || (api.polynomial = {}));
                var rbtree;
                (function (rbtree) {
                    var Color = (function () {
                        function Color() {
                        }
                        Color.prototype.equals = function (other) {
                            return this == other;
                        };
                        Color.values = function () {
                            return Color._ColorVALUES;
                        };
                        Color.RED = new Color();
                        Color.BLACK = new Color();
                        Color._ColorVALUES = [
                            Color.RED,
                            Color.BLACK
                        ];
                        return Color;
                    })();
                    rbtree.Color = Color;
                    var IndexRBTree = (function () {
                        function IndexRBTree() {
                            this.root = null;
                            this._size = 0;
                            this._previousOrEqualsCacheKeys = null;
                            this._previousOrEqualsCacheValues = null;
                            this._counter = 0;
                            this._dirty = false;
                            this._previousOrEqualsCacheKeys = new Array();
                            this._previousOrEqualsCacheValues = new Array();
                            this._nextCacheElem = 0;
                        }
                        IndexRBTree.prototype.size = function () {
                            return this._size;
                        };
                        IndexRBTree.prototype.counter = function () {
                            return this._counter;
                        };
                        IndexRBTree.prototype.inc = function () {
                            this._counter++;
                        };
                        IndexRBTree.prototype.dec = function () {
                            this._counter--;
                        };
                        IndexRBTree.prototype.tryPreviousOrEqualsCache = function (key) {
                            if (this._previousOrEqualsCacheKeys != null && this._previousOrEqualsCacheValues != null) {
                                for (var i = 0; i < this._nextCacheElem; i++) {
                                    if (this._previousOrEqualsCacheKeys[i] != null && key == this._previousOrEqualsCacheKeys[i]) {
                                        return this._previousOrEqualsCacheValues[i];
                                    }
                                }
                                return null;
                            }
                            else {
                                return null;
                            }
                        };
                        IndexRBTree.prototype.resetCache = function () {
                            this._nextCacheElem = 0;
                        };
                        IndexRBTree.prototype.putInPreviousOrEqualsCache = function (key, resolved) {
                            if (this._nextCacheElem == org.kevoree.modeling.api.KConfig.TREE_CACHE_SIZE) {
                                this._nextCacheElem = 0;
                            }
                            this._previousOrEqualsCacheKeys[this._nextCacheElem] = key;
                            this._previousOrEqualsCacheValues[this._nextCacheElem] = resolved;
                            this._nextCacheElem++;
                        };
                        IndexRBTree.prototype.isDirty = function () {
                            return this._dirty;
                        };
                        IndexRBTree.prototype.setClean = function () {
                            this._dirty = false;
                        };
                        IndexRBTree.prototype.serialize = function () {
                            var builder = new java.lang.StringBuilder();
                            builder.append(this._size);
                            if (this.root != null) {
                                this.root.serialize(builder);
                            }
                            return builder.toString();
                        };
                        IndexRBTree.prototype.toString = function () {
                            return this.serialize();
                        };
                        IndexRBTree.prototype.unserialize = function (key, payload, metaModel) {
                            if (payload == null || payload.length == 0) {
                                return;
                            }
                            var i = 0;
                            var buffer = new java.lang.StringBuilder();
                            var ch = payload.charAt(i);
                            while (i < payload.length && ch != '|') {
                                buffer.append(ch);
                                i = i + 1;
                                ch = payload.charAt(i);
                            }
                            this._size = java.lang.Integer.parseInt(buffer.toString());
                            var ctx = new org.kevoree.modeling.api.rbtree.TreeReaderContext();
                            ctx.index = i;
                            ctx.payload = payload;
                            this.root = org.kevoree.modeling.api.rbtree.TreeNode.unserialize(ctx);
                            this.resetCache();
                        };
                        IndexRBTree.prototype.previousOrEqual = function (key) {
                            var cachedVal = this.tryPreviousOrEqualsCache(key);
                            if (cachedVal != null) {
                                return cachedVal;
                            }
                            var p = this.root;
                            if (p == null) {
                                return null;
                            }
                            while (p != null) {
                                if (key == p.key) {
                                    this.putInPreviousOrEqualsCache(key, p);
                                    return p;
                                }
                                if (key > p.key) {
                                    if (p.getRight() != null) {
                                        p = p.getRight();
                                    }
                                    else {
                                        this.putInPreviousOrEqualsCache(key, p);
                                        return p;
                                    }
                                }
                                else {
                                    if (p.getLeft() != null) {
                                        p = p.getLeft();
                                    }
                                    else {
                                        var parent = p.getParent();
                                        var ch = p;
                                        while (parent != null && ch == parent.getLeft()) {
                                            ch = parent;
                                            parent = parent.getParent();
                                        }
                                        this.putInPreviousOrEqualsCache(key, parent);
                                        return parent;
                                    }
                                }
                            }
                            return null;
                        };
                        IndexRBTree.prototype.nextOrEqual = function (key) {
                            var p = this.root;
                            if (p == null) {
                                return null;
                            }
                            while (p != null) {
                                if (key == p.key) {
                                    return p;
                                }
                                if (key < p.key) {
                                    if (p.getLeft() != null) {
                                        p = p.getLeft();
                                    }
                                    else {
                                        return p;
                                    }
                                }
                                else {
                                    if (p.getRight() != null) {
                                        p = p.getRight();
                                    }
                                    else {
                                        var parent = p.getParent();
                                        var ch = p;
                                        while (parent != null && ch == parent.getRight()) {
                                            ch = parent;
                                            parent = parent.getParent();
                                        }
                                        return parent;
                                    }
                                }
                            }
                            return null;
                        };
                        IndexRBTree.prototype.previous = function (key) {
                            var p = this.root;
                            if (p == null) {
                                return null;
                            }
                            while (p != null) {
                                if (key < p.key) {
                                    if (p.getLeft() != null) {
                                        p = p.getLeft();
                                    }
                                    else {
                                        return p.previous();
                                    }
                                }
                                else {
                                    if (key > p.key) {
                                        if (p.getRight() != null) {
                                            p = p.getRight();
                                        }
                                        else {
                                            return p;
                                        }
                                    }
                                    else {
                                        return p.previous();
                                    }
                                }
                            }
                            return null;
                        };
                        IndexRBTree.prototype.next = function (key) {
                            var p = this.root;
                            if (p == null) {
                                return null;
                            }
                            while (p != null) {
                                if (key < p.key) {
                                    if (p.getLeft() != null) {
                                        p = p.getLeft();
                                    }
                                    else {
                                        return p;
                                    }
                                }
                                else {
                                    if (key > p.key) {
                                        if (p.getRight() != null) {
                                            p = p.getRight();
                                        }
                                        else {
                                            return p.next();
                                        }
                                    }
                                    else {
                                        return p.next();
                                    }
                                }
                            }
                            return null;
                        };
                        IndexRBTree.prototype.first = function () {
                            var p = this.root;
                            if (p == null) {
                                return null;
                            }
                            while (p != null) {
                                if (p.getLeft() != null) {
                                    p = p.getLeft();
                                }
                                else {
                                    return p;
                                }
                            }
                            return null;
                        };
                        IndexRBTree.prototype.last = function () {
                            var p = this.root;
                            if (p == null) {
                                return null;
                            }
                            while (p != null) {
                                if (p.getRight() != null) {
                                    p = p.getRight();
                                }
                                else {
                                    return p;
                                }
                            }
                            return null;
                        };
                        IndexRBTree.prototype.lookup = function (key) {
                            var n = this.root;
                            if (n == null) {
                                return null;
                            }
                            while (n != null) {
                                if (key == n.key) {
                                    return n;
                                }
                                else {
                                    if (key < n.key) {
                                        n = n.getLeft();
                                    }
                                    else {
                                        n = n.getRight();
                                    }
                                }
                            }
                            return n;
                        };
                        IndexRBTree.prototype.rotateLeft = function (n) {
                            var r = n.getRight();
                            this.replaceNode(n, r);
                            n.setRight(r.getLeft());
                            if (r.getLeft() != null) {
                                r.getLeft().setParent(n);
                            }
                            r.setLeft(n);
                            n.setParent(r);
                        };
                        IndexRBTree.prototype.rotateRight = function (n) {
                            var l = n.getLeft();
                            this.replaceNode(n, l);
                            n.setLeft(l.getRight());
                            if (l.getRight() != null) {
                                l.getRight().setParent(n);
                            }
                            l.setRight(n);
                            n.setParent(l);
                        };
                        IndexRBTree.prototype.replaceNode = function (oldn, newn) {
                            if (oldn.getParent() == null) {
                                this.root = newn;
                            }
                            else {
                                if (oldn == oldn.getParent().getLeft()) {
                                    oldn.getParent().setLeft(newn);
                                }
                                else {
                                    oldn.getParent().setRight(newn);
                                }
                            }
                            if (newn != null) {
                                newn.setParent(oldn.getParent());
                            }
                        };
                        IndexRBTree.prototype.insert = function (key) {
                            this.resetCache();
                            this._dirty = true;
                            var insertedNode = new org.kevoree.modeling.api.rbtree.TreeNode(key, org.kevoree.modeling.api.rbtree.Color.RED, null, null);
                            if (this.root == null) {
                                this._size++;
                                this.root = insertedNode;
                            }
                            else {
                                var n = this.root;
                                while (true) {
                                    if (key == n.key) {
                                        return;
                                    }
                                    else {
                                        if (key < n.key) {
                                            if (n.getLeft() == null) {
                                                n.setLeft(insertedNode);
                                                this._size++;
                                                break;
                                            }
                                            else {
                                                n = n.getLeft();
                                            }
                                        }
                                        else {
                                            if (n.getRight() == null) {
                                                n.setRight(insertedNode);
                                                this._size++;
                                                break;
                                            }
                                            else {
                                                n = n.getRight();
                                            }
                                        }
                                    }
                                }
                                insertedNode.setParent(n);
                            }
                            this.insertCase1(insertedNode);
                        };
                        IndexRBTree.prototype.insertCase1 = function (n) {
                            if (n.getParent() == null) {
                                n.color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                            }
                            else {
                                this.insertCase2(n);
                            }
                        };
                        IndexRBTree.prototype.insertCase2 = function (n) {
                            if (this.nodeColor(n.getParent()) == org.kevoree.modeling.api.rbtree.Color.BLACK) {
                                return;
                            }
                            else {
                                this.insertCase3(n);
                            }
                        };
                        IndexRBTree.prototype.insertCase3 = function (n) {
                            if (this.nodeColor(n.uncle()) == org.kevoree.modeling.api.rbtree.Color.RED) {
                                n.getParent().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                                n.uncle().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                                n.grandparent().color = org.kevoree.modeling.api.rbtree.Color.RED;
                                this.insertCase1(n.grandparent());
                            }
                            else {
                                this.insertCase4(n);
                            }
                        };
                        IndexRBTree.prototype.insertCase4 = function (n_n) {
                            var n = n_n;
                            if (n == n.getParent().getRight() && n.getParent() == n.grandparent().getLeft()) {
                                this.rotateLeft(n.getParent());
                                n = n.getLeft();
                            }
                            else {
                                if (n == n.getParent().getLeft() && n.getParent() == n.grandparent().getRight()) {
                                    this.rotateRight(n.getParent());
                                    n = n.getRight();
                                }
                            }
                            this.insertCase5(n);
                        };
                        IndexRBTree.prototype.insertCase5 = function (n) {
                            n.getParent().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                            n.grandparent().color = org.kevoree.modeling.api.rbtree.Color.RED;
                            if (n == n.getParent().getLeft() && n.getParent() == n.grandparent().getLeft()) {
                                this.rotateRight(n.grandparent());
                            }
                            else {
                                this.rotateLeft(n.grandparent());
                            }
                        };
                        IndexRBTree.prototype.delete = function (key) {
                            var n = this.lookup(key);
                            if (n == null) {
                                return;
                            }
                            else {
                                this._size--;
                                if (n.getLeft() != null && n.getRight() != null) {
                                    var pred = n.getLeft();
                                    while (pred.getRight() != null) {
                                        pred = pred.getRight();
                                    }
                                    n.key = pred.key;
                                    n = pred;
                                }
                                var child;
                                if (n.getRight() == null) {
                                    child = n.getLeft();
                                }
                                else {
                                    child = n.getRight();
                                }
                                if (this.nodeColor(n) == org.kevoree.modeling.api.rbtree.Color.BLACK) {
                                    n.color = this.nodeColor(child);
                                    this.deleteCase1(n);
                                }
                                this.replaceNode(n, child);
                            }
                        };
                        IndexRBTree.prototype.deleteCase1 = function (n) {
                            if (n.getParent() == null) {
                                return;
                            }
                            else {
                                this.deleteCase2(n);
                            }
                        };
                        IndexRBTree.prototype.deleteCase2 = function (n) {
                            if (this.nodeColor(n.sibling()) == org.kevoree.modeling.api.rbtree.Color.RED) {
                                n.getParent().color = org.kevoree.modeling.api.rbtree.Color.RED;
                                n.sibling().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                                if (n == n.getParent().getLeft()) {
                                    this.rotateLeft(n.getParent());
                                }
                                else {
                                    this.rotateRight(n.getParent());
                                }
                            }
                            this.deleteCase3(n);
                        };
                        IndexRBTree.prototype.deleteCase3 = function (n) {
                            if (this.nodeColor(n.getParent()) == org.kevoree.modeling.api.rbtree.Color.BLACK && this.nodeColor(n.sibling()) == org.kevoree.modeling.api.rbtree.Color.BLACK && this.nodeColor(n.sibling().getLeft()) == org.kevoree.modeling.api.rbtree.Color.BLACK && this.nodeColor(n.sibling().getRight()) == org.kevoree.modeling.api.rbtree.Color.BLACK) {
                                n.sibling().color = org.kevoree.modeling.api.rbtree.Color.RED;
                                this.deleteCase1(n.getParent());
                            }
                            else {
                                this.deleteCase4(n);
                            }
                        };
                        IndexRBTree.prototype.deleteCase4 = function (n) {
                            if (this.nodeColor(n.getParent()) == org.kevoree.modeling.api.rbtree.Color.RED && this.nodeColor(n.sibling()) == org.kevoree.modeling.api.rbtree.Color.BLACK && this.nodeColor(n.sibling().getLeft()) == org.kevoree.modeling.api.rbtree.Color.BLACK && this.nodeColor(n.sibling().getRight()) == org.kevoree.modeling.api.rbtree.Color.BLACK) {
                                n.sibling().color = org.kevoree.modeling.api.rbtree.Color.RED;
                                n.getParent().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                            }
                            else {
                                this.deleteCase5(n);
                            }
                        };
                        IndexRBTree.prototype.deleteCase5 = function (n) {
                            if (n == n.getParent().getLeft() && this.nodeColor(n.sibling()) == org.kevoree.modeling.api.rbtree.Color.BLACK && this.nodeColor(n.sibling().getLeft()) == org.kevoree.modeling.api.rbtree.Color.RED && this.nodeColor(n.sibling().getRight()) == org.kevoree.modeling.api.rbtree.Color.BLACK) {
                                n.sibling().color = org.kevoree.modeling.api.rbtree.Color.RED;
                                n.sibling().getLeft().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                                this.rotateRight(n.sibling());
                            }
                            else {
                                if (n == n.getParent().getRight() && this.nodeColor(n.sibling()) == org.kevoree.modeling.api.rbtree.Color.BLACK && this.nodeColor(n.sibling().getRight()) == org.kevoree.modeling.api.rbtree.Color.RED && this.nodeColor(n.sibling().getLeft()) == org.kevoree.modeling.api.rbtree.Color.BLACK) {
                                    n.sibling().color = org.kevoree.modeling.api.rbtree.Color.RED;
                                    n.sibling().getRight().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                                    this.rotateLeft(n.sibling());
                                }
                            }
                            this.deleteCase6(n);
                        };
                        IndexRBTree.prototype.deleteCase6 = function (n) {
                            n.sibling().color = this.nodeColor(n.getParent());
                            n.getParent().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                            if (n == n.getParent().getLeft()) {
                                n.sibling().getRight().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                                this.rotateLeft(n.getParent());
                            }
                            else {
                                n.sibling().getLeft().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                                this.rotateRight(n.getParent());
                            }
                        };
                        IndexRBTree.prototype.nodeColor = function (n) {
                            if (n == null) {
                                return org.kevoree.modeling.api.rbtree.Color.BLACK;
                            }
                            else {
                                return n.color;
                            }
                        };
                        return IndexRBTree;
                    })();
                    rbtree.IndexRBTree = IndexRBTree;
                    var LongRBTree = (function () {
                        function LongRBTree() {
                            this.root = null;
                            this._size = 0;
                            this._dirty = false;
                            this._counter = 0;
                            this._previousOrEqualsCacheKeys = null;
                            this._previousOrEqualsCacheValues = null;
                            this._lookupCacheKeys = null;
                            this._lookupCacheValues = null;
                            this._lookupCacheKeys = new Array();
                            this._lookupCacheValues = new Array();
                            this._previousOrEqualsCacheKeys = new Array();
                            this._previousOrEqualsCacheValues = new Array();
                            this._previousOrEqualsNextCacheElem = 0;
                            this._lookupNextCacheElem = 0;
                        }
                        LongRBTree.prototype.size = function () {
                            return this._size;
                        };
                        LongRBTree.prototype.counter = function () {
                            return this._counter;
                        };
                        LongRBTree.prototype.inc = function () {
                            this._counter++;
                        };
                        LongRBTree.prototype.dec = function () {
                            this._counter--;
                        };
                        LongRBTree.prototype.toString = function () {
                            return this.serialize();
                        };
                        LongRBTree.prototype.isDirty = function () {
                            return this._dirty;
                        };
                        LongRBTree.prototype.serialize = function () {
                            var builder = new java.lang.StringBuilder();
                            builder.append(this._size);
                            if (this.root != null) {
                                this.root.serialize(builder);
                            }
                            return builder.toString();
                        };
                        LongRBTree.prototype.tryPreviousOrEqualsCache = function (key) {
                            if (this._previousOrEqualsCacheKeys != null && this._previousOrEqualsCacheValues != null) {
                                for (var i = 0; i < this._previousOrEqualsNextCacheElem; i++) {
                                    if (this._previousOrEqualsCacheKeys[i] != null && key == this._previousOrEqualsCacheKeys[i]) {
                                        return this._previousOrEqualsCacheValues[i];
                                    }
                                }
                            }
                            return null;
                        };
                        LongRBTree.prototype.tryLookupCache = function (key) {
                            if (this._lookupCacheKeys != null && this._lookupCacheValues != null) {
                                for (var i = 0; i < this._lookupNextCacheElem; i++) {
                                    if (this._lookupCacheKeys[i] != null && key == this._lookupCacheKeys[i]) {
                                        return this._lookupCacheValues[i];
                                    }
                                }
                            }
                            return null;
                        };
                        LongRBTree.prototype.resetCache = function () {
                            this._previousOrEqualsNextCacheElem = 0;
                            this._lookupNextCacheElem = 0;
                        };
                        LongRBTree.prototype.putInPreviousOrEqualsCache = function (key, resolved) {
                            if (this._previousOrEqualsNextCacheElem == org.kevoree.modeling.api.KConfig.TREE_CACHE_SIZE) {
                                this._previousOrEqualsNextCacheElem = 0;
                            }
                            this._previousOrEqualsCacheKeys[this._previousOrEqualsNextCacheElem] = key;
                            this._previousOrEqualsCacheValues[this._previousOrEqualsNextCacheElem] = resolved;
                            this._previousOrEqualsNextCacheElem++;
                        };
                        LongRBTree.prototype.putInLookupCache = function (key, resolved) {
                            if (this._lookupNextCacheElem == org.kevoree.modeling.api.KConfig.TREE_CACHE_SIZE) {
                                this._lookupNextCacheElem = 0;
                            }
                            this._lookupCacheKeys[this._lookupNextCacheElem] = key;
                            this._lookupCacheValues[this._lookupNextCacheElem] = resolved;
                            this._lookupNextCacheElem++;
                        };
                        LongRBTree.prototype.setClean = function () {
                            this._dirty = false;
                        };
                        LongRBTree.prototype.unserialize = function (key, payload, metaModel) {
                            if (payload == null || payload.length == 0) {
                                return;
                            }
                            var i = 0;
                            var buffer = new java.lang.StringBuilder();
                            var ch = payload.charAt(i);
                            while (i < payload.length && ch != '|') {
                                buffer.append(ch);
                                i = i + 1;
                                ch = payload.charAt(i);
                            }
                            this._size = java.lang.Integer.parseInt(buffer.toString());
                            var ctx = new org.kevoree.modeling.api.rbtree.TreeReaderContext();
                            ctx.index = i;
                            ctx.payload = payload;
                            ctx.buffer = new Array();
                            this.root = org.kevoree.modeling.api.rbtree.LongTreeNode.unserialize(ctx);
                            this._dirty = false;
                            this.resetCache();
                        };
                        LongRBTree.prototype.lookup = function (key) {
                            var n = this.tryLookupCache(key);
                            if (n != null) {
                                return n;
                            }
                            n = this.root;
                            if (n == null) {
                                return null;
                            }
                            while (n != null) {
                                if (key == n.key) {
                                    this.putInLookupCache(key, n);
                                    return n;
                                }
                                else {
                                    if (key < n.key) {
                                        n = n.getLeft();
                                    }
                                    else {
                                        n = n.getRight();
                                    }
                                }
                            }
                            this.putInLookupCache(key, null);
                            return n;
                        };
                        LongRBTree.prototype.previousOrEqual = function (key) {
                            var p = this.tryPreviousOrEqualsCache(key);
                            if (p != null) {
                                return p;
                            }
                            p = this.root;
                            if (p == null) {
                                return null;
                            }
                            while (p != null) {
                                if (key == p.key) {
                                    this.putInPreviousOrEqualsCache(key, p);
                                    return p;
                                }
                                if (key > p.key) {
                                    if (p.getRight() != null) {
                                        p = p.getRight();
                                    }
                                    else {
                                        this.putInPreviousOrEqualsCache(key, p);
                                        return p;
                                    }
                                }
                                else {
                                    if (p.getLeft() != null) {
                                        p = p.getLeft();
                                    }
                                    else {
                                        var parent = p.getParent();
                                        var ch = p;
                                        while (parent != null && ch == parent.getLeft()) {
                                            ch = parent;
                                            parent = parent.getParent();
                                        }
                                        this.putInPreviousOrEqualsCache(key, parent);
                                        return parent;
                                    }
                                }
                            }
                            return null;
                        };
                        LongRBTree.prototype.nextOrEqual = function (key) {
                            var p = this.root;
                            if (p == null) {
                                return null;
                            }
                            while (p != null) {
                                if (key == p.key) {
                                    return p;
                                }
                                if (key < p.key) {
                                    if (p.getLeft() != null) {
                                        p = p.getLeft();
                                    }
                                    else {
                                        return p;
                                    }
                                }
                                else {
                                    if (p.getRight() != null) {
                                        p = p.getRight();
                                    }
                                    else {
                                        var parent = p.getParent();
                                        var ch = p;
                                        while (parent != null && ch == parent.getRight()) {
                                            ch = parent;
                                            parent = parent.getParent();
                                        }
                                        return parent;
                                    }
                                }
                            }
                            return null;
                        };
                        LongRBTree.prototype.previous = function (key) {
                            var p = this.root;
                            if (p == null) {
                                return null;
                            }
                            while (p != null) {
                                if (key < p.key) {
                                    if (p.getLeft() != null) {
                                        p = p.getLeft();
                                    }
                                    else {
                                        return p.previous();
                                    }
                                }
                                else {
                                    if (key > p.key) {
                                        if (p.getRight() != null) {
                                            p = p.getRight();
                                        }
                                        else {
                                            return p;
                                        }
                                    }
                                    else {
                                        return p.previous();
                                    }
                                }
                            }
                            return null;
                        };
                        LongRBTree.prototype.next = function (key) {
                            var p = this.root;
                            if (p == null) {
                                return null;
                            }
                            while (p != null) {
                                if (key < p.key) {
                                    if (p.getLeft() != null) {
                                        p = p.getLeft();
                                    }
                                    else {
                                        return p;
                                    }
                                }
                                else {
                                    if (key > p.key) {
                                        if (p.getRight() != null) {
                                            p = p.getRight();
                                        }
                                        else {
                                            return p.next();
                                        }
                                    }
                                    else {
                                        return p.next();
                                    }
                                }
                            }
                            return null;
                        };
                        LongRBTree.prototype.first = function () {
                            var p = this.root;
                            if (p == null) {
                                return null;
                            }
                            while (p != null) {
                                if (p.getLeft() != null) {
                                    p = p.getLeft();
                                }
                                else {
                                    return p;
                                }
                            }
                            return null;
                        };
                        LongRBTree.prototype.last = function () {
                            var p = this.root;
                            if (p == null) {
                                return null;
                            }
                            while (p != null) {
                                if (p.getRight() != null) {
                                    p = p.getRight();
                                }
                                else {
                                    return p;
                                }
                            }
                            return null;
                        };
                        LongRBTree.prototype.rotateLeft = function (n) {
                            var r = n.getRight();
                            this.replaceNode(n, r);
                            n.setRight(r.getLeft());
                            if (r.getLeft() != null) {
                                r.getLeft().setParent(n);
                            }
                            r.setLeft(n);
                            n.setParent(r);
                        };
                        LongRBTree.prototype.rotateRight = function (n) {
                            var l = n.getLeft();
                            this.replaceNode(n, l);
                            n.setLeft(l.getRight());
                            if (l.getRight() != null) {
                                l.getRight().setParent(n);
                            }
                            l.setRight(n);
                            n.setParent(l);
                        };
                        LongRBTree.prototype.replaceNode = function (oldn, newn) {
                            if (oldn.getParent() == null) {
                                this.root = newn;
                            }
                            else {
                                if (oldn == oldn.getParent().getLeft()) {
                                    oldn.getParent().setLeft(newn);
                                }
                                else {
                                    oldn.getParent().setRight(newn);
                                }
                            }
                            if (newn != null) {
                                newn.setParent(oldn.getParent());
                            }
                        };
                        LongRBTree.prototype.insert = function (key, value) {
                            this.resetCache();
                            this._dirty = true;
                            var insertedNode = new org.kevoree.modeling.api.rbtree.LongTreeNode(key, value, org.kevoree.modeling.api.rbtree.Color.RED, null, null);
                            if (this.root == null) {
                                this._size++;
                                this.root = insertedNode;
                            }
                            else {
                                var n = this.root;
                                while (true) {
                                    if (key == n.key) {
                                        n.value = value;
                                        return;
                                    }
                                    else {
                                        if (key < n.key) {
                                            if (n.getLeft() == null) {
                                                n.setLeft(insertedNode);
                                                this._size++;
                                                break;
                                            }
                                            else {
                                                n = n.getLeft();
                                            }
                                        }
                                        else {
                                            if (n.getRight() == null) {
                                                n.setRight(insertedNode);
                                                this._size++;
                                                break;
                                            }
                                            else {
                                                n = n.getRight();
                                            }
                                        }
                                    }
                                }
                                insertedNode.setParent(n);
                            }
                            this.insertCase1(insertedNode);
                        };
                        LongRBTree.prototype.insertCase1 = function (n) {
                            if (n.getParent() == null) {
                                n.color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                            }
                            else {
                                this.insertCase2(n);
                            }
                        };
                        LongRBTree.prototype.insertCase2 = function (n) {
                            if (this.nodeColor(n.getParent()) == org.kevoree.modeling.api.rbtree.Color.BLACK) {
                                return;
                            }
                            else {
                                this.insertCase3(n);
                            }
                        };
                        LongRBTree.prototype.insertCase3 = function (n) {
                            if (this.nodeColor(n.uncle()) == org.kevoree.modeling.api.rbtree.Color.RED) {
                                n.getParent().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                                n.uncle().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                                n.grandparent().color = org.kevoree.modeling.api.rbtree.Color.RED;
                                this.insertCase1(n.grandparent());
                            }
                            else {
                                this.insertCase4(n);
                            }
                        };
                        LongRBTree.prototype.insertCase4 = function (n_n) {
                            var n = n_n;
                            if (n == n.getParent().getRight() && n.getParent() == n.grandparent().getLeft()) {
                                this.rotateLeft(n.getParent());
                                n = n.getLeft();
                            }
                            else {
                                if (n == n.getParent().getLeft() && n.getParent() == n.grandparent().getRight()) {
                                    this.rotateRight(n.getParent());
                                    n = n.getRight();
                                }
                            }
                            this.insertCase5(n);
                        };
                        LongRBTree.prototype.insertCase5 = function (n) {
                            n.getParent().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                            n.grandparent().color = org.kevoree.modeling.api.rbtree.Color.RED;
                            if (n == n.getParent().getLeft() && n.getParent() == n.grandparent().getLeft()) {
                                this.rotateRight(n.grandparent());
                            }
                            else {
                                this.rotateLeft(n.grandparent());
                            }
                        };
                        LongRBTree.prototype.delete = function (key) {
                            var n = this.lookup(key);
                            if (n == null) {
                                return;
                            }
                            else {
                                this._size--;
                                if (n.getLeft() != null && n.getRight() != null) {
                                    var pred = n.getLeft();
                                    while (pred.getRight() != null) {
                                        pred = pred.getRight();
                                    }
                                    n.key = pred.key;
                                    n.value = pred.value;
                                    n = pred;
                                }
                                var child;
                                if (n.getRight() == null) {
                                    child = n.getLeft();
                                }
                                else {
                                    child = n.getRight();
                                }
                                if (this.nodeColor(n) == org.kevoree.modeling.api.rbtree.Color.BLACK) {
                                    n.color = this.nodeColor(child);
                                    this.deleteCase1(n);
                                }
                                this.replaceNode(n, child);
                            }
                        };
                        LongRBTree.prototype.deleteCase1 = function (n) {
                            if (n.getParent() == null) {
                                return;
                            }
                            else {
                                this.deleteCase2(n);
                            }
                        };
                        LongRBTree.prototype.deleteCase2 = function (n) {
                            if (this.nodeColor(n.sibling()) == org.kevoree.modeling.api.rbtree.Color.RED) {
                                n.getParent().color = org.kevoree.modeling.api.rbtree.Color.RED;
                                n.sibling().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                                if (n == n.getParent().getLeft()) {
                                    this.rotateLeft(n.getParent());
                                }
                                else {
                                    this.rotateRight(n.getParent());
                                }
                            }
                            this.deleteCase3(n);
                        };
                        LongRBTree.prototype.deleteCase3 = function (n) {
                            if (this.nodeColor(n.getParent()) == org.kevoree.modeling.api.rbtree.Color.BLACK && this.nodeColor(n.sibling()) == org.kevoree.modeling.api.rbtree.Color.BLACK && this.nodeColor(n.sibling().getLeft()) == org.kevoree.modeling.api.rbtree.Color.BLACK && this.nodeColor(n.sibling().getRight()) == org.kevoree.modeling.api.rbtree.Color.BLACK) {
                                n.sibling().color = org.kevoree.modeling.api.rbtree.Color.RED;
                                this.deleteCase1(n.getParent());
                            }
                            else {
                                this.deleteCase4(n);
                            }
                        };
                        LongRBTree.prototype.deleteCase4 = function (n) {
                            if (this.nodeColor(n.getParent()) == org.kevoree.modeling.api.rbtree.Color.RED && this.nodeColor(n.sibling()) == org.kevoree.modeling.api.rbtree.Color.BLACK && this.nodeColor(n.sibling().getLeft()) == org.kevoree.modeling.api.rbtree.Color.BLACK && this.nodeColor(n.sibling().getRight()) == org.kevoree.modeling.api.rbtree.Color.BLACK) {
                                n.sibling().color = org.kevoree.modeling.api.rbtree.Color.RED;
                                n.getParent().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                            }
                            else {
                                this.deleteCase5(n);
                            }
                        };
                        LongRBTree.prototype.deleteCase5 = function (n) {
                            if (n == n.getParent().getLeft() && this.nodeColor(n.sibling()) == org.kevoree.modeling.api.rbtree.Color.BLACK && this.nodeColor(n.sibling().getLeft()) == org.kevoree.modeling.api.rbtree.Color.RED && this.nodeColor(n.sibling().getRight()) == org.kevoree.modeling.api.rbtree.Color.BLACK) {
                                n.sibling().color = org.kevoree.modeling.api.rbtree.Color.RED;
                                n.sibling().getLeft().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                                this.rotateRight(n.sibling());
                            }
                            else {
                                if (n == n.getParent().getRight() && this.nodeColor(n.sibling()) == org.kevoree.modeling.api.rbtree.Color.BLACK && this.nodeColor(n.sibling().getRight()) == org.kevoree.modeling.api.rbtree.Color.RED && this.nodeColor(n.sibling().getLeft()) == org.kevoree.modeling.api.rbtree.Color.BLACK) {
                                    n.sibling().color = org.kevoree.modeling.api.rbtree.Color.RED;
                                    n.sibling().getRight().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                                    this.rotateLeft(n.sibling());
                                }
                            }
                            this.deleteCase6(n);
                        };
                        LongRBTree.prototype.deleteCase6 = function (n) {
                            n.sibling().color = this.nodeColor(n.getParent());
                            n.getParent().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                            if (n == n.getParent().getLeft()) {
                                n.sibling().getRight().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                                this.rotateLeft(n.getParent());
                            }
                            else {
                                n.sibling().getLeft().color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                                this.rotateRight(n.getParent());
                            }
                        };
                        LongRBTree.prototype.nodeColor = function (n) {
                            if (n == null) {
                                return org.kevoree.modeling.api.rbtree.Color.BLACK;
                            }
                            else {
                                return n.color;
                            }
                        };
                        return LongRBTree;
                    })();
                    rbtree.LongRBTree = LongRBTree;
                    var LongTreeNode = (function () {
                        function LongTreeNode(key, value, color, left, right) {
                            this.parent = null;
                            this.key = key;
                            this.value = value;
                            this.color = color;
                            this.left = left;
                            this.right = right;
                            if (left != null) {
                                left.parent = this;
                            }
                            if (right != null) {
                                right.parent = this;
                            }
                            this.parent = null;
                        }
                        LongTreeNode.prototype.grandparent = function () {
                            if (this.parent != null) {
                                return this.parent.parent;
                            }
                            else {
                                return null;
                            }
                        };
                        LongTreeNode.prototype.sibling = function () {
                            if (this.parent == null) {
                                return null;
                            }
                            else {
                                if (this == this.parent.left) {
                                    return this.parent.right;
                                }
                                else {
                                    return this.parent.left;
                                }
                            }
                        };
                        LongTreeNode.prototype.uncle = function () {
                            if (this.parent != null) {
                                return this.parent.sibling();
                            }
                            else {
                                return null;
                            }
                        };
                        LongTreeNode.prototype.getLeft = function () {
                            return this.left;
                        };
                        LongTreeNode.prototype.setLeft = function (left) {
                            this.left = left;
                        };
                        LongTreeNode.prototype.getRight = function () {
                            return this.right;
                        };
                        LongTreeNode.prototype.setRight = function (right) {
                            this.right = right;
                        };
                        LongTreeNode.prototype.getParent = function () {
                            return this.parent;
                        };
                        LongTreeNode.prototype.setParent = function (parent) {
                            this.parent = parent;
                        };
                        LongTreeNode.prototype.serialize = function (builder) {
                            builder.append("|");
                            if (this.color == org.kevoree.modeling.api.rbtree.Color.BLACK) {
                                builder.append(LongTreeNode.BLACK);
                            }
                            else {
                                builder.append(LongTreeNode.RED);
                            }
                            builder.append(this.key);
                            builder.append("@");
                            builder.append(this.value);
                            if (this.left == null && this.right == null) {
                                builder.append("%");
                            }
                            else {
                                if (this.left != null) {
                                    this.left.serialize(builder);
                                }
                                else {
                                    builder.append("#");
                                }
                                if (this.right != null) {
                                    this.right.serialize(builder);
                                }
                                else {
                                    builder.append("#");
                                }
                            }
                        };
                        LongTreeNode.prototype.next = function () {
                            var p = this;
                            if (p.right != null) {
                                p = p.right;
                                while (p.left != null) {
                                    p = p.left;
                                }
                                return p;
                            }
                            else {
                                if (p.parent != null) {
                                    if (p == p.parent.left) {
                                        return p.parent;
                                    }
                                    else {
                                        while (p.parent != null && p == p.parent.right) {
                                            p = p.parent;
                                        }
                                        return p.parent;
                                    }
                                }
                                else {
                                    return null;
                                }
                            }
                        };
                        LongTreeNode.prototype.previous = function () {
                            var p = this;
                            if (p.left != null) {
                                p = p.left;
                                while (p.right != null) {
                                    p = p.right;
                                }
                                return p;
                            }
                            else {
                                if (p.parent != null) {
                                    if (p == p.parent.right) {
                                        return p.parent;
                                    }
                                    else {
                                        while (p.parent != null && p == p.parent.left) {
                                            p = p.parent;
                                        }
                                        return p.parent;
                                    }
                                }
                                else {
                                    return null;
                                }
                            }
                        };
                        LongTreeNode.unserialize = function (ctx) {
                            return org.kevoree.modeling.api.rbtree.LongTreeNode.internal_unserialize(true, ctx);
                        };
                        LongTreeNode.internal_unserialize = function (rightBranch, ctx) {
                            if (ctx.index >= ctx.payload.length) {
                                return null;
                            }
                            var ch = ctx.payload.charAt(ctx.index);
                            if (ch == '%') {
                                if (rightBranch) {
                                    ctx.index = ctx.index + 1;
                                }
                                return null;
                            }
                            if (ch == '#') {
                                ctx.index = ctx.index + 1;
                                return null;
                            }
                            if (ch != '|') {
                                throw new java.lang.Exception("Error while loading BTree");
                            }
                            ctx.index = ctx.index + 1;
                            ch = ctx.payload.charAt(ctx.index);
                            var color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                            if (ch == LongTreeNode.RED) {
                                color = org.kevoree.modeling.api.rbtree.Color.RED;
                            }
                            ctx.index = ctx.index + 1;
                            ch = ctx.payload.charAt(ctx.index);
                            var i = 0;
                            while (ctx.index + 1 < ctx.payload.length && ch != '|' && ch != '#' && ch != '%' && ch != '@') {
                                ctx.buffer[i] = ch;
                                i++;
                                ctx.index = ctx.index + 1;
                                ch = ctx.payload.charAt(ctx.index);
                            }
                            if (ch != '|' && ch != '#' && ch != '%' && ch != '@') {
                                ctx.buffer[i] = ch;
                                i++;
                            }
                            var key = java.lang.Long.parseLong(StringUtils.copyValueOf(ctx.buffer, 0, i));
                            i = 0;
                            ctx.index = ctx.index + 1;
                            ch = ctx.payload.charAt(ctx.index);
                            while (ctx.index + 1 < ctx.payload.length && ch != '|' && ch != '#' && ch != '%' && ch != '@') {
                                ctx.buffer[i] = ch;
                                i++;
                                ctx.index = ctx.index + 1;
                                ch = ctx.payload.charAt(ctx.index);
                            }
                            if (ch != '|' && ch != '#' && ch != '%' && ch != '@') {
                                ctx.buffer[i] = ch;
                                i++;
                            }
                            var value = java.lang.Long.parseLong(StringUtils.copyValueOf(ctx.buffer, 0, i));
                            var p = new org.kevoree.modeling.api.rbtree.LongTreeNode(key, value, color, null, null);
                            var left = org.kevoree.modeling.api.rbtree.LongTreeNode.internal_unserialize(false, ctx);
                            if (left != null) {
                                left.setParent(p);
                            }
                            var right = org.kevoree.modeling.api.rbtree.LongTreeNode.internal_unserialize(true, ctx);
                            if (right != null) {
                                right.setParent(p);
                            }
                            p.setLeft(left);
                            p.setRight(right);
                            return p;
                        };
                        LongTreeNode.BLACK = '0';
                        LongTreeNode.RED = '2';
                        return LongTreeNode;
                    })();
                    rbtree.LongTreeNode = LongTreeNode;
                    var TreeNode = (function () {
                        function TreeNode(key, color, left, right) {
                            this.parent = null;
                            this.key = key;
                            this.color = color;
                            this.left = left;
                            this.right = right;
                            if (left != null) {
                                left.parent = this;
                            }
                            if (right != null) {
                                right.parent = this;
                            }
                            this.parent = null;
                        }
                        TreeNode.prototype.getKey = function () {
                            return this.key;
                        };
                        TreeNode.prototype.grandparent = function () {
                            if (this.parent != null) {
                                return this.parent.parent;
                            }
                            else {
                                return null;
                            }
                        };
                        TreeNode.prototype.sibling = function () {
                            if (this.parent == null) {
                                return null;
                            }
                            else {
                                if (this == this.parent.left) {
                                    return this.parent.right;
                                }
                                else {
                                    return this.parent.left;
                                }
                            }
                        };
                        TreeNode.prototype.uncle = function () {
                            if (this.parent != null) {
                                return this.parent.sibling();
                            }
                            else {
                                return null;
                            }
                        };
                        TreeNode.prototype.getLeft = function () {
                            return this.left;
                        };
                        TreeNode.prototype.setLeft = function (left) {
                            this.left = left;
                        };
                        TreeNode.prototype.getRight = function () {
                            return this.right;
                        };
                        TreeNode.prototype.setRight = function (right) {
                            this.right = right;
                        };
                        TreeNode.prototype.getParent = function () {
                            return this.parent;
                        };
                        TreeNode.prototype.setParent = function (parent) {
                            this.parent = parent;
                        };
                        TreeNode.prototype.serialize = function (builder) {
                            builder.append("|");
                            if (this.color == org.kevoree.modeling.api.rbtree.Color.BLACK) {
                                builder.append(TreeNode.BLACK);
                            }
                            else {
                                builder.append(TreeNode.RED);
                            }
                            builder.append(this.key);
                            if (this.left == null && this.right == null) {
                                builder.append("%");
                            }
                            else {
                                if (this.left != null) {
                                    this.left.serialize(builder);
                                }
                                else {
                                    builder.append("#");
                                }
                                if (this.right != null) {
                                    this.right.serialize(builder);
                                }
                                else {
                                    builder.append("#");
                                }
                            }
                        };
                        TreeNode.prototype.next = function () {
                            var p = this;
                            if (p.right != null) {
                                p = p.right;
                                while (p.left != null) {
                                    p = p.left;
                                }
                                return p;
                            }
                            else {
                                if (p.parent != null) {
                                    if (p == p.parent.left) {
                                        return p.parent;
                                    }
                                    else {
                                        while (p.parent != null && p == p.parent.right) {
                                            p = p.parent;
                                        }
                                        return p.parent;
                                    }
                                }
                                else {
                                    return null;
                                }
                            }
                        };
                        TreeNode.prototype.previous = function () {
                            var p = this;
                            if (p.left != null) {
                                p = p.left;
                                while (p.right != null) {
                                    p = p.right;
                                }
                                return p;
                            }
                            else {
                                if (p.parent != null) {
                                    if (p == p.parent.right) {
                                        return p.parent;
                                    }
                                    else {
                                        while (p.parent != null && p == p.parent.left) {
                                            p = p.parent;
                                        }
                                        return p.parent;
                                    }
                                }
                                else {
                                    return null;
                                }
                            }
                        };
                        TreeNode.unserialize = function (ctx) {
                            return org.kevoree.modeling.api.rbtree.TreeNode.internal_unserialize(true, ctx);
                        };
                        TreeNode.internal_unserialize = function (rightBranch, ctx) {
                            if (ctx.index >= ctx.payload.length) {
                                return null;
                            }
                            var tokenBuild = new java.lang.StringBuilder();
                            var ch = ctx.payload.charAt(ctx.index);
                            if (ch == '%') {
                                if (rightBranch) {
                                    ctx.index = ctx.index + 1;
                                }
                                return null;
                            }
                            if (ch == '#') {
                                ctx.index = ctx.index + 1;
                                return null;
                            }
                            if (ch != '|') {
                                throw new java.lang.Exception("Error while loading BTree");
                            }
                            ctx.index = ctx.index + 1;
                            ch = ctx.payload.charAt(ctx.index);
                            var color;
                            if (ch == org.kevoree.modeling.api.rbtree.TreeNode.BLACK) {
                                color = org.kevoree.modeling.api.rbtree.Color.BLACK;
                            }
                            else {
                                color = org.kevoree.modeling.api.rbtree.Color.RED;
                            }
                            ctx.index = ctx.index + 1;
                            ch = ctx.payload.charAt(ctx.index);
                            while (ctx.index + 1 < ctx.payload.length && ch != '|' && ch != '#' && ch != '%') {
                                tokenBuild.append(ch);
                                ctx.index = ctx.index + 1;
                                ch = ctx.payload.charAt(ctx.index);
                            }
                            if (ch != '|' && ch != '#' && ch != '%') {
                                tokenBuild.append(ch);
                            }
                            var p = new org.kevoree.modeling.api.rbtree.TreeNode(java.lang.Long.parseLong(tokenBuild.toString()), color, null, null);
                            var left = org.kevoree.modeling.api.rbtree.TreeNode.internal_unserialize(false, ctx);
                            if (left != null) {
                                left.setParent(p);
                            }
                            var right = org.kevoree.modeling.api.rbtree.TreeNode.internal_unserialize(true, ctx);
                            if (right != null) {
                                right.setParent(p);
                            }
                            p.setLeft(left);
                            p.setRight(right);
                            return p;
                        };
                        TreeNode.BLACK = '0';
                        TreeNode.RED = '1';
                        return TreeNode;
                    })();
                    rbtree.TreeNode = TreeNode;
                    var TreeReaderContext = (function () {
                        function TreeReaderContext() {
                        }
                        return TreeReaderContext;
                    })();
                    rbtree.TreeReaderContext = TreeReaderContext;
                })(rbtree = api.rbtree || (api.rbtree = {}));
                var reflexive;
                (function (reflexive) {
                    var DynamicKModel = (function (_super) {
                        __extends(DynamicKModel, _super);
                        function DynamicKModel() {
                            _super.apply(this, arguments);
                            this._metaModel = null;
                        }
                        DynamicKModel.prototype.setMetaModel = function (p_metaModel) {
                            this._metaModel = p_metaModel;
                        };
                        DynamicKModel.prototype.metaModel = function () {
                            return this._metaModel;
                        };
                        DynamicKModel.prototype.internal_create = function (key) {
                            return new org.kevoree.modeling.api.reflexive.DynamicKUniverse(this, key);
                        };
                        return DynamicKModel;
                    })(org.kevoree.modeling.api.abs.AbstractKModel);
                    reflexive.DynamicKModel = DynamicKModel;
                    var DynamicKObject = (function (_super) {
                        __extends(DynamicKObject, _super);
                        function DynamicKObject(p_view, p_uuid, p_metaClass) {
                            _super.call(this, p_view, p_uuid, p_metaClass);
                        }
                        return DynamicKObject;
                    })(org.kevoree.modeling.api.abs.AbstractKObject);
                    reflexive.DynamicKObject = DynamicKObject;
                    var DynamicKUniverse = (function (_super) {
                        __extends(DynamicKUniverse, _super);
                        function DynamicKUniverse(p_universe, p_key) {
                            _super.call(this, p_universe, p_key);
                        }
                        DynamicKUniverse.prototype.internal_create = function (timePoint) {
                            return new org.kevoree.modeling.api.reflexive.DynamicKView(timePoint, this);
                        };
                        return DynamicKUniverse;
                    })(org.kevoree.modeling.api.abs.AbstractKUniverse);
                    reflexive.DynamicKUniverse = DynamicKUniverse;
                    var DynamicKView = (function (_super) {
                        __extends(DynamicKView, _super);
                        function DynamicKView(p_now, p_dimension) {
                            _super.call(this, p_now, p_dimension);
                        }
                        DynamicKView.prototype.internalCreate = function (clazz, key) {
                            return new org.kevoree.modeling.api.reflexive.DynamicKObject(this, key, clazz);
                        };
                        return DynamicKView;
                    })(org.kevoree.modeling.api.abs.AbstractKView);
                    reflexive.DynamicKView = DynamicKView;
                    var DynamicMetaClass = (function (_super) {
                        __extends(DynamicMetaClass, _super);
                        function DynamicMetaClass(p_name, p_index) {
                            _super.call(this, p_name, p_index);
                            this.cached_meta = new org.kevoree.modeling.api.map.StringHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                            this._globalIndex = -1;
                            this._globalIndex = org.kevoree.modeling.api.data.manager.Index.RESERVED_INDEXES;
                            this.internalInit();
                        }
                        DynamicMetaClass.prototype.addAttribute = function (p_name, p_type) {
                            var tempAttribute = new org.kevoree.modeling.api.abs.AbstractMetaAttribute(p_name, this._globalIndex, -1, false, p_type, org.kevoree.modeling.api.extrapolation.DiscreteExtrapolation.instance());
                            this.cached_meta.put(tempAttribute.metaName(), tempAttribute);
                            this._globalIndex = this._globalIndex + 1;
                            this.internalInit();
                            return this;
                        };
                        DynamicMetaClass.prototype.addReference = function (p_name, p_metaClass, contained) {
                            var tempOrigin = this;
                            var tempReference = new org.kevoree.modeling.api.abs.AbstractMetaReference(p_name, this._globalIndex, contained, false, function () {
                                return p_metaClass;
                            }, null, function () {
                                return tempOrigin;
                            });
                            this.cached_meta.put(tempReference.metaName(), tempReference);
                            this._globalIndex = this._globalIndex + 1;
                            this.internalInit();
                            return this;
                        };
                        DynamicMetaClass.prototype.addOperation = function (p_name) {
                            var tempOrigin = this;
                            var tempOperation = new org.kevoree.modeling.api.abs.AbstractMetaOperation(p_name, this._globalIndex, function () {
                                return tempOrigin;
                            });
                            this.cached_meta.put(tempOperation.metaName(), tempOperation);
                            this._globalIndex = this._globalIndex + 1;
                            this.internalInit();
                            return this;
                        };
                        DynamicMetaClass.prototype.internalInit = function () {
                            var tempMeta = new Array();
                            var loopKey = new Array();
                            loopKey[0] = 0;
                            this.cached_meta.each(function (key, value) {
                                tempMeta[loopKey[0]] = value;
                                loopKey[0]++;
                            });
                            this.init(tempMeta);
                        };
                        return DynamicMetaClass;
                    })(org.kevoree.modeling.api.abs.AbstractMetaClass);
                    reflexive.DynamicMetaClass = DynamicMetaClass;
                    var DynamicMetaModel = (function () {
                        function DynamicMetaModel(p_metaName) {
                            this._metaName = null;
                            this._classes = new org.kevoree.modeling.api.map.StringHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                            this._metaName = p_metaName;
                        }
                        DynamicMetaModel.prototype.metaClasses = function () {
                            var tempResult = new Array();
                            var loopI = new Array();
                            this._classes.each(function (key, value) {
                                tempResult[value.index()] = value;
                                loopI[0]++;
                            });
                            return tempResult;
                        };
                        DynamicMetaModel.prototype.metaClass = function (name) {
                            return this._classes.get(name);
                        };
                        DynamicMetaModel.prototype.metaName = function () {
                            return this._metaName;
                        };
                        DynamicMetaModel.prototype.metaType = function () {
                            return org.kevoree.modeling.api.meta.MetaType.MODEL;
                        };
                        DynamicMetaModel.prototype.index = function () {
                            return -1;
                        };
                        DynamicMetaModel.prototype.createMetaClass = function (name) {
                            if (this._classes.containsKey(name)) {
                                return this._classes.get(name);
                            }
                            else {
                                var dynamicMetaClass = new org.kevoree.modeling.api.reflexive.DynamicMetaClass(name, this._classes.size());
                                this._classes.put(name, dynamicMetaClass);
                                return dynamicMetaClass;
                            }
                        };
                        DynamicMetaModel.prototype.model = function () {
                            var universe = new org.kevoree.modeling.api.reflexive.DynamicKModel();
                            universe.setMetaModel(this);
                            return universe;
                        };
                        return DynamicMetaModel;
                    })();
                    reflexive.DynamicMetaModel = DynamicMetaModel;
                })(reflexive = api.reflexive || (api.reflexive = {}));
                var scheduler;
                (function (scheduler) {
                    var DirectScheduler = (function () {
                        function DirectScheduler() {
                        }
                        DirectScheduler.prototype.dispatch = function (runnable) {
                            runnable.run();
                        };
                        DirectScheduler.prototype.stop = function () {
                        };
                        return DirectScheduler;
                    })();
                    scheduler.DirectScheduler = DirectScheduler;
                    var ExecutorServiceScheduler = (function () {
                        function ExecutorServiceScheduler() {
                        }
                        ExecutorServiceScheduler.prototype.dispatch = function (p_runnable) {
                            p_runnable.run();
                        };
                        ExecutorServiceScheduler.prototype.stop = function () {
                        };
                        return ExecutorServiceScheduler;
                    })();
                    scheduler.ExecutorServiceScheduler = ExecutorServiceScheduler;
                })(scheduler = api.scheduler || (api.scheduler = {}));
                var traversal;
                (function (traversal) {
                    var DefaultKTraversal = (function () {
                        function DefaultKTraversal(p_root) {
                            this._terminated = false;
                            this._initObjs = new Array();
                            this._initObjs[0] = p_root;
                        }
                        DefaultKTraversal.prototype.internal_chain_action = function (p_action) {
                            if (this._terminated) {
                                throw new java.lang.RuntimeException(DefaultKTraversal.TERMINATED_MESSAGE);
                            }
                            if (this._initAction == null) {
                                this._initAction = p_action;
                            }
                            if (this._lastAction != null) {
                                this._lastAction.chain(p_action);
                            }
                            this._lastAction = p_action;
                            return this;
                        };
                        DefaultKTraversal.prototype.traverse = function (p_metaReference) {
                            return this.internal_chain_action(new org.kevoree.modeling.api.traversal.actions.KTraverseAction(p_metaReference));
                        };
                        DefaultKTraversal.prototype.traverseQuery = function (p_metaReferenceQuery) {
                            return this.internal_chain_action(new org.kevoree.modeling.api.traversal.actions.KTraverseQueryAction(p_metaReferenceQuery));
                        };
                        DefaultKTraversal.prototype.withAttribute = function (p_attribute, p_expectedValue) {
                            return this.internal_chain_action(new org.kevoree.modeling.api.traversal.actions.KFilterAttributeAction(p_attribute, p_expectedValue));
                        };
                        DefaultKTraversal.prototype.withoutAttribute = function (p_attribute, p_expectedValue) {
                            return this.internal_chain_action(new org.kevoree.modeling.api.traversal.actions.KFilterNotAttributeAction(p_attribute, p_expectedValue));
                        };
                        DefaultKTraversal.prototype.attributeQuery = function (p_attributeQuery) {
                            return this.internal_chain_action(new org.kevoree.modeling.api.traversal.actions.KFilterAttributeQueryAction(p_attributeQuery));
                        };
                        DefaultKTraversal.prototype.filter = function (p_filter) {
                            return this.internal_chain_action(new org.kevoree.modeling.api.traversal.actions.KFilterAction(p_filter));
                        };
                        DefaultKTraversal.prototype.inbounds = function (p_metaReference) {
                            return this.internal_chain_action(new org.kevoree.modeling.api.traversal.actions.KInboundsAction(p_metaReference));
                        };
                        DefaultKTraversal.prototype.inboundsQuery = function (p_metaReferenceQuery) {
                            return this.internal_chain_action(new org.kevoree.modeling.api.traversal.actions.KInboundsQueryAction(p_metaReferenceQuery));
                        };
                        DefaultKTraversal.prototype.parents = function () {
                            return this.internal_chain_action(new org.kevoree.modeling.api.traversal.actions.KParentsAction());
                        };
                        DefaultKTraversal.prototype.removeDuplicate = function () {
                            return this.internal_chain_action(new org.kevoree.modeling.api.traversal.actions.KRemoveDuplicateAction());
                        };
                        DefaultKTraversal.prototype.deepTraverse = function (metaReference, continueCondition) {
                            return this.internal_chain_action(new org.kevoree.modeling.api.traversal.actions.KDeepTraverseAction(metaReference, continueCondition));
                        };
                        DefaultKTraversal.prototype.deepCollect = function (metaReference, continueCondition) {
                            return this.internal_chain_action(new org.kevoree.modeling.api.traversal.actions.KDeepCollectAction(metaReference, continueCondition));
                        };
                        DefaultKTraversal.prototype.activateHistory = function () {
                            return this.internal_chain_action(new org.kevoree.modeling.api.traversal.actions.KActivateHistoryAction());
                        };
                        DefaultKTraversal.prototype.reverse = function () {
                            return this.internal_chain_action(new org.kevoree.modeling.api.traversal.actions.KReverseAction());
                        };
                        DefaultKTraversal.prototype.done = function () {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            this.internal_chain_action(new org.kevoree.modeling.api.traversal.actions.KFinalAction(task.initCallback()));
                            this._terminated = true;
                            this._initAction.execute(this._initObjs, null);
                            return task;
                        };
                        DefaultKTraversal.prototype.map = function (attribute) {
                            var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            this.internal_chain_action(new org.kevoree.modeling.api.traversal.actions.KMapAction(attribute, task.initCallback()));
                            this._terminated = true;
                            this._initAction.execute(this._initObjs, null);
                            return task;
                        };
                        DefaultKTraversal.TERMINATED_MESSAGE = "Promise is terminated by the call of done method, please create another promise";
                        return DefaultKTraversal;
                    })();
                    traversal.DefaultKTraversal = DefaultKTraversal;
                    var KTraversalHistory = (function () {
                        function KTraversalHistory() {
                            this._valuesHistory = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                        }
                        KTraversalHistory.prototype.addResult = function (resolved) {
                            if (resolved != null) {
                                for (var i = 0; i < resolved.length; i++) {
                                    this._valuesHistory.put(resolved[i].uuid(), resolved[i]);
                                }
                            }
                        };
                        KTraversalHistory.prototype.remove = function (toDrop) {
                            this._valuesHistory.remove(toDrop);
                        };
                        KTraversalHistory.prototype.get = function (uuid) {
                            return this._valuesHistory.get(uuid);
                        };
                        KTraversalHistory.prototype.historySize = function () {
                            return this._valuesHistory.size();
                        };
                        return KTraversalHistory;
                    })();
                    traversal.KTraversalHistory = KTraversalHistory;
                    var actions;
                    (function (actions) {
                        var KActivateHistoryAction = (function () {
                            function KActivateHistoryAction() {
                            }
                            KActivateHistoryAction.prototype.chain = function (p_next) {
                                this._next = p_next;
                            };
                            KActivateHistoryAction.prototype.execute = function (inputs, p_history) {
                                var _history = p_history;
                                if (_history == null) {
                                    _history = new org.kevoree.modeling.api.traversal.KTraversalHistory();
                                }
                                _history.addResult(inputs);
                                this._next.execute(inputs, _history);
                            };
                            return KActivateHistoryAction;
                        })();
                        actions.KActivateHistoryAction = KActivateHistoryAction;
                        var KDeepCollectAction = (function () {
                            function KDeepCollectAction(p_reference, p_continueCondition) {
                                this._alreadyPassed = null;
                                this._finalElements = null;
                                this._reference = p_reference;
                                this._continueCondition = p_continueCondition;
                            }
                            KDeepCollectAction.prototype.chain = function (p_next) {
                                this._next = p_next;
                            };
                            KDeepCollectAction.prototype.execute = function (p_inputs, p_history) {
                                var _this = this;
                                if (p_inputs == null || p_inputs.length == 0) {
                                    if (p_history != null) {
                                        p_history.addResult(p_inputs);
                                    }
                                    this._next.execute(p_inputs, p_history);
                                    return;
                                }
                                else {
                                    this.currentView = p_inputs[0].view();
                                    this._alreadyPassed = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                    this._finalElements = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                    var filtered_inputs = new Array();
                                    for (var i = 0; i < p_inputs.length; i++) {
                                        if (this._continueCondition == null || this._continueCondition(p_inputs[i], p_history)) {
                                            filtered_inputs[i] = p_inputs[i];
                                            this._alreadyPassed.put(p_inputs[i].uuid(), p_inputs[i]);
                                        }
                                    }
                                    var iterationCallbacks = new Array();
                                    iterationCallbacks[0] = function (traversed) {
                                        var filtered_inputs2 = new Array();
                                        var nbSize = 0;
                                        for (var i = 0; i < traversed.length; i++) {
                                            if ((_this._continueCondition == null || _this._continueCondition(traversed[i], p_history)) && !_this._alreadyPassed.containsKey(traversed[i].uuid())) {
                                                filtered_inputs2[i] = traversed[i];
                                                _this._alreadyPassed.put(traversed[i].uuid(), traversed[i]);
                                                _this._finalElements.put(traversed[i].uuid(), traversed[i]);
                                                nbSize++;
                                            }
                                        }
                                        if (nbSize > 0) {
                                            if (p_history != null) {
                                                p_history.addResult(filtered_inputs2);
                                            }
                                            _this.executeStep(filtered_inputs2, iterationCallbacks[0]);
                                        }
                                        else {
                                            var trimmed = new Array();
                                            var nbInserted = [0];
                                            _this._finalElements.each(function (key, value) {
                                                trimmed[nbInserted[0]] = value;
                                                nbInserted[0]++;
                                            });
                                            if (p_history != null) {
                                                p_history.addResult(trimmed);
                                            }
                                            _this._next.execute(trimmed, p_history);
                                        }
                                    };
                                    this.executeStep(filtered_inputs, iterationCallbacks[0]);
                                }
                            };
                            KDeepCollectAction.prototype.executeStep = function (p_inputStep, private_callback) {
                                var nextIds = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                for (var i = 0; i < p_inputStep.length; i++) {
                                    if (p_inputStep[i] != null) {
                                        try {
                                            var loopObj = p_inputStep[i];
                                            var raw = this.currentView.universe().model().manager().entry(loopObj, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                                            if (raw != null) {
                                                if (this._reference == null) {
                                                    for (var j = 0; j < loopObj.metaClass().metaReferences().length; j++) {
                                                        var ref = loopObj.metaClass().metaReferences()[j];
                                                        var resolved = raw.getRef(ref.index());
                                                        if (resolved != null) {
                                                            for (var k = 0; k < resolved.length; k++) {
                                                                nextIds.put(resolved[k], resolved[k]);
                                                            }
                                                        }
                                                    }
                                                }
                                                else {
                                                    var translatedRef = loopObj.internal_transpose_ref(this._reference);
                                                    if (translatedRef != null) {
                                                        var resolved = raw.getRef(translatedRef.index());
                                                        if (resolved != null) {
                                                            for (var j = 0; j < resolved.length; j++) {
                                                                nextIds.put(resolved[j], resolved[j]);
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        catch ($ex$) {
                                            if ($ex$ instanceof java.lang.Exception) {
                                                var e = $ex$;
                                                e.printStackTrace();
                                            }
                                        }
                                    }
                                }
                                var trimmed = new Array();
                                var inserted = [0];
                                nextIds.each(function (key, value) {
                                    trimmed[inserted[0]] = key;
                                    inserted[0]++;
                                });
                                this.currentView.internalLookupAll(trimmed, function (kObjects) {
                                    private_callback(kObjects);
                                });
                            };
                            return KDeepCollectAction;
                        })();
                        actions.KDeepCollectAction = KDeepCollectAction;
                        var KDeepTraverseAction = (function () {
                            function KDeepTraverseAction(p_reference, p_continueCondition) {
                                this._alreadyPassed = null;
                                this._finalElements = null;
                                this._reference = p_reference;
                                this._continueCondition = p_continueCondition;
                            }
                            KDeepTraverseAction.prototype.chain = function (p_next) {
                                this._next = p_next;
                            };
                            KDeepTraverseAction.prototype.execute = function (p_inputs, p_history) {
                                var _this = this;
                                if (p_inputs == null || p_inputs.length == 0) {
                                    if (p_history != null) {
                                        p_history.addResult(p_inputs);
                                    }
                                    this._next.execute(p_inputs, p_history);
                                    return;
                                }
                                else {
                                    this._alreadyPassed = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                    this._finalElements = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                    var filtered_inputs = new Array();
                                    for (var i = 0; i < p_inputs.length; i++) {
                                        if (this._continueCondition == null || this._continueCondition(p_inputs[i], p_history)) {
                                            this._alreadyPassed.put(p_inputs[i].uuid(), p_inputs[i]);
                                            filtered_inputs[i] = p_inputs[i];
                                        }
                                    }
                                    var iterationCallbacks = new Array();
                                    iterationCallbacks[0] = function (traversed) {
                                        var filtered_inputs2 = new Array();
                                        var nbSize = 0;
                                        for (var i = 0; i < traversed.length; i++) {
                                            var filterCondition = _this._continueCondition == null || _this._continueCondition(traversed[i], p_history);
                                            if (filterCondition && !_this._alreadyPassed.containsKey(traversed[i].uuid())) {
                                                filtered_inputs2[i] = traversed[i];
                                                _this._alreadyPassed.put(traversed[i].uuid(), traversed[i]);
                                                nbSize++;
                                            }
                                            else {
                                                if (filterCondition) {
                                                    _this._finalElements.put(traversed[i].uuid(), traversed[i]);
                                                }
                                            }
                                        }
                                        if (nbSize > 0) {
                                            if (p_history != null) {
                                                p_history.addResult(filtered_inputs2);
                                            }
                                            _this.executeStep(filtered_inputs2, iterationCallbacks[0], p_history);
                                        }
                                        else {
                                            var trimmed = new Array();
                                            var nbInserted = [0];
                                            _this._finalElements.each(function (key, value) {
                                                trimmed[nbInserted[0]] = value;
                                                nbInserted[0]++;
                                            });
                                            if (p_history != null) {
                                                p_history.addResult(trimmed);
                                            }
                                            _this._next.execute(trimmed, p_history);
                                        }
                                    };
                                    this.executeStep(filtered_inputs, iterationCallbacks[0], p_history);
                                }
                            };
                            KDeepTraverseAction.prototype.executeStep = function (p_inputStep, private_callback, p_history) {
                                var currentView = p_inputStep[0].view();
                                var nextIds = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                for (var i = 0; i < p_inputStep.length; i++) {
                                    if (p_inputStep[i] != null) {
                                        try {
                                            var loopObj = p_inputStep[i];
                                            var raw = currentView.universe().model().manager().entry(loopObj, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                                            if (raw != null) {
                                                if (this._reference == null) {
                                                    var leadNode = true;
                                                    for (var j = 0; j < loopObj.metaClass().metaReferences().length; j++) {
                                                        var ref = loopObj.metaClass().metaReferences()[j];
                                                        var resolved = raw.getRef(ref.index());
                                                        if (resolved != null) {
                                                            for (var k = 0; k < resolved.length; k++) {
                                                                nextIds.put(resolved[k], resolved[k]);
                                                                leadNode = false;
                                                            }
                                                        }
                                                    }
                                                    if (leadNode && (this._continueCondition == null || this._continueCondition(loopObj, p_history))) {
                                                        this._finalElements.put(loopObj.uuid(), loopObj);
                                                    }
                                                }
                                                else {
                                                    var leadNode = true;
                                                    var translatedRef = loopObj.internal_transpose_ref(this._reference);
                                                    if (translatedRef != null) {
                                                        var resolved = raw.getRef(translatedRef.index());
                                                        if (resolved != null) {
                                                            for (var j = 0; j < resolved.length; j++) {
                                                                nextIds.put(resolved[j], resolved[j]);
                                                                leadNode = false;
                                                            }
                                                        }
                                                    }
                                                    if (leadNode && (this._continueCondition == null || this._continueCondition(loopObj, p_history))) {
                                                        this._finalElements.put(loopObj.uuid(), loopObj);
                                                    }
                                                }
                                            }
                                        }
                                        catch ($ex$) {
                                            if ($ex$ instanceof java.lang.Exception) {
                                                var e = $ex$;
                                                e.printStackTrace();
                                            }
                                        }
                                    }
                                }
                                var trimmed = new Array();
                                var inserted = [0];
                                nextIds.each(function (key, value) {
                                    trimmed[inserted[0]] = key;
                                    inserted[0]++;
                                });
                                currentView.internalLookupAll(trimmed, function (kObjects) {
                                    private_callback(kObjects);
                                });
                            };
                            return KDeepTraverseAction;
                        })();
                        actions.KDeepTraverseAction = KDeepTraverseAction;
                        var KFilterAction = (function () {
                            function KFilterAction(p_filter) {
                                this._filter = p_filter;
                            }
                            KFilterAction.prototype.chain = function (p_next) {
                                this._next = p_next;
                            };
                            KFilterAction.prototype.execute = function (p_inputs, p_history) {
                                var selectedIndex = new Array();
                                var selected = 0;
                                for (var i = 0; i < p_inputs.length; i++) {
                                    try {
                                        if (this._filter(p_inputs[i], p_history)) {
                                            selectedIndex[i] = true;
                                            selected++;
                                        }
                                    }
                                    catch ($ex$) {
                                        if ($ex$ instanceof java.lang.Exception) {
                                            var e = $ex$;
                                            e.printStackTrace();
                                        }
                                    }
                                }
                                var nextStepElement = new Array();
                                var inserted = 0;
                                for (var i = 0; i < p_inputs.length; i++) {
                                    if (selectedIndex[i]) {
                                        nextStepElement[inserted] = p_inputs[i];
                                        inserted++;
                                    }
                                }
                                if (p_history != null) {
                                    p_history.addResult(nextStepElement);
                                }
                                this._next.execute(nextStepElement, p_history);
                            };
                            return KFilterAction;
                        })();
                        actions.KFilterAction = KFilterAction;
                        var KFilterAttributeAction = (function () {
                            function KFilterAttributeAction(p_attribute, p_expectedValue) {
                                this._attribute = p_attribute;
                                this._expectedValue = p_expectedValue;
                            }
                            KFilterAttributeAction.prototype.chain = function (p_next) {
                                this._next = p_next;
                            };
                            KFilterAttributeAction.prototype.execute = function (p_inputs, p_history) {
                                if (p_inputs == null || p_inputs.length == 0) {
                                    if (p_history != null) {
                                        p_history.addResult(p_inputs);
                                    }
                                    this._next.execute(p_inputs, p_history);
                                    return;
                                }
                                else {
                                    var selectedIndexes = new Array();
                                    var nbSelected = 0;
                                    for (var i = 0; i < p_inputs.length; i++) {
                                        try {
                                            var loopObj = p_inputs[i];
                                            var raw = p_inputs[0].universe().model().manager().entry(loopObj, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                                            if (raw != null) {
                                                if (this._attribute == null) {
                                                    if (this._expectedValue == null) {
                                                        selectedIndexes[i] = true;
                                                        nbSelected++;
                                                    }
                                                    else {
                                                        var addToNext = false;
                                                        for (var j = 0; j < loopObj.metaClass().metaAttributes().length; j++) {
                                                            var ref = loopObj.metaClass().metaAttributes()[j];
                                                            var resolved = raw.get(ref.index());
                                                            if (resolved == null) {
                                                                if (this._expectedValue.toString().equals("*")) {
                                                                    addToNext = true;
                                                                }
                                                            }
                                                            else {
                                                                if (resolved.equals(this._expectedValue)) {
                                                                    addToNext = true;
                                                                }
                                                                else {
                                                                    if (resolved.toString().matches(this._expectedValue.toString().replace("*", ".*"))) {
                                                                        addToNext = true;
                                                                    }
                                                                }
                                                            }
                                                        }
                                                        if (addToNext) {
                                                            selectedIndexes[i] = true;
                                                            nbSelected++;
                                                        }
                                                    }
                                                }
                                                else {
                                                    var translatedAtt = loopObj.internal_transpose_att(this._attribute);
                                                    if (translatedAtt != null) {
                                                        var resolved = raw.get(translatedAtt.index());
                                                        if (this._expectedValue == null) {
                                                            if (resolved == null) {
                                                                selectedIndexes[i] = true;
                                                                nbSelected++;
                                                            }
                                                        }
                                                        else {
                                                            if (resolved == null) {
                                                                if (this._expectedValue.toString().equals("*")) {
                                                                    selectedIndexes[i] = true;
                                                                    nbSelected++;
                                                                }
                                                            }
                                                            else {
                                                                if (resolved.equals(this._expectedValue)) {
                                                                    selectedIndexes[i] = true;
                                                                    nbSelected++;
                                                                }
                                                                else {
                                                                    if (resolved.toString().matches(this._expectedValue.toString().replace("*", ".*"))) {
                                                                        selectedIndexes[i] = true;
                                                                        nbSelected++;
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                            else {
                                                System.err.println("WARN: Empty KObject " + loopObj.uuid());
                                            }
                                        }
                                        catch ($ex$) {
                                            if ($ex$ instanceof java.lang.Exception) {
                                                var e = $ex$;
                                                e.printStackTrace();
                                            }
                                        }
                                    }
                                    var nextStepElement = new Array();
                                    var inserted = 0;
                                    for (var i = 0; i < p_inputs.length; i++) {
                                        if (selectedIndexes[i]) {
                                            nextStepElement[inserted] = p_inputs[i];
                                            inserted++;
                                        }
                                    }
                                    if (p_history != null) {
                                        p_history.addResult(nextStepElement);
                                    }
                                    this._next.execute(nextStepElement, p_history);
                                }
                            };
                            return KFilterAttributeAction;
                        })();
                        actions.KFilterAttributeAction = KFilterAttributeAction;
                        var KFilterAttributeQueryAction = (function () {
                            function KFilterAttributeQueryAction(p_attributeQuery) {
                                this._attributeQuery = p_attributeQuery;
                            }
                            KFilterAttributeQueryAction.prototype.chain = function (p_next) {
                                this._next = p_next;
                            };
                            KFilterAttributeQueryAction.prototype.execute = function (p_inputs, p_history) {
                                if (p_inputs == null || p_inputs.length == 0) {
                                    if (p_history != null) {
                                        p_history.addResult(p_inputs);
                                    }
                                    this._next.execute(p_inputs, p_history);
                                    return;
                                }
                                else {
                                    var selectedIndexes = new Array();
                                    var nbSelected = 0;
                                    for (var i = 0; i < p_inputs.length; i++) {
                                        try {
                                            var loopObj = p_inputs[i];
                                            if (this._attributeQuery == null) {
                                                selectedIndexes[i] = true;
                                                nbSelected++;
                                            }
                                            else {
                                                var params = this.buildParams(this._attributeQuery);
                                                var selectedForNext = [true];
                                                params.each(function (key, param) {
                                                    for (var j = 0; j < loopObj.metaClass().metaAttributes().length; j++) {
                                                        var metaAttribute = loopObj.metaClass().metaAttributes()[j];
                                                        if (metaAttribute.metaName().matches(param.name())) {
                                                            var o_raw = loopObj.get(metaAttribute);
                                                            if (o_raw != null) {
                                                                if (param.value().equals("null")) {
                                                                    if (!param.isNegative()) {
                                                                        selectedForNext[0] = false;
                                                                    }
                                                                }
                                                                else {
                                                                    if (o_raw.toString().matches(param.value())) {
                                                                        if (param.isNegative()) {
                                                                            selectedForNext[0] = false;
                                                                        }
                                                                    }
                                                                    else {
                                                                        if (!param.isNegative()) {
                                                                            selectedForNext[0] = false;
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                            else {
                                                                if (param.value().equals("null") || param.value().equals("*")) {
                                                                    if (param.isNegative()) {
                                                                        selectedForNext[0] = false;
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                });
                                                if (selectedForNext[0]) {
                                                    selectedIndexes[i] = true;
                                                    nbSelected++;
                                                }
                                            }
                                        }
                                        catch ($ex$) {
                                            if ($ex$ instanceof java.lang.Exception) {
                                                var e = $ex$;
                                                e.printStackTrace();
                                            }
                                        }
                                    }
                                    var nextStepElement = new Array();
                                    var inserted = 0;
                                    for (var i = 0; i < p_inputs.length; i++) {
                                        if (selectedIndexes[i]) {
                                            nextStepElement[inserted] = p_inputs[i];
                                            inserted++;
                                        }
                                    }
                                    if (p_history != null) {
                                        p_history.addResult(nextStepElement);
                                    }
                                    this._next.execute(nextStepElement, p_history);
                                }
                            };
                            KFilterAttributeQueryAction.prototype.buildParams = function (p_paramString) {
                                var params = new org.kevoree.modeling.api.map.StringHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                var iParam = 0;
                                var lastStart = iParam;
                                while (iParam < p_paramString.length) {
                                    if (p_paramString.charAt(iParam) == ',') {
                                        var p = p_paramString.substring(lastStart, iParam).trim();
                                        if (!p.equals("") && !p.equals("*")) {
                                            if (p.endsWith("=")) {
                                                p = p + "*";
                                            }
                                            var pArray = p.split("=");
                                            var pObject;
                                            if (pArray.length > 1) {
                                                var paramKey = pArray[0].trim();
                                                var negative = paramKey.endsWith("!");
                                                pObject = new org.kevoree.modeling.api.traversal.selector.KQueryParam(paramKey.replace("!", "").replace("*", ".*"), pArray[1].trim().replace("*", ".*"), negative);
                                                params.put(pObject.name(), pObject);
                                            }
                                        }
                                        lastStart = iParam + 1;
                                    }
                                    iParam = iParam + 1;
                                }
                                var lastParam = p_paramString.substring(lastStart, iParam).trim();
                                if (!lastParam.equals("") && !lastParam.equals("*")) {
                                    if (lastParam.endsWith("=")) {
                                        lastParam = lastParam + "*";
                                    }
                                    var pArray = lastParam.split("=");
                                    var pObject;
                                    if (pArray.length > 1) {
                                        var paramKey = pArray[0].trim();
                                        var negative = paramKey.endsWith("!");
                                        pObject = new org.kevoree.modeling.api.traversal.selector.KQueryParam(paramKey.replace("!", "").replace("*", ".*"), pArray[1].trim().replace("*", ".*"), negative);
                                        params.put(pObject.name(), pObject);
                                    }
                                }
                                return params;
                            };
                            return KFilterAttributeQueryAction;
                        })();
                        actions.KFilterAttributeQueryAction = KFilterAttributeQueryAction;
                        var KFilterNotAttributeAction = (function () {
                            function KFilterNotAttributeAction(p_attribute, p_expectedValue) {
                                this._attribute = p_attribute;
                                this._expectedValue = p_expectedValue;
                            }
                            KFilterNotAttributeAction.prototype.chain = function (p_next) {
                                this._next = p_next;
                            };
                            KFilterNotAttributeAction.prototype.execute = function (p_inputs, p_history) {
                                if (p_inputs == null || p_inputs.length == 0) {
                                    if (p_history != null) {
                                        p_history.addResult(p_inputs);
                                    }
                                    this._next.execute(p_inputs, p_history);
                                }
                                else {
                                    var selectedIndexes = new Array();
                                    var nbSelected = 0;
                                    for (var i = 0; i < p_inputs.length; i++) {
                                        try {
                                            var loopObj = p_inputs[i];
                                            var raw = loopObj.universe().model().manager().entry(loopObj, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                                            if (raw != null) {
                                                if (this._attribute == null) {
                                                    if (this._expectedValue == null) {
                                                        selectedIndexes[i] = true;
                                                        nbSelected++;
                                                    }
                                                    else {
                                                        var addToNext = true;
                                                        for (var j = 0; j < loopObj.metaClass().metaAttributes().length; j++) {
                                                            var ref = loopObj.metaClass().metaAttributes()[j];
                                                            var resolved = raw.get(ref.index());
                                                            if (resolved == null) {
                                                                if (this._expectedValue.toString().equals("*")) {
                                                                    addToNext = false;
                                                                }
                                                            }
                                                            else {
                                                                if (resolved.equals(this._expectedValue)) {
                                                                    addToNext = false;
                                                                }
                                                                else {
                                                                    if (resolved.toString().matches(this._expectedValue.toString().replace("*", ".*"))) {
                                                                        addToNext = false;
                                                                    }
                                                                }
                                                            }
                                                        }
                                                        if (addToNext) {
                                                            selectedIndexes[i] = true;
                                                            nbSelected++;
                                                        }
                                                    }
                                                }
                                                else {
                                                    var translatedAtt = loopObj.internal_transpose_att(this._attribute);
                                                    if (translatedAtt != null) {
                                                        var resolved = raw.get(translatedAtt.index());
                                                        if (this._expectedValue == null) {
                                                            if (resolved != null) {
                                                                selectedIndexes[i] = true;
                                                                nbSelected++;
                                                            }
                                                        }
                                                        else {
                                                            if (resolved == null) {
                                                                if (!this._expectedValue.toString().equals("*")) {
                                                                    selectedIndexes[i] = true;
                                                                    nbSelected++;
                                                                }
                                                            }
                                                            else {
                                                                if (resolved.equals(this._expectedValue)) {
                                                                }
                                                                else {
                                                                    if (resolved.toString().matches(this._expectedValue.toString().replace("*", ".*"))) {
                                                                    }
                                                                    else {
                                                                        selectedIndexes[i] = true;
                                                                        nbSelected++;
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                            else {
                                                System.err.println("WARN: Empty KObject " + loopObj.uuid());
                                            }
                                        }
                                        catch ($ex$) {
                                            if ($ex$ instanceof java.lang.Exception) {
                                                var e = $ex$;
                                                e.printStackTrace();
                                            }
                                        }
                                    }
                                    var nextStepElement = new Array();
                                    var inserted = 0;
                                    for (var i = 0; i < p_inputs.length; i++) {
                                        if (selectedIndexes[i]) {
                                            nextStepElement[inserted] = p_inputs[i];
                                            inserted++;
                                        }
                                    }
                                    if (p_history != null) {
                                        p_history.addResult(nextStepElement);
                                    }
                                    this._next.execute(nextStepElement, p_history);
                                }
                            };
                            return KFilterNotAttributeAction;
                        })();
                        actions.KFilterNotAttributeAction = KFilterNotAttributeAction;
                        var KFinalAction = (function () {
                            function KFinalAction(p_callback) {
                                this._finalCallback = p_callback;
                            }
                            KFinalAction.prototype.chain = function (next) {
                            };
                            KFinalAction.prototype.execute = function (inputs, p_history) {
                                this._finalCallback(inputs);
                            };
                            return KFinalAction;
                        })();
                        actions.KFinalAction = KFinalAction;
                        var KInboundsAction = (function () {
                            function KInboundsAction(p_reference) {
                                this._reference = p_reference;
                            }
                            KInboundsAction.prototype.chain = function (p_next) {
                                this._next = p_next;
                            };
                            KInboundsAction.prototype.execute = function (p_inputs, p_history) {
                                var _this = this;
                                if (p_inputs == null || p_inputs.length == 0) {
                                    if (p_history != null) {
                                        p_history.addResult(p_inputs);
                                    }
                                    this._next.execute(p_inputs, p_history);
                                    return;
                                }
                                else {
                                    var currentView = p_inputs[0].view();
                                    var nextIds = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                    var toFilter = new org.kevoree.modeling.api.map.LongHashMap(p_inputs.length, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                    for (var i = 0; i < p_inputs.length; i++) {
                                        try {
                                            var loopObj = p_inputs[i];
                                            var raw = currentView.universe().model().manager().entry(loopObj, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                                            if (raw != null) {
                                                var elementsKeys = raw.getRef(org.kevoree.modeling.api.data.manager.Index.INBOUNDS_INDEX);
                                                if (elementsKeys != null) {
                                                    if (this._reference == null) {
                                                        for (var j = 0; j < elementsKeys.length; j++) {
                                                            nextIds.put(elementsKeys[j], elementsKeys[j]);
                                                        }
                                                    }
                                                    else {
                                                        for (var j = 0; j < elementsKeys.length; j++) {
                                                            toFilter.put(elementsKeys[j], p_inputs[i]);
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        catch ($ex$) {
                                            if ($ex$ instanceof java.lang.Exception) {
                                                var e = $ex$;
                                                e.printStackTrace();
                                            }
                                        }
                                    }
                                    if (toFilter.size() == 0) {
                                        var trimmed = new Array();
                                        var inserted = [0];
                                        nextIds.each(function (key, value) {
                                            trimmed[inserted[0]] = key;
                                            inserted[0]++;
                                        });
                                        currentView.internalLookupAll(trimmed, function (kObjects) {
                                            _this._next.execute(kObjects, p_history);
                                        });
                                    }
                                    else {
                                        var trimmed = new Array();
                                        var inserted = [0];
                                        toFilter.each(function (key, value) {
                                            trimmed[inserted[0]] = key;
                                            inserted[0]++;
                                        });
                                        currentView.internalLookupAll(trimmed, function (kObjects) {
                                            for (var i = 0; i < trimmed.length; i++) {
                                                if (kObjects[i] != null) {
                                                    var references = kObjects[i].referencesWith(toFilter.get(trimmed[i]));
                                                    for (var h = 0; h < references.length; h++) {
                                                        if (references[h].metaName().equals(_this._reference.metaName())) {
                                                            nextIds.put(kObjects[i].uuid(), kObjects[i].uuid());
                                                        }
                                                    }
                                                }
                                            }
                                            var trimmed2 = new Array();
                                            var inserted2 = [0];
                                            nextIds.each(function (key, value) {
                                                trimmed2[inserted2[0]] = key;
                                                inserted2[0]++;
                                            });
                                            currentView.internalLookupAll(trimmed2, function (kObjects) {
                                                if (p_history != null) {
                                                    p_history.addResult(kObjects);
                                                }
                                                _this._next.execute(kObjects, p_history);
                                            });
                                        });
                                    }
                                }
                            };
                            return KInboundsAction;
                        })();
                        actions.KInboundsAction = KInboundsAction;
                        var KInboundsQueryAction = (function () {
                            function KInboundsQueryAction(p_referenceQuery) {
                                if (this._referenceQuery != null) {
                                    this._referenceQuery = p_referenceQuery.replace("*", ".*");
                                }
                            }
                            KInboundsQueryAction.prototype.chain = function (p_next) {
                                this._next = p_next;
                            };
                            KInboundsQueryAction.prototype.execute = function (p_inputs, p_history) {
                                var _this = this;
                                if (p_inputs == null || p_inputs.length == 0) {
                                    if (p_history != null) {
                                        p_history.addResult(p_inputs);
                                    }
                                    this._next.execute(p_inputs, p_history);
                                    return;
                                }
                                else {
                                    var currentView = p_inputs[0].view();
                                    var nextIds = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                    var toFilter = new org.kevoree.modeling.api.map.LongHashMap(p_inputs.length, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                    for (var i = 0; i < p_inputs.length; i++) {
                                        try {
                                            var loopObj = p_inputs[i];
                                            var raw = currentView.universe().model().manager().entry(loopObj, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                                            if (raw != null) {
                                                var inboundsKeys = raw.getRef(org.kevoree.modeling.api.data.manager.Index.INBOUNDS_INDEX);
                                                if (inboundsKeys != null) {
                                                    if (this._referenceQuery == null) {
                                                        for (var j = 0; j < inboundsKeys.length; j++) {
                                                            nextIds.put(inboundsKeys[j], inboundsKeys[j]);
                                                        }
                                                    }
                                                    else {
                                                        for (var j = 0; j < inboundsKeys.length; j++) {
                                                            toFilter.put(inboundsKeys[j], p_inputs[i]);
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        catch ($ex$) {
                                            if ($ex$ instanceof java.lang.Exception) {
                                                var e = $ex$;
                                                e.printStackTrace();
                                            }
                                        }
                                    }
                                    if (toFilter.size() == 0) {
                                        var trimmed = new Array();
                                        var inserted = [0];
                                        nextIds.each(function (key, value) {
                                            trimmed[inserted[0]] = key;
                                            inserted[0]++;
                                        });
                                        currentView.internalLookupAll(trimmed, function (kObjects) {
                                            _this._next.execute(kObjects, p_history);
                                        });
                                    }
                                    else {
                                        var trimmed = new Array();
                                        var inserted = [0];
                                        toFilter.each(function (key, value) {
                                            trimmed[inserted[0]] = key;
                                            inserted[0]++;
                                        });
                                        currentView.internalLookupAll(trimmed, function (kObjects) {
                                            for (var i = 0; i < trimmed.length; i++) {
                                                if (kObjects[i] != null) {
                                                    var references = kObjects[i].referencesWith(toFilter.get(trimmed[i]));
                                                    for (var h = 0; h < references.length; h++) {
                                                        if (references[h].metaName().matches(_this._referenceQuery)) {
                                                            nextIds.put(kObjects[i].uuid(), kObjects[i].uuid());
                                                        }
                                                    }
                                                }
                                            }
                                            var trimmed2 = new Array();
                                            var inserted2 = [0];
                                            nextIds.each(function (key, value) {
                                                trimmed2[inserted2[0]] = key;
                                                inserted2[0]++;
                                            });
                                            currentView.internalLookupAll(trimmed2, function (kObjects) {
                                                if (p_history != null) {
                                                    p_history.addResult(kObjects);
                                                }
                                                _this._next.execute(kObjects, p_history);
                                            });
                                        });
                                    }
                                }
                            };
                            return KInboundsQueryAction;
                        })();
                        actions.KInboundsQueryAction = KInboundsQueryAction;
                        var KMapAction = (function () {
                            function KMapAction(p_attribute, p_callback) {
                                this._finalCallback = p_callback;
                                this._attribute = p_attribute;
                            }
                            KMapAction.prototype.chain = function (next) {
                            };
                            KMapAction.prototype.execute = function (inputs, p_history) {
                                var selected = new Array();
                                var nbElem = 0;
                                for (var i = 0; i < inputs.length; i++) {
                                    if (inputs[i] != null) {
                                        var resolved = inputs[i].get(this._attribute);
                                        if (resolved != null) {
                                            selected[i] = resolved;
                                            nbElem++;
                                        }
                                    }
                                }
                                var trimmed = new Array();
                                var nbInserted = 0;
                                for (var i = 0; i < inputs.length; i++) {
                                    if (selected[i] != null) {
                                        trimmed[nbInserted] = selected[i];
                                        nbInserted++;
                                    }
                                }
                                this._finalCallback(trimmed);
                            };
                            return KMapAction;
                        })();
                        actions.KMapAction = KMapAction;
                        var KParentsAction = (function () {
                            function KParentsAction() {
                            }
                            KParentsAction.prototype.chain = function (p_next) {
                                this._next = p_next;
                            };
                            KParentsAction.prototype.execute = function (p_inputs, p_history) {
                                var _this = this;
                                if (p_inputs == null || p_inputs.length == 0) {
                                    if (p_history != null) {
                                        p_history.addResult(p_inputs);
                                    }
                                    this._next.execute(p_inputs, p_history);
                                    return;
                                }
                                else {
                                    var currentView = p_inputs[0].view();
                                    var selected = new org.kevoree.modeling.api.map.LongLongHashMap(p_inputs.length, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                    for (var i = 0; i < p_inputs.length; i++) {
                                        try {
                                            var loopObj = p_inputs[i];
                                            var raw = loopObj.universe().model().manager().entry(loopObj, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                                            var resolved = raw.getRef(org.kevoree.modeling.api.data.manager.Index.PARENT_INDEX);
                                            if (resolved != null && resolved.length > 0) {
                                                selected.put(resolved[0], resolved[0]);
                                            }
                                        }
                                        catch ($ex$) {
                                            if ($ex$ instanceof java.lang.Exception) {
                                                var e = $ex$;
                                                e.printStackTrace();
                                            }
                                        }
                                    }
                                    var trimmed = new Array();
                                    var nbInserted = [0];
                                    selected.each(function (key, value) {
                                        trimmed[nbInserted[0]] = key;
                                        nbInserted[0]++;
                                    });
                                    currentView.internalLookupAll(trimmed, function (kObjects) {
                                        if (p_history != null) {
                                            p_history.addResult(kObjects);
                                        }
                                        _this._next.execute(kObjects, p_history);
                                    });
                                }
                            };
                            return KParentsAction;
                        })();
                        actions.KParentsAction = KParentsAction;
                        var KRemoveDuplicateAction = (function () {
                            function KRemoveDuplicateAction() {
                            }
                            KRemoveDuplicateAction.prototype.chain = function (p_next) {
                                this._next = p_next;
                            };
                            KRemoveDuplicateAction.prototype.execute = function (p_inputs, p_history) {
                                var elems = new org.kevoree.modeling.api.map.LongHashMap(p_inputs.length, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                for (var i = 0; i < p_inputs.length; i++) {
                                    elems.put(p_inputs[i].uuid(), p_inputs[i]);
                                }
                                var trimmed = new Array();
                                var nbInserted = [0];
                                elems.each(function (key, value) {
                                    trimmed[nbInserted[0]] = value;
                                    nbInserted[0]++;
                                });
                                if (p_history != null) {
                                    p_history.addResult(trimmed);
                                }
                                this._next.execute(trimmed, p_history);
                            };
                            return KRemoveDuplicateAction;
                        })();
                        actions.KRemoveDuplicateAction = KRemoveDuplicateAction;
                        var KReverseAction = (function () {
                            function KReverseAction() {
                            }
                            KReverseAction.prototype.chain = function (p_next) {
                                this._next = p_next;
                            };
                            KReverseAction.prototype.execute = function (p_inputs, p_history) {
                                if (p_history == null || p_history.historySize() == 0) {
                                    throw new java.lang.RuntimeException("Error during traversal execution, reverse action cannot be called without an history activation before, or history is null");
                                }
                                var selected = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                for (var i = 0; i < p_inputs.length; i++) {
                                    var rawPayload = p_inputs[i].view().universe().model().manager().entry(p_inputs[i], org.kevoree.modeling.api.data.manager.AccessMode.READ);
                                    if (rawPayload != null) {
                                        var loopInbounds = rawPayload.getRef(org.kevoree.modeling.api.data.manager.Index.INBOUNDS_INDEX);
                                        if (loopInbounds != null) {
                                            for (var j = 0; j < loopInbounds.length; j++) {
                                                var previous = p_history.get(loopInbounds[j]);
                                                if (previous != null) {
                                                    selected.put(loopInbounds[j], previous);
                                                }
                                            }
                                        }
                                    }
                                    p_history.remove(p_inputs[i].uuid());
                                }
                                var trimmed = new Array();
                                var nbInsert = [0];
                                selected.each(function (key, value) {
                                    trimmed[nbInsert[0]] = value;
                                    nbInsert[0]++;
                                });
                                this._next.execute(trimmed, p_history);
                            };
                            return KReverseAction;
                        })();
                        actions.KReverseAction = KReverseAction;
                        var KTraverseAction = (function () {
                            function KTraverseAction(p_reference) {
                                this._reference = p_reference;
                            }
                            KTraverseAction.prototype.chain = function (p_next) {
                                this._next = p_next;
                            };
                            KTraverseAction.prototype.execute = function (p_inputs, p_history) {
                                var _this = this;
                                if (p_inputs == null || p_inputs.length == 0) {
                                    if (p_history != null) {
                                        p_history.addResult(p_inputs);
                                    }
                                    this._next.execute(p_inputs, p_history);
                                    return;
                                }
                                else {
                                    var currentView = p_inputs[0].view();
                                    var nextIds = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                    for (var i = 0; i < p_inputs.length; i++) {
                                        try {
                                            var loopObj = p_inputs[i];
                                            var raw = currentView.universe().model().manager().entry(loopObj, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                                            if (raw != null) {
                                                if (this._reference == null) {
                                                    for (var j = 0; j < loopObj.metaClass().metaReferences().length; j++) {
                                                        var ref = loopObj.metaClass().metaReferences()[j];
                                                        var resolved = raw.getRef(ref.index());
                                                        if (resolved != null) {
                                                            for (var k = 0; k < resolved.length; k++) {
                                                                nextIds.put(resolved[k], resolved[k]);
                                                            }
                                                        }
                                                    }
                                                }
                                                else {
                                                    var translatedRef = loopObj.internal_transpose_ref(this._reference);
                                                    if (translatedRef != null) {
                                                        var resolved = raw.getRef(translatedRef.index());
                                                        if (resolved != null) {
                                                            for (var j = 0; j < resolved.length; j++) {
                                                                nextIds.put(resolved[j], resolved[j]);
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        catch ($ex$) {
                                            if ($ex$ instanceof java.lang.Exception) {
                                                var e = $ex$;
                                                e.printStackTrace();
                                            }
                                        }
                                    }
                                    var trimmed = new Array();
                                    var inserted = [0];
                                    nextIds.each(function (key, value) {
                                        trimmed[inserted[0]] = key;
                                        inserted[0]++;
                                    });
                                    currentView.internalLookupAll(trimmed, function (kObjects) {
                                        if (p_history != null) {
                                            p_history.addResult(kObjects);
                                        }
                                        _this._next.execute(kObjects, p_history);
                                    });
                                }
                            };
                            return KTraverseAction;
                        })();
                        actions.KTraverseAction = KTraverseAction;
                        var KTraverseQueryAction = (function () {
                            function KTraverseQueryAction(p_referenceQuery) {
                                this.SEP = ",";
                                this._referenceQuery = p_referenceQuery;
                            }
                            KTraverseQueryAction.prototype.chain = function (p_next) {
                                this._next = p_next;
                            };
                            KTraverseQueryAction.prototype.execute = function (p_inputs, p_history) {
                                var _this = this;
                                if (p_inputs == null || p_inputs.length == 0) {
                                    if (p_history != null) {
                                        p_history.addResult(p_inputs);
                                    }
                                    this._next.execute(p_inputs, p_history);
                                    return;
                                }
                                else {
                                    var currentView = p_inputs[0].view();
                                    var nextIds = new org.kevoree.modeling.api.map.LongLongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                    for (var i = 0; i < p_inputs.length; i++) {
                                        try {
                                            var loopObj = p_inputs[i];
                                            var raw = currentView.universe().model().manager().entry(loopObj, org.kevoree.modeling.api.data.manager.AccessMode.READ);
                                            if (raw != null) {
                                                if (this._referenceQuery == null) {
                                                    for (var j = 0; j < loopObj.metaClass().metaReferences().length; j++) {
                                                        var ref = loopObj.metaClass().metaReferences()[j];
                                                        var resolved = raw.get(ref.index());
                                                        if (resolved != null) {
                                                            var resolvedArr = resolved;
                                                            for (var k = 0; k < resolvedArr.length; k++) {
                                                                var idResolved = resolvedArr[k];
                                                                nextIds.put(idResolved, idResolved);
                                                            }
                                                        }
                                                    }
                                                }
                                                else {
                                                    var queries = this._referenceQuery.split(this.SEP);
                                                    for (var k = 0; k < queries.length; k++) {
                                                        queries[k] = queries[k].replace("*", ".*");
                                                    }
                                                    var loopRefs = loopObj.metaClass().metaReferences();
                                                    for (var h = 0; h < loopRefs.length; h++) {
                                                        var ref = loopRefs[h];
                                                        var selected = false;
                                                        for (var k = 0; k < queries.length; k++) {
                                                            if (ref.metaName().matches(queries[k])) {
                                                                selected = true;
                                                                break;
                                                            }
                                                        }
                                                        if (selected) {
                                                            var resolved = raw.get(ref.index());
                                                            if (resolved != null) {
                                                                var resolvedCasted = resolved;
                                                                for (var j = 0; j < resolvedCasted.length; j++) {
                                                                    nextIds.put(resolvedCasted[j], resolvedCasted[j]);
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        catch ($ex$) {
                                            if ($ex$ instanceof java.lang.Exception) {
                                                var e = $ex$;
                                                e.printStackTrace();
                                            }
                                        }
                                    }
                                    var trimmed = new Array();
                                    var inserted = [0];
                                    nextIds.each(function (key, value) {
                                        trimmed[inserted[0]] = key;
                                        inserted[0]++;
                                    });
                                    currentView.internalLookupAll(trimmed, function (kObjects) {
                                        if (p_history != null) {
                                            p_history.addResult(kObjects);
                                        }
                                        _this._next.execute(kObjects, p_history);
                                    });
                                }
                            };
                            return KTraverseQueryAction;
                        })();
                        actions.KTraverseQueryAction = KTraverseQueryAction;
                    })(actions = traversal.actions || (traversal.actions = {}));
                    var selector;
                    (function (selector) {
                        var KQuery = (function () {
                            function KQuery(relationName, params) {
                                this.relationName = relationName;
                                this.params = params;
                            }
                            KQuery.prototype.toString = function () {
                                return "KQuery{" + "relationName='" + this.relationName + '\'' + ", params='" + this.params + '\'' + '}';
                            };
                            KQuery.buildChain = function (query) {
                                var result = new java.util.ArrayList();
                                if (query == null || query.length == 0) {
                                    return null;
                                }
                                var i = 0;
                                var escaped = false;
                                var previousKQueryStart = 0;
                                var previousKQueryNameEnd = -1;
                                var previousKQueryAttributesEnd = -1;
                                var previousKQueryAttributesStart = 0;
                                while (i < query.length) {
                                    var notLastElem = (i + 1) != query.length;
                                    if (escaped && notLastElem) {
                                        escaped = false;
                                    }
                                    else {
                                        var currentChar = query.charAt(i);
                                        if (currentChar == KQuery.CLOSE_BRACKET && notLastElem) {
                                            previousKQueryAttributesEnd = i;
                                        }
                                        else {
                                            if (currentChar == '\\' && notLastElem) {
                                                escaped = true;
                                            }
                                            else {
                                                if (currentChar == KQuery.OPEN_BRACKET && notLastElem) {
                                                    previousKQueryNameEnd = i;
                                                    previousKQueryAttributesStart = i + 1;
                                                }
                                                else {
                                                    if (currentChar == KQuery.QUERY_SEP || !notLastElem) {
                                                        var relationName;
                                                        var atts = null;
                                                        if (previousKQueryNameEnd == -1) {
                                                            if (notLastElem) {
                                                                previousKQueryNameEnd = i;
                                                            }
                                                            else {
                                                                previousKQueryNameEnd = i + 1;
                                                            }
                                                        }
                                                        else {
                                                            if (previousKQueryAttributesStart != -1) {
                                                                if (previousKQueryAttributesEnd == -1) {
                                                                    if (notLastElem || currentChar == KQuery.QUERY_SEP || currentChar == KQuery.CLOSE_BRACKET) {
                                                                        previousKQueryAttributesEnd = i;
                                                                    }
                                                                    else {
                                                                        previousKQueryAttributesEnd = i + 1;
                                                                    }
                                                                }
                                                                atts = query.substring(previousKQueryAttributesStart, previousKQueryAttributesEnd);
                                                                if (atts.length == 0) {
                                                                    atts = null;
                                                                }
                                                            }
                                                        }
                                                        relationName = query.substring(previousKQueryStart, previousKQueryNameEnd);
                                                        var additionalQuery = new org.kevoree.modeling.api.traversal.selector.KQuery(relationName, atts);
                                                        result.add(additionalQuery);
                                                        previousKQueryStart = i + 1;
                                                        previousKQueryNameEnd = -1;
                                                        previousKQueryAttributesEnd = -1;
                                                        previousKQueryAttributesStart = -1;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    i = i + 1;
                                }
                                return result;
                            };
                            KQuery.OPEN_BRACKET = '[';
                            KQuery.CLOSE_BRACKET = ']';
                            KQuery.QUERY_SEP = '/';
                            return KQuery;
                        })();
                        selector.KQuery = KQuery;
                        var KQueryParam = (function () {
                            function KQueryParam(p_name, p_value, p_negative) {
                                this._name = p_name;
                                this._value = p_value;
                                this._negative = p_negative;
                            }
                            KQueryParam.prototype.name = function () {
                                return this._name;
                            };
                            KQueryParam.prototype.value = function () {
                                return this._value;
                            };
                            KQueryParam.prototype.isNegative = function () {
                                return this._negative;
                            };
                            return KQueryParam;
                        })();
                        selector.KQueryParam = KQueryParam;
                        var KSelector = (function () {
                            function KSelector() {
                            }
                            KSelector.select = function (root, query, callback) {
                                if (callback == null) {
                                    return;
                                }
                                var current = null;
                                var extracted = org.kevoree.modeling.api.traversal.selector.KQuery.buildChain(query);
                                if (extracted != null) {
                                    for (var i = 0; i < extracted.size(); i++) {
                                        if (current == null) {
                                            if (extracted.get(i).relationName.equals("..")) {
                                                current = root.traversal().inboundsQuery("*");
                                            }
                                            else {
                                                if (extracted.get(i).relationName.startsWith("..")) {
                                                    current = root.traversal().inboundsQuery(extracted.get(i).relationName.substring(2));
                                                }
                                                else {
                                                    if (extracted.get(i).relationName.equals("@parent")) {
                                                        current = root.traversal().parents();
                                                    }
                                                    else {
                                                        current = root.traversal().traverseQuery(extracted.get(i).relationName);
                                                    }
                                                }
                                            }
                                        }
                                        else {
                                            if (extracted.get(i).relationName.equals("..")) {
                                                current = current.inboundsQuery("*");
                                            }
                                            else {
                                                if (extracted.get(i).relationName.startsWith("..")) {
                                                    current = current.inboundsQuery(extracted.get(i).relationName.substring(2));
                                                }
                                                else {
                                                    if (extracted.get(i).relationName.equals("@parent")) {
                                                        current = current.parents();
                                                    }
                                                    else {
                                                        current = current.traverseQuery(extracted.get(i).relationName);
                                                    }
                                                }
                                            }
                                        }
                                        current = current.attributeQuery(extracted.get(i).params);
                                    }
                                }
                                if (current != null) {
                                    current.done().then(callback);
                                }
                                else {
                                    callback(new Array());
                                }
                            };
                            return KSelector;
                        })();
                        selector.KSelector = KSelector;
                    })(selector = traversal.selector || (traversal.selector = {}));
                })(traversal = api.traversal || (api.traversal = {}));
                var util;
                (function (util) {
                    var ArrayUtils = (function () {
                        function ArrayUtils() {
                        }
                        ArrayUtils.add = function (previous, toAdd) {
                            if (org.kevoree.modeling.api.util.ArrayUtils.contains(previous, toAdd) != -1) {
                                return previous;
                            }
                            var newArray = new Array();
                            System.arraycopy(previous, 0, newArray, 0, previous.length);
                            newArray[previous.length] = toAdd;
                            return newArray;
                        };
                        ArrayUtils.remove = function (previous, toAdd) {
                            var indexToRemove = org.kevoree.modeling.api.util.ArrayUtils.contains(previous, toAdd);
                            if (indexToRemove == -1) {
                                return previous;
                            }
                            else {
                                var newArray = new Array();
                                System.arraycopy(previous, 0, newArray, 0, indexToRemove);
                                System.arraycopy(previous, indexToRemove + 1, newArray, indexToRemove, previous.length - indexToRemove - 1);
                                return newArray;
                            }
                        };
                        ArrayUtils.clone = function (previous) {
                            var newArray = new Array();
                            System.arraycopy(previous, 0, newArray, 0, previous.length);
                            return newArray;
                        };
                        ArrayUtils.contains = function (previous, value) {
                            for (var i = 0; i < previous.length; i++) {
                                if (previous[i] == value) {
                                    return i;
                                }
                            }
                            return -1;
                        };
                        return ArrayUtils;
                    })();
                    util.ArrayUtils = ArrayUtils;
                    var Checker = (function () {
                        function Checker() {
                        }
                        Checker.isDefined = function (param) {
                            return param != undefined && param != null;
                        };
                        return Checker;
                    })();
                    util.Checker = Checker;
                    var DefaultOperationManager = (function () {
                        function DefaultOperationManager(p_manager) {
                            this.remoteCallCallbacks = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                            this._callbackId = 0;
                            this.staticOperations = new org.kevoree.modeling.api.map.IntHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                            this.instanceOperations = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                            this._manager = p_manager;
                        }
                        DefaultOperationManager.prototype.registerOperation = function (operation, callback, target) {
                            if (target == null) {
                                var clazzOperations = this.staticOperations.get(operation.origin().index());
                                if (clazzOperations == null) {
                                    clazzOperations = new org.kevoree.modeling.api.map.IntHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                    this.staticOperations.put(operation.origin().index(), clazzOperations);
                                }
                                clazzOperations.put(operation.index(), callback);
                            }
                            else {
                                var objectOperations = this.instanceOperations.get(target.uuid());
                                if (objectOperations == null) {
                                    objectOperations = new org.kevoree.modeling.api.map.IntHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                    this.instanceOperations.put(target.uuid(), objectOperations);
                                }
                                objectOperations.put(operation.index(), callback);
                            }
                        };
                        DefaultOperationManager.prototype.searchOperation = function (source, clazz, operation) {
                            var objectOperations = this.instanceOperations.get(source);
                            if (objectOperations != null) {
                                return objectOperations.get(operation);
                            }
                            var clazzOperations = this.staticOperations.get(clazz);
                            if (clazzOperations != null) {
                                return clazzOperations.get(operation);
                            }
                            return null;
                        };
                        DefaultOperationManager.prototype.call = function (source, operation, param, callback) {
                            var operationCore = this.searchOperation(source.uuid(), operation.origin().index(), operation.index());
                            if (operationCore != null) {
                                operationCore(source, param, callback);
                            }
                            else {
                                this.sendToRemote(source, operation, param, callback);
                            }
                        };
                        DefaultOperationManager.prototype.sendToRemote = function (source, operation, param, callback) {
                            var stringParams = new Array();
                            for (var i = 0; i < param.length; i++) {
                                stringParams[i] = param[i].toString();
                            }
                            var contentKey = new org.kevoree.modeling.api.data.cache.KContentKey(org.kevoree.modeling.api.data.cache.KContentKey.GLOBAL_SEGMENT_DATA_RAW, source.universe().key(), source.now(), source.uuid());
                            var operationCall = new org.kevoree.modeling.api.msg.KOperationCallMessage();
                            operationCall.id = this.nextKey();
                            operationCall.key = contentKey;
                            operationCall.classIndex = source.metaClass().index();
                            operationCall.opIndex = operation.index();
                            operationCall.params = stringParams;
                            this.remoteCallCallbacks.put(operationCall.id, callback);
                            this._manager.cdn().send(operationCall);
                        };
                        DefaultOperationManager.prototype.nextKey = function () {
                            if (this._callbackId == org.kevoree.modeling.api.KConfig.CALLBACK_HISTORY) {
                                this._callbackId = 0;
                            }
                            else {
                                this._callbackId++;
                            }
                            return this._callbackId;
                        };
                        DefaultOperationManager.prototype.operationEventReceived = function (operationEvent) {
                            var _this = this;
                            if (operationEvent.type() == org.kevoree.modeling.api.msg.KMessageLoader.OPERATION_RESULT_TYPE) {
                                var operationResult = operationEvent;
                                var cb = this.remoteCallCallbacks.get(operationResult.id);
                                if (cb != null) {
                                    cb(operationResult.value);
                                }
                            }
                            else {
                                if (operationEvent.type() == org.kevoree.modeling.api.msg.KMessageLoader.OPERATION_CALL_TYPE) {
                                    var operationCall = operationEvent;
                                    var sourceKey = operationCall.key;
                                    var operationCore = this.searchOperation(sourceKey.obj(), operationCall.classIndex, operationCall.opIndex);
                                    if (operationCore != null) {
                                        var view = this._manager.model().universe(sourceKey.universe()).time(sourceKey.time());
                                        view.lookup(sourceKey.obj()).then(function (kObject) {
                                            if (kObject != null) {
                                                operationCore(kObject, operationCall.params, function (o) {
                                                    var operationResultMessage = new org.kevoree.modeling.api.msg.KOperationResultMessage();
                                                    operationResultMessage.key = operationCall.key;
                                                    operationResultMessage.id = operationCall.id;
                                                    operationResultMessage.value = o.toString();
                                                    _this._manager.cdn().send(operationResultMessage);
                                                });
                                            }
                                        });
                                    }
                                }
                                else {
                                    System.err.println("BAD ROUTING !");
                                }
                            }
                        };
                        return DefaultOperationManager;
                    })();
                    util.DefaultOperationManager = DefaultOperationManager;
                })(util = api.util || (api.util = {}));
                var xmi;
                (function (xmi) {
                    var SerializationContext = (function () {
                        function SerializationContext() {
                            this.ignoreGeneratedID = false;
                            this.addressTable = new org.kevoree.modeling.api.map.LongHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                            this.elementsCount = new org.kevoree.modeling.api.map.StringHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                            this.packageList = new java.util.ArrayList();
                        }
                        return SerializationContext;
                    })();
                    xmi.SerializationContext = SerializationContext;
                    var XMILoadingContext = (function () {
                        function XMILoadingContext() {
                            this.loadedRoots = null;
                            this.resolvers = new java.util.ArrayList();
                            this.map = new org.kevoree.modeling.api.map.StringHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                            this.elementsCount = new org.kevoree.modeling.api.map.StringHashMap(org.kevoree.modeling.api.KConfig.CACHE_INIT_SIZE, org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                        }
                        return XMILoadingContext;
                    })();
                    xmi.XMILoadingContext = XMILoadingContext;
                    var XMIModelLoader = (function () {
                        function XMIModelLoader() {
                        }
                        XMIModelLoader.unescapeXml = function (src) {
                            var builder = null;
                            var i = 0;
                            while (i < src.length) {
                                var c = src.charAt(i);
                                if (c == '&') {
                                    if (builder == null) {
                                        builder = new java.lang.StringBuilder();
                                        builder.append(src.substring(0, i));
                                    }
                                    if (src.charAt(i + 1) == 'a') {
                                        if (src.charAt(i + 2) == 'm') {
                                            builder.append("&");
                                            i = i + 5;
                                        }
                                        else {
                                            if (src.charAt(i + 2) == 'p') {
                                                builder.append("'");
                                                i = i + 6;
                                            }
                                        }
                                    }
                                    else {
                                        if (src.charAt(i + 1) == 'q') {
                                            builder.append("\"");
                                            i = i + 6;
                                        }
                                        else {
                                            if (src.charAt(i + 1) == 'l') {
                                                builder.append("<");
                                                i = i + 4;
                                            }
                                            else {
                                                if (src.charAt(i + 1) == 'g') {
                                                    builder.append(">");
                                                    i = i + 4;
                                                }
                                            }
                                        }
                                    }
                                }
                                else {
                                    if (builder != null) {
                                        builder.append(c);
                                    }
                                    i++;
                                }
                            }
                            if (builder != null) {
                                return builder.toString();
                            }
                            else {
                                return src;
                            }
                        };
                        XMIModelLoader.load = function (p_view, str, callback) {
                            var parser = new org.kevoree.modeling.api.xmi.XmlParser(str);
                            if (!parser.hasNext()) {
                                callback(null);
                            }
                            else {
                                var context = new org.kevoree.modeling.api.xmi.XMILoadingContext();
                                context.successCallback = callback;
                                context.xmiReader = parser;
                                org.kevoree.modeling.api.xmi.XMIModelLoader.deserialize(p_view, context);
                            }
                        };
                        XMIModelLoader.deserialize = function (p_view, context) {
                            try {
                                var nsURI;
                                var reader = context.xmiReader;
                                while (reader.hasNext()) {
                                    var nextTag = reader.next();
                                    if (nextTag.equals(org.kevoree.modeling.api.xmi.XmlToken.START_TAG)) {
                                        var localName = reader.getLocalName();
                                        if (localName != null) {
                                            var ns = new org.kevoree.modeling.api.map.StringHashMap(reader.getAttributeCount(), org.kevoree.modeling.api.KConfig.CACHE_LOAD_FACTOR);
                                            for (var i = 0; i < reader.getAttributeCount() - 1; i++) {
                                                var attrLocalName = reader.getAttributeLocalName(i);
                                                var attrLocalValue = reader.getAttributeValue(i);
                                                if (attrLocalName.equals(XMIModelLoader.LOADER_XMI_NS_URI)) {
                                                    nsURI = attrLocalValue;
                                                }
                                                ns.put(attrLocalName, attrLocalValue);
                                            }
                                            var xsiType = reader.getTagPrefix();
                                            var realTypeName = ns.get(xsiType);
                                            if (realTypeName == null) {
                                                realTypeName = xsiType;
                                            }
                                            context.loadedRoots = org.kevoree.modeling.api.xmi.XMIModelLoader.loadObject(p_view, context, "/", xsiType + "." + localName);
                                        }
                                    }
                                }
                                for (var i = 0; i < context.resolvers.size(); i++) {
                                    context.resolvers.get(i).run();
                                }
                                p_view.setRoot(context.loadedRoots);
                                context.successCallback(null);
                            }
                            catch ($ex$) {
                                if ($ex$ instanceof java.lang.Exception) {
                                    var e = $ex$;
                                    context.successCallback(e);
                                }
                            }
                        };
                        XMIModelLoader.callFactory = function (p_view, ctx, objectType) {
                            var modelElem = null;
                            if (objectType != null) {
                                modelElem = p_view.createByName(objectType);
                                if (modelElem == null) {
                                    var xsiType = null;
                                    for (var i = 0; i < (ctx.xmiReader.getAttributeCount() - 1); i++) {
                                        var localName = ctx.xmiReader.getAttributeLocalName(i);
                                        var xsi = ctx.xmiReader.getAttributePrefix(i);
                                        if (localName.equals(XMIModelLoader.LOADER_XMI_LOCAL_NAME) && xsi.equals(XMIModelLoader.LOADER_XMI_XSI)) {
                                            xsiType = ctx.xmiReader.getAttributeValue(i);
                                            break;
                                        }
                                    }
                                    if (xsiType != null) {
                                        var realTypeName = xsiType.substring(0, xsiType.lastIndexOf(":"));
                                        var realName = xsiType.substring(xsiType.lastIndexOf(":") + 1, xsiType.length);
                                        modelElem = p_view.createByName(realTypeName + "." + realName);
                                    }
                                }
                            }
                            else {
                                modelElem = p_view.createByName(ctx.xmiReader.getLocalName());
                            }
                            return modelElem;
                        };
                        XMIModelLoader.loadObject = function (p_view, ctx, xmiAddress, objectType) {
                            var elementTagName = ctx.xmiReader.getLocalName();
                            var modelElem = org.kevoree.modeling.api.xmi.XMIModelLoader.callFactory(p_view, ctx, objectType);
                            if (modelElem == null) {
                                throw new java.lang.Exception("Could not create an object for local name " + elementTagName);
                            }
                            ctx.map.put(xmiAddress, modelElem);
                            for (var i = 0; i < ctx.xmiReader.getAttributeCount(); i++) {
                                var prefix = ctx.xmiReader.getAttributePrefix(i);
                                if (prefix == null || prefix.equals("")) {
                                    var attrName = ctx.xmiReader.getAttributeLocalName(i).trim();
                                    var valueAtt = ctx.xmiReader.getAttributeValue(i).trim();
                                    if (valueAtt != null) {
                                        var metaElement = modelElem.metaClass().metaByName(attrName);
                                        if (metaElement != null && metaElement.metaType().equals(org.kevoree.modeling.api.meta.MetaType.ATTRIBUTE)) {
                                            modelElem.set(metaElement, org.kevoree.modeling.api.xmi.XMIModelLoader.unescapeXml(valueAtt));
                                        }
                                        else {
                                            if (metaElement != null && metaElement instanceof org.kevoree.modeling.api.abs.AbstractMetaReference) {
                                                var referenceArray = valueAtt.split(" ");
                                                for (var j = 0; j < referenceArray.length; j++) {
                                                    var xmiRef = referenceArray[j];
                                                    var adjustedRef = (xmiRef.startsWith("#") ? xmiRef.substring(1) : xmiRef);
                                                    adjustedRef = adjustedRef.replace(".0", "");
                                                    var ref = ctx.map.get(adjustedRef);
                                                    if (ref != null) {
                                                        modelElem.mutate(org.kevoree.modeling.api.KActionType.ADD, metaElement, ref);
                                                    }
                                                    else {
                                                        ctx.resolvers.add(new org.kevoree.modeling.api.xmi.XMIResolveCommand(ctx, modelElem, org.kevoree.modeling.api.KActionType.ADD, attrName, adjustedRef));
                                                    }
                                                }
                                            }
                                            else {
                                            }
                                        }
                                    }
                                }
                            }
                            var done = false;
                            while (!done) {
                                if (ctx.xmiReader.hasNext()) {
                                    var tok = ctx.xmiReader.next();
                                    if (tok.equals(org.kevoree.modeling.api.xmi.XmlToken.START_TAG)) {
                                        var subElemName = ctx.xmiReader.getLocalName();
                                        var key = xmiAddress + "/@" + subElemName;
                                        var i = ctx.elementsCount.get(key);
                                        if (i == null) {
                                            i = 0;
                                            ctx.elementsCount.put(key, i);
                                        }
                                        var subElementId = xmiAddress + "/@" + subElemName + (i != 0 ? "." + i : "");
                                        var containedElement = org.kevoree.modeling.api.xmi.XMIModelLoader.loadObject(p_view, ctx, subElementId, subElemName);
                                        modelElem.mutate(org.kevoree.modeling.api.KActionType.ADD, modelElem.metaClass().metaByName(subElemName), containedElement);
                                        ctx.elementsCount.put(xmiAddress + "/@" + subElemName, i + 1);
                                    }
                                    else {
                                        if (tok.equals(org.kevoree.modeling.api.xmi.XmlToken.END_TAG)) {
                                            if (ctx.xmiReader.getLocalName().equals(elementTagName)) {
                                                done = true;
                                            }
                                        }
                                    }
                                }
                                else {
                                    done = true;
                                }
                            }
                            return modelElem;
                        };
                        XMIModelLoader.LOADER_XMI_LOCAL_NAME = "type";
                        XMIModelLoader.LOADER_XMI_XSI = "xsi";
                        XMIModelLoader.LOADER_XMI_NS_URI = "nsURI";
                        return XMIModelLoader;
                    })();
                    xmi.XMIModelLoader = XMIModelLoader;
                    var XMIModelSerializer = (function () {
                        function XMIModelSerializer() {
                        }
                        XMIModelSerializer.save = function (model, callback) {
                            if (model == null) {
                                callback(null);
                            }
                            else {
                                var context = new org.kevoree.modeling.api.xmi.SerializationContext();
                                context.model = model;
                                context.finishCallback = callback;
                                context.attributesVisitor = function (metaAttribute, value) {
                                    if (value != null) {
                                        if (context.ignoreGeneratedID && metaAttribute.metaName().equals("generated_KMF_ID")) {
                                            return;
                                        }
                                        context.printer.append(" " + metaAttribute.metaName() + "=\"");
                                        org.kevoree.modeling.api.xmi.XMIModelSerializer.escapeXml(context.printer, value.toString());
                                        context.printer.append("\"");
                                    }
                                };
                                context.printer = new java.lang.StringBuilder();
                                context.addressTable.put(model.uuid(), "/");
                                var addressCreationTask = context.model.visit(org.kevoree.modeling.api.VisitRequest.CONTAINED, function (elem) {
                                    var parentXmiAddress = context.addressTable.get(elem.parentUuid());
                                    var key = parentXmiAddress + "/@" + elem.referenceInParent().metaName();
                                    var i = context.elementsCount.get(key);
                                    if (i == null) {
                                        i = 0;
                                        context.elementsCount.put(key, i);
                                    }
                                    context.addressTable.put(elem.uuid(), parentXmiAddress + "/@" + elem.referenceInParent().metaName() + "." + i);
                                    context.elementsCount.put(parentXmiAddress + "/@" + elem.referenceInParent().metaName(), i + 1);
                                    var pack = elem.metaClass().metaName().substring(0, elem.metaClass().metaName().lastIndexOf('.'));
                                    if (!context.packageList.contains(pack)) {
                                        context.packageList.add(pack);
                                    }
                                    return org.kevoree.modeling.api.VisitResult.CONTINUE;
                                });
                                var serializationTask = context.model.universe().model().defer();
                                serializationTask.wait(addressCreationTask);
                                serializationTask.setJob(function (currentTask) {
                                    context.printer.append("\n");
                                    context.printer.append("<" + org.kevoree.modeling.api.xmi.XMIModelSerializer.formatMetaClassName(context.model.metaClass().metaName()).replace(".", "_"));
                                    context.printer.append(" xmlns:xsi=\"http://wwww.w3.org/2001/XMLSchema-instance\"");
                                    context.printer.append(" xmi:version=\"2.0\"");
                                    context.printer.append(" xmlns:xmi=\"http://www.omg.org/XMI\"");
                                    var index = 0;
                                    while (index < context.packageList.size()) {
                                        context.printer.append(" xmlns:" + context.packageList.get(index).replace(".", "_") + "=\"http://" + context.packageList.get(index) + "\"");
                                        index++;
                                    }
                                    context.model.visitAttributes(context.attributesVisitor);
                                    var nonContainedRefsTasks = context.model.universe().model().defer();
                                    for (var i = 0; i < context.model.metaClass().metaReferences().length; i++) {
                                        if (!context.model.metaClass().metaReferences()[i].contained()) {
                                            nonContainedRefsTasks.wait(org.kevoree.modeling.api.xmi.XMIModelSerializer.nonContainedReferenceTaskMaker(context.model.metaClass().metaReferences()[i], context, context.model));
                                        }
                                    }
                                    nonContainedRefsTasks.setJob(function (currentTask) {
                                        context.printer.append(">\n");
                                        var containedRefsTasks = context.model.universe().model().defer();
                                        for (var i = 0; i < context.model.metaClass().metaReferences().length; i++) {
                                            if (context.model.metaClass().metaReferences()[i].contained()) {
                                                containedRefsTasks.wait(org.kevoree.modeling.api.xmi.XMIModelSerializer.containedReferenceTaskMaker(context.model.metaClass().metaReferences()[i], context, context.model));
                                            }
                                        }
                                        containedRefsTasks.setJob(function (currentTask) {
                                            context.printer.append("\n");
                                            context.finishCallback(context.printer.toString());
                                        });
                                        containedRefsTasks.ready();
                                    });
                                    nonContainedRefsTasks.ready();
                                });
                                serializationTask.ready();
                            }
                        };
                        XMIModelSerializer.escapeXml = function (ostream, chain) {
                            if (chain == null) {
                                return;
                            }
                            var i = 0;
                            var max = chain.length;
                            while (i < max) {
                                var c = chain.charAt(i);
                                if (c == '"') {
                                    ostream.append(""");
                                }
                                else {
                                    if (c == '&') {
                                        ostream.append("&");
                                    }
                                    else {
                                        if (c == '\'') {
                                            ostream.append("'");
                                        }
                                        else {
                                            if (c == '<') {
                                                ostream.append("<");
                                            }
                                            else {
                                                if (c == '>') {
                                                    ostream.append(">");
                                                }
                                                else {
                                                    ostream.append(c);
                                                }
                                            }
                                        }
                                    }
                                }
                                i = i + 1;
                            }
                        };
                        XMIModelSerializer.formatMetaClassName = function (metaClassName) {
                            var lastPoint = metaClassName.lastIndexOf('.');
                            var pack = metaClassName.substring(0, lastPoint);
                            var cls = metaClassName.substring(lastPoint + 1);
                            return pack + ":" + cls;
                        };
                        XMIModelSerializer.nonContainedReferenceTaskMaker = function (ref, p_context, p_currentElement) {
                            var allTask = p_currentElement.ref(ref);
                            var thisTask = p_context.model.universe().model().defer();
                            thisTask.wait(allTask);
                            thisTask.setJob(function (currentTask) {
                                try {
                                    var objects = currentTask.resultByDefer(allTask);
                                    for (var i = 0; i < objects.length; i++) {
                                        var adjustedAddress = p_context.addressTable.get(objects[i].uuid());
                                        p_context.printer.append(" " + ref.metaName() + "=\"" + adjustedAddress + "\"");
                                    }
                                }
                                catch ($ex$) {
                                    if ($ex$ instanceof java.lang.Exception) {
                                        var e = $ex$;
                                        e.printStackTrace();
                                    }
                                }
                            });
                            thisTask.ready();
                            return thisTask;
                        };
                        XMIModelSerializer.containedReferenceTaskMaker = function (ref, context, currentElement) {
                            var allTask = currentElement.ref(ref);
                            var thisTask = context.model.universe().model().defer();
                            thisTask.wait(allTask);
                            thisTask.setJob(function (currentTask) {
                                try {
                                    if (currentTask.resultByDefer(allTask) != null) {
                                        var objs = currentTask.resultByDefer(allTask);
                                        for (var i = 0; i < objs.length; i++) {
                                            var elem = objs[i];
                                            context.printer.append("<");
                                            context.printer.append(ref.metaName());
                                            context.printer.append(" xsi:type=\"" + org.kevoree.modeling.api.xmi.XMIModelSerializer.formatMetaClassName(elem.metaClass().metaName()) + "\"");
                                            elem.visitAttributes(context.attributesVisitor);
                                            var nonContainedRefsTasks = context.model.universe().model().defer();
                                            for (var j = 0; j < elem.metaClass().metaReferences().length; j++) {
                                                if (!elem.metaClass().metaReferences()[i].contained()) {
                                                    nonContainedRefsTasks.wait(org.kevoree.modeling.api.xmi.XMIModelSerializer.nonContainedReferenceTaskMaker(elem.metaClass().metaReferences()[i], context, elem));
                                                }
                                            }
                                            nonContainedRefsTasks.setJob(function (currentTask) {
                                                context.printer.append(">\n");
                                                var containedRefsTasks = context.model.universe().model().defer();
                                                for (var i = 0; i < elem.metaClass().metaReferences().length; i++) {
                                                    if (elem.metaClass().metaReferences()[i].contained()) {
                                                        containedRefsTasks.wait(org.kevoree.modeling.api.xmi.XMIModelSerializer.containedReferenceTaskMaker(elem.metaClass().metaReferences()[i], context, elem));
                                                    }
                                                }
                                                containedRefsTasks.setJob(function (currentTask) {
                                                    context.printer.append("');
                                                    context.printer.append("\n");
                                                });
                                                containedRefsTasks.ready();
                                            });
                                            nonContainedRefsTasks.ready();
                                        }
                                    }
                                }
                                catch ($ex$) {
                                    if ($ex$ instanceof java.lang.Exception) {
                                        var e = $ex$;
                                        e.printStackTrace();
                                    }
                                }
                            });
                            thisTask.ready();
                            return thisTask;
                        };
                        return XMIModelSerializer;
                    })();
                    xmi.XMIModelSerializer = XMIModelSerializer;
                    var XMIResolveCommand = (function () {
                        function XMIResolveCommand(context, target, mutatorType, refName, ref) {
                            this.context = context;
                            this.target = target;
                            this.mutatorType = mutatorType;
                            this.refName = refName;
                            this.ref = ref;
                        }
                        XMIResolveCommand.prototype.run = function () {
                            var referencedElement = this.context.map.get(this.ref);
                            if (referencedElement != null) {
                                this.target.mutate(this.mutatorType, this.target.metaClass().metaByName(this.refName), referencedElement);
                                return;
                            }
                            referencedElement = this.context.map.get("/");
                            if (referencedElement != null) {
                                this.target.mutate(this.mutatorType, this.target.metaClass().metaByName(this.refName), referencedElement);
                                return;
                            }
                            throw new java.lang.Exception("KMF Load error : reference " + this.ref + " not found in map when trying to  " + this.mutatorType + " " + this.refName + "  on " + this.target.metaClass().metaName() + "(uuid:" + this.target.uuid() + ")");
                        };
                        return XMIResolveCommand;
                    })();
                    xmi.XMIResolveCommand = XMIResolveCommand;
                    var XmiFormat = (function () {
                        function XmiFormat(p_view) {
                            this._view = p_view;
                        }
                        XmiFormat.prototype.save = function (model) {
                            var wrapper = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            org.kevoree.modeling.api.xmi.XMIModelSerializer.save(model, wrapper.initCallback());
                            return wrapper;
                        };
                        XmiFormat.prototype.saveRoot = function () {
                            var wrapper = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            this._view.universe().model().manager().getRoot(this._view, function (root) {
                                if (root == null) {
                                    wrapper.initCallback()(null);
                                }
                                else {
                                    org.kevoree.modeling.api.xmi.XMIModelSerializer.save(root, wrapper.initCallback());
                                }
                            });
                            return wrapper;
                        };
                        XmiFormat.prototype.load = function (payload) {
                            var wrapper = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                            org.kevoree.modeling.api.xmi.XMIModelLoader.load(this._view, payload, wrapper.initCallback());
                            return wrapper;
                        };
                        return XmiFormat;
                    })();
                    xmi.XmiFormat = XmiFormat;
                    var XmlParser = (function () {
                        function XmlParser(str) {
                            this.current = 0;
                            this.readSingleton = false;
                            this.attributesNames = new java.util.ArrayList();
                            this.attributesPrefixes = new java.util.ArrayList();
                            this.attributesValues = new java.util.ArrayList();
                            this.attributeName = new java.lang.StringBuilder();
                            this.attributeValue = new java.lang.StringBuilder();
                            this.payload = str;
                            this.currentChar = this.readChar();
                        }
                        XmlParser.prototype.getTagPrefix = function () {
                            return this.tagPrefix;
                        };
                        XmlParser.prototype.hasNext = function () {
                            this.read_lessThan();
                            return this.current < this.payload.length;
                        };
                        XmlParser.prototype.getLocalName = function () {
                            return this.tagName;
                        };
                        XmlParser.prototype.getAttributeCount = function () {
                            return this.attributesNames.size();
                        };
                        XmlParser.prototype.getAttributeLocalName = function (i) {
                            return this.attributesNames.get(i);
                        };
                        XmlParser.prototype.getAttributePrefix = function (i) {
                            return this.attributesPrefixes.get(i);
                        };
                        XmlParser.prototype.getAttributeValue = function (i) {
                            return this.attributesValues.get(i);
                        };
                        XmlParser.prototype.readChar = function () {
                            if (this.current < this.payload.length) {
                                var re = this.payload.charAt(this.current);
                                this.current++;
                                return re;
                            }
                            return '\0';
                        };
                        XmlParser.prototype.next = function () {
                            if (this.readSingleton) {
                                this.readSingleton = false;
                                return org.kevoree.modeling.api.xmi.XmlToken.END_TAG;
                            }
                            if (!this.hasNext()) {
                                return org.kevoree.modeling.api.xmi.XmlToken.END_DOCUMENT;
                            }
                            this.attributesNames.clear();
                            this.attributesPrefixes.clear();
                            this.attributesValues.clear();
                            this.read_lessThan();
                            this.currentChar = this.readChar();
                            if (this.currentChar == '?') {
                                this.currentChar = this.readChar();
                                this.read_xmlHeader();
                                return org.kevoree.modeling.api.xmi.XmlToken.XML_HEADER;
                            }
                            else {
                                if (this.currentChar == '!') {
                                    do {
                                        this.currentChar = this.readChar();
                                    } while (this.currentChar != '>');
                                    return org.kevoree.modeling.api.xmi.XmlToken.COMMENT;
                                }
                                else {
                                    if (this.currentChar == '/') {
                                        this.currentChar = this.readChar();
                                        this.read_closingTag();
                                        return org.kevoree.modeling.api.xmi.XmlToken.END_TAG;
                                    }
                                    else {
                                        this.read_openTag();
                                        if (this.currentChar == '/') {
                                            this.read_upperThan();
                                            this.readSingleton = true;
                                        }
                                        return org.kevoree.modeling.api.xmi.XmlToken.START_TAG;
                                    }
                                }
                            }
                        };
                        XmlParser.prototype.read_lessThan = function () {
                            while (this.currentChar != '<' && this.currentChar != '\0') {
                                this.currentChar = this.readChar();
                            }
                        };
                        XmlParser.prototype.read_upperThan = function () {
                            while (this.currentChar != '>') {
                                this.currentChar = this.readChar();
                            }
                        };
                        XmlParser.prototype.read_xmlHeader = function () {
                            this.read_tagName();
                            this.read_attributes();
                            this.read_upperThan();
                        };
                        XmlParser.prototype.read_closingTag = function () {
                            this.read_tagName();
                            this.read_upperThan();
                        };
                        XmlParser.prototype.read_openTag = function () {
                            this.read_tagName();
                            if (this.currentChar != '>' && this.currentChar != '/') {
                                this.read_attributes();
                            }
                        };
                        XmlParser.prototype.read_tagName = function () {
                            this.tagName = "" + this.currentChar;
                            this.tagPrefix = null;
                            this.currentChar = this.readChar();
                            while (this.currentChar != ' ' && this.currentChar != '>' && this.currentChar != '/') {
                                if (this.currentChar == ':') {
                                    this.tagPrefix = this.tagName;
                                    this.tagName = "";
                                }
                                else {
                                    this.tagName += this.currentChar;
                                }
                                this.currentChar = this.readChar();
                            }
                        };
                        XmlParser.prototype.read_attributes = function () {
                            var end_of_tag = false;
                            while (this.currentChar == ' ') {
                                this.currentChar = this.readChar();
                            }
                            while (!end_of_tag) {
                                while (this.currentChar != '=') {
                                    if (this.currentChar == ':') {
                                        this.attributePrefix = this.attributeName.toString();
                                        this.attributeName = new java.lang.StringBuilder();
                                    }
                                    else {
                                        this.attributeName.append(this.currentChar);
                                    }
                                    this.currentChar = this.readChar();
                                }
                                do {
                                    this.currentChar = this.readChar();
                                } while (this.currentChar != '"');
                                this.currentChar = this.readChar();
                                while (this.currentChar != '"') {
                                    this.attributeValue.append(this.currentChar);
                                    this.currentChar = this.readChar();
                                }
                                this.attributesNames.add(this.attributeName.toString());
                                this.attributesPrefixes.add(this.attributePrefix);
                                this.attributesValues.add(this.attributeValue.toString());
                                this.attributeName = new java.lang.StringBuilder();
                                this.attributePrefix = null;
                                this.attributeValue = new java.lang.StringBuilder();
                                do {
                                    this.currentChar = this.readChar();
                                    if (this.currentChar == '?' || this.currentChar == '/' || this.currentChar == '-' || this.currentChar == '>') {
                                        end_of_tag = true;
                                    }
                                } while (!end_of_tag && this.currentChar == ' ');
                            }
                        };
                        return XmlParser;
                    })();
                    xmi.XmlParser = XmlParser;
                    var XmlToken = (function () {
                        function XmlToken() {
                        }
                        XmlToken.prototype.equals = function (other) {
                            return this == other;
                        };
                        XmlToken.values = function () {
                            return XmlToken._XmlTokenVALUES;
                        };
                        XmlToken.XML_HEADER = new XmlToken();
                        XmlToken.END_DOCUMENT = new XmlToken();
                        XmlToken.START_TAG = new XmlToken();
                        XmlToken.END_TAG = new XmlToken();
                        XmlToken.COMMENT = new XmlToken();
                        XmlToken.SINGLETON_TAG = new XmlToken();
                        XmlToken._XmlTokenVALUES = [
                            XmlToken.XML_HEADER,
                            XmlToken.END_DOCUMENT,
                            XmlToken.START_TAG,
                            XmlToken.END_TAG,
                            XmlToken.COMMENT,
                            XmlToken.SINGLETON_TAG
                        ];
                        return XmlToken;
                    })();
                    xmi.XmlToken = XmlToken;
                })(xmi = api.xmi || (api.xmi = {}));
            })(api = modeling.api || (modeling.api = {}));
        })(modeling = kevoree.modeling || (kevoree.modeling = {}));
    })(kevoree = org.kevoree || (org.kevoree = {}));
})(org || (org = {}));
var __extends = this.__extends || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    __.prototype = b.prototype;
    d.prototype = new __();
};
var pcm;
(function (pcm) {
    var PcmModel = (function (_super) {
        __extends(PcmModel, _super);
        function PcmModel() {
            _super.call(this);
            this._metaModel = new org.kevoree.modeling.api.abs.AbstractMetaModel("Pcm", -1);
            var tempMetaClasses = new Array();
            tempMetaClasses[3] = pcm.meta.MetaCell.getInstance();
            tempMetaClasses[15] = pcm.meta.MetaDateValue.getInstance();
            tempMetaClasses[18] = pcm.meta.MetaNotApplicable.getInstance();
            tempMetaClasses[12] = pcm.meta.MetaNotAvailable.getInstance();
            tempMetaClasses[19] = pcm.meta.MetaUnit.getInstance();
            tempMetaClasses[6] = pcm.meta.MetaValue.getInstance();
            tempMetaClasses[11] = pcm.meta.MetaMultiple.getInstance();
            tempMetaClasses[4] = pcm.meta.MetaFeature.getInstance();
            tempMetaClasses[5] = pcm.meta.MetaFeatureGroup.getInstance();
            tempMetaClasses[14] = pcm.meta.MetaPartial.getInstance();
            tempMetaClasses[1] = pcm.meta.MetaProduct.getInstance();
            tempMetaClasses[9] = pcm.meta.MetaRealValue.getInstance();
            tempMetaClasses[13] = pcm.meta.MetaConditional.getInstance();
            tempMetaClasses[17] = pcm.meta.MetaDimension.getInstance();
            tempMetaClasses[0] = pcm.meta.MetaPCM.getInstance();
            tempMetaClasses[8] = pcm.meta.MetaStringValue.getInstance();
            tempMetaClasses[10] = pcm.meta.MetaBooleanValue.getInstance();
            tempMetaClasses[2] = pcm.meta.MetaAbstractFeature.getInstance();
            tempMetaClasses[7] = pcm.meta.MetaIntegerValue.getInstance();
            tempMetaClasses[16] = pcm.meta.MetaVersion.getInstance();
            this._metaModel.init(tempMetaClasses);
        }
        PcmModel.prototype.internal_create = function (key) {
            return new pcm.PcmUniverse(this, key);
        };
        PcmModel.prototype.metaModel = function () {
            return this._metaModel;
        };
        return PcmModel;
    })(org.kevoree.modeling.api.abs.AbstractKModel);
    pcm.PcmModel = PcmModel;
    var PcmUniverse = (function (_super) {
        __extends(PcmUniverse, _super);
        function PcmUniverse(p_model, key) {
            _super.call(this, p_model, key);
        }
        PcmUniverse.prototype.internal_create = function (timePoint) {
            return new pcm.impl.PcmViewImpl(timePoint, this);
        };
        return PcmUniverse;
    })(org.kevoree.modeling.api.abs.AbstractKUniverse);
    pcm.PcmUniverse = PcmUniverse;
    var impl;
    (function (impl) {
        var AbstractFeatureImpl = (function (_super) {
            __extends(AbstractFeatureImpl, _super);
            function AbstractFeatureImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            AbstractFeatureImpl.prototype.getName = function () {
                return this.get(pcm.meta.MetaAbstractFeature.ATT_NAME);
            };
            AbstractFeatureImpl.prototype.setName = function (p_obj) {
                this.set(pcm.meta.MetaAbstractFeature.ATT_NAME, p_obj);
                return this;
            };
            AbstractFeatureImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return AbstractFeatureImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.AbstractFeatureImpl = AbstractFeatureImpl;
        var BooleanValueImpl = (function (_super) {
            __extends(BooleanValueImpl, _super);
            function BooleanValueImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            BooleanValueImpl.prototype.getValue = function () {
                return this.get(pcm.meta.MetaBooleanValue.ATT_VALUE);
            };
            BooleanValueImpl.prototype.setValue = function (p_obj) {
                this.set(pcm.meta.MetaBooleanValue.ATT_VALUE, p_obj);
                return this;
            };
            BooleanValueImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return BooleanValueImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.BooleanValueImpl = BooleanValueImpl;
        var CellImpl = (function (_super) {
            __extends(CellImpl, _super);
            function CellImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            CellImpl.prototype.getContent = function () {
                return this.get(pcm.meta.MetaCell.ATT_CONTENT);
            };
            CellImpl.prototype.setContent = function (p_obj) {
                this.set(pcm.meta.MetaCell.ATT_CONTENT, p_obj);
                return this;
            };
            CellImpl.prototype.getRawContent = function () {
                return this.get(pcm.meta.MetaCell.ATT_RAWCONTENT);
            };
            CellImpl.prototype.setRawContent = function (p_obj) {
                this.set(pcm.meta.MetaCell.ATT_RAWCONTENT, p_obj);
                return this;
            };
            CellImpl.prototype.setFeature = function (p_obj) {
                this.mutate(org.kevoree.modeling.api.KActionType.SET, pcm.meta.MetaCell.REF_FEATURE, p_obj);
                return this;
            };
            CellImpl.prototype.getFeature = function () {
                var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                this.internal_ref(pcm.meta.MetaCell.REF_FEATURE, function (kObjects) {
                    if (kObjects.length > 0) {
                        task.initCallback()(kObjects[0]);
                    }
                    else {
                        task.initCallback()(null);
                    }
                });
                return task;
            };
            CellImpl.prototype.setInterpretation = function (p_obj) {
                this.mutate(org.kevoree.modeling.api.KActionType.SET, pcm.meta.MetaCell.REF_INTERPRETATION, p_obj);
                return this;
            };
            CellImpl.prototype.getInterpretation = function () {
                var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                this.internal_ref(pcm.meta.MetaCell.REF_INTERPRETATION, function (kObjects) {
                    if (kObjects.length > 0) {
                        task.initCallback()(kObjects[0]);
                    }
                    else {
                        task.initCallback()(null);
                    }
                });
                return task;
            };
            CellImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return CellImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.CellImpl = CellImpl;
        var ConditionalImpl = (function (_super) {
            __extends(ConditionalImpl, _super);
            function ConditionalImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            ConditionalImpl.prototype.setCondition = function (p_obj) {
                this.mutate(org.kevoree.modeling.api.KActionType.SET, pcm.meta.MetaConditional.REF_CONDITION, p_obj);
                return this;
            };
            ConditionalImpl.prototype.getCondition = function () {
                var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                this.internal_ref(pcm.meta.MetaConditional.REF_CONDITION, function (kObjects) {
                    if (kObjects.length > 0) {
                        task.initCallback()(kObjects[0]);
                    }
                    else {
                        task.initCallback()(null);
                    }
                });
                return task;
            };
            ConditionalImpl.prototype.setValue = function (p_obj) {
                this.mutate(org.kevoree.modeling.api.KActionType.SET, pcm.meta.MetaConditional.REF_VALUE, p_obj);
                return this;
            };
            ConditionalImpl.prototype.getValue = function () {
                var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                this.internal_ref(pcm.meta.MetaConditional.REF_VALUE, function (kObjects) {
                    if (kObjects.length > 0) {
                        task.initCallback()(kObjects[0]);
                    }
                    else {
                        task.initCallback()(null);
                    }
                });
                return task;
            };
            ConditionalImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return ConditionalImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.ConditionalImpl = ConditionalImpl;
        var DateValueImpl = (function (_super) {
            __extends(DateValueImpl, _super);
            function DateValueImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            DateValueImpl.prototype.getValue = function () {
                return this.get(pcm.meta.MetaDateValue.ATT_VALUE);
            };
            DateValueImpl.prototype.setValue = function (p_obj) {
                this.set(pcm.meta.MetaDateValue.ATT_VALUE, p_obj);
                return this;
            };
            DateValueImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return DateValueImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.DateValueImpl = DateValueImpl;
        var DimensionImpl = (function (_super) {
            __extends(DimensionImpl, _super);
            function DimensionImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            DimensionImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return DimensionImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.DimensionImpl = DimensionImpl;
        var FeatureGroupImpl = (function (_super) {
            __extends(FeatureGroupImpl, _super);
            function FeatureGroupImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            FeatureGroupImpl.prototype.getName = function () {
                return this.get(pcm.meta.MetaFeatureGroup.ATT_NAME);
            };
            FeatureGroupImpl.prototype.setName = function (p_obj) {
                this.set(pcm.meta.MetaFeatureGroup.ATT_NAME, p_obj);
                return this;
            };
            FeatureGroupImpl.prototype.addSubFeatures = function (p_obj) {
                this.mutate(org.kevoree.modeling.api.KActionType.ADD, pcm.meta.MetaFeatureGroup.REF_SUBFEATURES, p_obj);
                return this;
            };
            FeatureGroupImpl.prototype.removeSubFeatures = function (p_obj) {
                this.mutate(org.kevoree.modeling.api.KActionType.REMOVE, pcm.meta.MetaFeatureGroup.REF_SUBFEATURES, p_obj);
                return this;
            };
            FeatureGroupImpl.prototype.getSubFeatures = function () {
                var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                this.internal_ref(pcm.meta.MetaFeatureGroup.REF_SUBFEATURES, function (kObjects) {
                    var casted = new Array();
                    for (var i = 0; i < kObjects.length; i++) {
                        casted[i] = kObjects[i];
                    }
                    task.initCallback()(casted);
                });
                return task;
            };
            FeatureGroupImpl.prototype.sizeOfSubFeatures = function () {
                return this.size(pcm.meta.MetaFeatureGroup.REF_SUBFEATURES);
            };
            FeatureGroupImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return FeatureGroupImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.FeatureGroupImpl = FeatureGroupImpl;
        var FeatureImpl = (function (_super) {
            __extends(FeatureImpl, _super);
            function FeatureImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            FeatureImpl.prototype.getName = function () {
                return this.get(pcm.meta.MetaFeature.ATT_NAME);
            };
            FeatureImpl.prototype.setName = function (p_obj) {
                this.set(pcm.meta.MetaFeature.ATT_NAME, p_obj);
                return this;
            };
            FeatureImpl.prototype.addCells = function (p_obj) {
                this.mutate(org.kevoree.modeling.api.KActionType.ADD, pcm.meta.MetaFeature.REF_CELLS, p_obj);
                return this;
            };
            FeatureImpl.prototype.removeCells = function (p_obj) {
                this.mutate(org.kevoree.modeling.api.KActionType.REMOVE, pcm.meta.MetaFeature.REF_CELLS, p_obj);
                return this;
            };
            FeatureImpl.prototype.getCells = function () {
                var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                this.internal_ref(pcm.meta.MetaFeature.REF_CELLS, function (kObjects) {
                    var casted = new Array();
                    for (var i = 0; i < kObjects.length; i++) {
                        casted[i] = kObjects[i];
                    }
                    task.initCallback()(casted);
                });
                return task;
            };
            FeatureImpl.prototype.sizeOfCells = function () {
                return this.size(pcm.meta.MetaFeature.REF_CELLS);
            };
            FeatureImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return FeatureImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.FeatureImpl = FeatureImpl;
        var IntegerValueImpl = (function (_super) {
            __extends(IntegerValueImpl, _super);
            function IntegerValueImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            IntegerValueImpl.prototype.getValue = function () {
                return this.get(pcm.meta.MetaIntegerValue.ATT_VALUE);
            };
            IntegerValueImpl.prototype.setValue = function (p_obj) {
                this.set(pcm.meta.MetaIntegerValue.ATT_VALUE, p_obj);
                return this;
            };
            IntegerValueImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return IntegerValueImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.IntegerValueImpl = IntegerValueImpl;
        var MultipleImpl = (function (_super) {
            __extends(MultipleImpl, _super);
            function MultipleImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            MultipleImpl.prototype.addSubvalues = function (p_obj) {
                this.mutate(org.kevoree.modeling.api.KActionType.ADD, pcm.meta.MetaMultiple.REF_SUBVALUES, p_obj);
                return this;
            };
            MultipleImpl.prototype.removeSubvalues = function (p_obj) {
                this.mutate(org.kevoree.modeling.api.KActionType.REMOVE, pcm.meta.MetaMultiple.REF_SUBVALUES, p_obj);
                return this;
            };
            MultipleImpl.prototype.getSubvalues = function () {
                var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                this.internal_ref(pcm.meta.MetaMultiple.REF_SUBVALUES, function (kObjects) {
                    var casted = new Array();
                    for (var i = 0; i < kObjects.length; i++) {
                        casted[i] = kObjects[i];
                    }
                    task.initCallback()(casted);
                });
                return task;
            };
            MultipleImpl.prototype.sizeOfSubvalues = function () {
                return this.size(pcm.meta.MetaMultiple.REF_SUBVALUES);
            };
            MultipleImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return MultipleImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.MultipleImpl = MultipleImpl;
        var NotApplicableImpl = (function (_super) {
            __extends(NotApplicableImpl, _super);
            function NotApplicableImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            NotApplicableImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return NotApplicableImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.NotApplicableImpl = NotApplicableImpl;
        var NotAvailableImpl = (function (_super) {
            __extends(NotAvailableImpl, _super);
            function NotAvailableImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            NotAvailableImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return NotAvailableImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.NotAvailableImpl = NotAvailableImpl;
        var PCMImpl = (function (_super) {
            __extends(PCMImpl, _super);
            function PCMImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            PCMImpl.prototype.getName = function () {
                return this.get(pcm.meta.MetaPCM.ATT_NAME);
            };
            PCMImpl.prototype.setName = function (p_obj) {
                this.set(pcm.meta.MetaPCM.ATT_NAME, p_obj);
                return this;
            };
            PCMImpl.prototype.addFeatures = function (p_obj) {
                this.mutate(org.kevoree.modeling.api.KActionType.ADD, pcm.meta.MetaPCM.REF_FEATURES, p_obj);
                return this;
            };
            PCMImpl.prototype.removeFeatures = function (p_obj) {
                this.mutate(org.kevoree.modeling.api.KActionType.REMOVE, pcm.meta.MetaPCM.REF_FEATURES, p_obj);
                return this;
            };
            PCMImpl.prototype.getFeatures = function () {
                var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                this.internal_ref(pcm.meta.MetaPCM.REF_FEATURES, function (kObjects) {
                    var casted = new Array();
                    for (var i = 0; i < kObjects.length; i++) {
                        casted[i] = kObjects[i];
                    }
                    task.initCallback()(casted);
                });
                return task;
            };
            PCMImpl.prototype.sizeOfFeatures = function () {
                return this.size(pcm.meta.MetaPCM.REF_FEATURES);
            };
            PCMImpl.prototype.addProducts = function (p_obj) {
                this.mutate(org.kevoree.modeling.api.KActionType.ADD, pcm.meta.MetaPCM.REF_PRODUCTS, p_obj);
                return this;
            };
            PCMImpl.prototype.removeProducts = function (p_obj) {
                this.mutate(org.kevoree.modeling.api.KActionType.REMOVE, pcm.meta.MetaPCM.REF_PRODUCTS, p_obj);
                return this;
            };
            PCMImpl.prototype.getProducts = function () {
                var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                this.internal_ref(pcm.meta.MetaPCM.REF_PRODUCTS, function (kObjects) {
                    var casted = new Array();
                    for (var i = 0; i < kObjects.length; i++) {
                        casted[i] = kObjects[i];
                    }
                    task.initCallback()(casted);
                });
                return task;
            };
            PCMImpl.prototype.sizeOfProducts = function () {
                return this.size(pcm.meta.MetaPCM.REF_PRODUCTS);
            };
            PCMImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return PCMImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.PCMImpl = PCMImpl;
        var PartialImpl = (function (_super) {
            __extends(PartialImpl, _super);
            function PartialImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            PartialImpl.prototype.setValue = function (p_obj) {
                this.mutate(org.kevoree.modeling.api.KActionType.SET, pcm.meta.MetaPartial.REF_VALUE, p_obj);
                return this;
            };
            PartialImpl.prototype.getValue = function () {
                var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                this.internal_ref(pcm.meta.MetaPartial.REF_VALUE, function (kObjects) {
                    if (kObjects.length > 0) {
                        task.initCallback()(kObjects[0]);
                    }
                    else {
                        task.initCallback()(null);
                    }
                });
                return task;
            };
            PartialImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return PartialImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.PartialImpl = PartialImpl;
        var PcmViewImpl = (function (_super) {
            __extends(PcmViewImpl, _super);
            function PcmViewImpl(p_now, p_universe) {
                _super.call(this, p_now, p_universe);
            }
            PcmViewImpl.prototype.internalCreate = function (p_clazz, p_key) {
                if (p_clazz == null) {
                    return null;
                }
                switch (p_clazz.index()) {
                    case 3:
                        return new pcm.impl.CellImpl(this, p_key, p_clazz);
                    case 15:
                        return new pcm.impl.DateValueImpl(this, p_key, p_clazz);
                    case 18:
                        return new pcm.impl.NotApplicableImpl(this, p_key, p_clazz);
                    case 12:
                        return new pcm.impl.NotAvailableImpl(this, p_key, p_clazz);
                    case 19:
                        return new pcm.impl.UnitImpl(this, p_key, p_clazz);
                    case 6:
                        return new pcm.impl.ValueImpl(this, p_key, p_clazz);
                    case 11:
                        return new pcm.impl.MultipleImpl(this, p_key, p_clazz);
                    case 4:
                        return new pcm.impl.FeatureImpl(this, p_key, p_clazz);
                    case 5:
                        return new pcm.impl.FeatureGroupImpl(this, p_key, p_clazz);
                    case 14:
                        return new pcm.impl.PartialImpl(this, p_key, p_clazz);
                    case 1:
                        return new pcm.impl.ProductImpl(this, p_key, p_clazz);
                    case 9:
                        return new pcm.impl.RealValueImpl(this, p_key, p_clazz);
                    case 13:
                        return new pcm.impl.ConditionalImpl(this, p_key, p_clazz);
                    case 17:
                        return new pcm.impl.DimensionImpl(this, p_key, p_clazz);
                    case 0:
                        return new pcm.impl.PCMImpl(this, p_key, p_clazz);
                    case 8:
                        return new pcm.impl.StringValueImpl(this, p_key, p_clazz);
                    case 10:
                        return new pcm.impl.BooleanValueImpl(this, p_key, p_clazz);
                    case 2:
                        return new pcm.impl.AbstractFeatureImpl(this, p_key, p_clazz);
                    case 7:
                        return new pcm.impl.IntegerValueImpl(this, p_key, p_clazz);
                    case 16:
                        return new pcm.impl.VersionImpl(this, p_key, p_clazz);
                    default:
                        return new org.kevoree.modeling.api.reflexive.DynamicKObject(this, p_key, p_clazz);
                }
            };
            PcmViewImpl.prototype.createCell = function () {
                return this.create(pcm.meta.MetaCell.getInstance());
            };
            PcmViewImpl.prototype.createDateValue = function () {
                return this.create(pcm.meta.MetaDateValue.getInstance());
            };
            PcmViewImpl.prototype.createNotApplicable = function () {
                return this.create(pcm.meta.MetaNotApplicable.getInstance());
            };
            PcmViewImpl.prototype.createNotAvailable = function () {
                return this.create(pcm.meta.MetaNotAvailable.getInstance());
            };
            PcmViewImpl.prototype.createUnit = function () {
                return this.create(pcm.meta.MetaUnit.getInstance());
            };
            PcmViewImpl.prototype.createValue = function () {
                return this.create(pcm.meta.MetaValue.getInstance());
            };
            PcmViewImpl.prototype.createMultiple = function () {
                return this.create(pcm.meta.MetaMultiple.getInstance());
            };
            PcmViewImpl.prototype.createFeature = function () {
                return this.create(pcm.meta.MetaFeature.getInstance());
            };
            PcmViewImpl.prototype.createFeatureGroup = function () {
                return this.create(pcm.meta.MetaFeatureGroup.getInstance());
            };
            PcmViewImpl.prototype.createPartial = function () {
                return this.create(pcm.meta.MetaPartial.getInstance());
            };
            PcmViewImpl.prototype.createProduct = function () {
                return this.create(pcm.meta.MetaProduct.getInstance());
            };
            PcmViewImpl.prototype.createRealValue = function () {
                return this.create(pcm.meta.MetaRealValue.getInstance());
            };
            PcmViewImpl.prototype.createConditional = function () {
                return this.create(pcm.meta.MetaConditional.getInstance());
            };
            PcmViewImpl.prototype.createDimension = function () {
                return this.create(pcm.meta.MetaDimension.getInstance());
            };
            PcmViewImpl.prototype.createPCM = function () {
                return this.create(pcm.meta.MetaPCM.getInstance());
            };
            PcmViewImpl.prototype.createStringValue = function () {
                return this.create(pcm.meta.MetaStringValue.getInstance());
            };
            PcmViewImpl.prototype.createBooleanValue = function () {
                return this.create(pcm.meta.MetaBooleanValue.getInstance());
            };
            PcmViewImpl.prototype.createAbstractFeature = function () {
                return this.create(pcm.meta.MetaAbstractFeature.getInstance());
            };
            PcmViewImpl.prototype.createIntegerValue = function () {
                return this.create(pcm.meta.MetaIntegerValue.getInstance());
            };
            PcmViewImpl.prototype.createVersion = function () {
                return this.create(pcm.meta.MetaVersion.getInstance());
            };
            PcmViewImpl.prototype.universe = function () {
                return _super.prototype.universe.call(this);
            };
            return PcmViewImpl;
        })(org.kevoree.modeling.api.abs.AbstractKView);
        impl.PcmViewImpl = PcmViewImpl;
        var ProductImpl = (function (_super) {
            __extends(ProductImpl, _super);
            function ProductImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            ProductImpl.prototype.getName = function () {
                return this.get(pcm.meta.MetaProduct.ATT_NAME);
            };
            ProductImpl.prototype.setName = function (p_obj) {
                this.set(pcm.meta.MetaProduct.ATT_NAME, p_obj);
                return this;
            };
            ProductImpl.prototype.addCells = function (p_obj) {
                this.mutate(org.kevoree.modeling.api.KActionType.ADD, pcm.meta.MetaProduct.REF_CELLS, p_obj);
                return this;
            };
            ProductImpl.prototype.removeCells = function (p_obj) {
                this.mutate(org.kevoree.modeling.api.KActionType.REMOVE, pcm.meta.MetaProduct.REF_CELLS, p_obj);
                return this;
            };
            ProductImpl.prototype.getCells = function () {
                var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                this.internal_ref(pcm.meta.MetaProduct.REF_CELLS, function (kObjects) {
                    var casted = new Array();
                    for (var i = 0; i < kObjects.length; i++) {
                        casted[i] = kObjects[i];
                    }
                    task.initCallback()(casted);
                });
                return task;
            };
            ProductImpl.prototype.sizeOfCells = function () {
                return this.size(pcm.meta.MetaProduct.REF_CELLS);
            };
            ProductImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return ProductImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.ProductImpl = ProductImpl;
        var RealValueImpl = (function (_super) {
            __extends(RealValueImpl, _super);
            function RealValueImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            RealValueImpl.prototype.getValue = function () {
                return this.get(pcm.meta.MetaRealValue.ATT_VALUE);
            };
            RealValueImpl.prototype.setValue = function (p_obj) {
                this.set(pcm.meta.MetaRealValue.ATT_VALUE, p_obj);
                return this;
            };
            RealValueImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return RealValueImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.RealValueImpl = RealValueImpl;
        var StringValueImpl = (function (_super) {
            __extends(StringValueImpl, _super);
            function StringValueImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            StringValueImpl.prototype.getValue = function () {
                return this.get(pcm.meta.MetaStringValue.ATT_VALUE);
            };
            StringValueImpl.prototype.setValue = function (p_obj) {
                this.set(pcm.meta.MetaStringValue.ATT_VALUE, p_obj);
                return this;
            };
            StringValueImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return StringValueImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.StringValueImpl = StringValueImpl;
        var UnitImpl = (function (_super) {
            __extends(UnitImpl, _super);
            function UnitImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            UnitImpl.prototype.getUnit = function () {
                return this.get(pcm.meta.MetaUnit.ATT_UNIT);
            };
            UnitImpl.prototype.setUnit = function (p_obj) {
                this.set(pcm.meta.MetaUnit.ATT_UNIT, p_obj);
                return this;
            };
            UnitImpl.prototype.setValue = function (p_obj) {
                this.mutate(org.kevoree.modeling.api.KActionType.SET, pcm.meta.MetaUnit.REF_VALUE, p_obj);
                return this;
            };
            UnitImpl.prototype.getValue = function () {
                var task = new org.kevoree.modeling.api.abs.AbstractKDeferWrapper();
                this.internal_ref(pcm.meta.MetaUnit.REF_VALUE, function (kObjects) {
                    if (kObjects.length > 0) {
                        task.initCallback()(kObjects[0]);
                    }
                    else {
                        task.initCallback()(null);
                    }
                });
                return task;
            };
            UnitImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return UnitImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.UnitImpl = UnitImpl;
        var ValueImpl = (function (_super) {
            __extends(ValueImpl, _super);
            function ValueImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            ValueImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return ValueImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.ValueImpl = ValueImpl;
        var VersionImpl = (function (_super) {
            __extends(VersionImpl, _super);
            function VersionImpl(p_factory, p_uuid, p_metaClass) {
                _super.call(this, p_factory, p_uuid, p_metaClass);
            }
            VersionImpl.prototype.view = function () {
                return _super.prototype.view.call(this);
            };
            return VersionImpl;
        })(org.kevoree.modeling.api.abs.AbstractKObject);
        impl.VersionImpl = VersionImpl;
    })(impl = pcm.impl || (pcm.impl = {}));
    var meta;
    (function (meta) {
        var MetaAbstractFeature = (function (_super) {
            __extends(MetaAbstractFeature, _super);
            function MetaAbstractFeature() {
                _super.call(this, "pcm.AbstractFeature", 2);
                var temp_all = new Array();
                temp_all[0] = MetaAbstractFeature.ATT_NAME;
                var temp_references = new Array();
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaAbstractFeature.getInstance = function () {
                if (MetaAbstractFeature.INSTANCE == null) {
                    MetaAbstractFeature.INSTANCE = new pcm.meta.MetaAbstractFeature();
                }
                return MetaAbstractFeature.INSTANCE;
            };
            MetaAbstractFeature.INSTANCE = null;
            MetaAbstractFeature.ATT_NAME = new org.kevoree.modeling.api.abs.AbstractMetaAttribute("name", 4, 0, false, org.kevoree.modeling.api.meta.PrimitiveTypes.STRING, org.kevoree.modeling.api.extrapolation.DiscreteExtrapolation.instance());
            return MetaAbstractFeature;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaAbstractFeature = MetaAbstractFeature;
        var MetaBooleanValue = (function (_super) {
            __extends(MetaBooleanValue, _super);
            function MetaBooleanValue() {
                _super.call(this, "pcm.BooleanValue", 10);
                var temp_all = new Array();
                temp_all[0] = MetaBooleanValue.ATT_VALUE;
                var temp_references = new Array();
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaBooleanValue.getInstance = function () {
                if (MetaBooleanValue.INSTANCE == null) {
                    MetaBooleanValue.INSTANCE = new pcm.meta.MetaBooleanValue();
                }
                return MetaBooleanValue.INSTANCE;
            };
            MetaBooleanValue.INSTANCE = null;
            MetaBooleanValue.ATT_VALUE = new org.kevoree.modeling.api.abs.AbstractMetaAttribute("value", 4, 0, false, org.kevoree.modeling.api.meta.PrimitiveTypes.BOOL, org.kevoree.modeling.api.extrapolation.DiscreteExtrapolation.instance());
            return MetaBooleanValue;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaBooleanValue = MetaBooleanValue;
        var MetaCell = (function (_super) {
            __extends(MetaCell, _super);
            function MetaCell() {
                _super.call(this, "pcm.Cell", 3);
                var temp_all = new Array();
                temp_all[0] = MetaCell.ATT_CONTENT;
                temp_all[1] = MetaCell.ATT_RAWCONTENT;
                var temp_references = new Array();
                temp_all[2] = MetaCell.REF_FEATURE;
                temp_all[3] = MetaCell.REF_INTERPRETATION;
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaCell.getInstance = function () {
                if (MetaCell.INSTANCE == null) {
                    MetaCell.INSTANCE = new pcm.meta.MetaCell();
                }
                return MetaCell.INSTANCE;
            };
            MetaCell.INSTANCE = null;
            MetaCell.ATT_CONTENT = new org.kevoree.modeling.api.abs.AbstractMetaAttribute("content", 4, 0, false, org.kevoree.modeling.api.meta.PrimitiveTypes.STRING, org.kevoree.modeling.api.extrapolation.DiscreteExtrapolation.instance());
            MetaCell.ATT_RAWCONTENT = new org.kevoree.modeling.api.abs.AbstractMetaAttribute("rawContent", 5, 0, false, org.kevoree.modeling.api.meta.PrimitiveTypes.STRING, org.kevoree.modeling.api.extrapolation.DiscreteExtrapolation.instance());
            MetaCell.REF_FEATURE = new org.kevoree.modeling.api.abs.AbstractMetaReference("feature", 6, false, true, function () {
                return pcm.meta.MetaFeature.getInstance();
            }, function () {
                return pcm.meta.MetaFeature.REF_CELLS;
            }, function () {
                return pcm.meta.MetaCell.getInstance();
            });
            MetaCell.REF_INTERPRETATION = new org.kevoree.modeling.api.abs.AbstractMetaReference("interpretation", 7, true, true, function () {
                return pcm.meta.MetaValue.getInstance();
            }, null, function () {
                return pcm.meta.MetaCell.getInstance();
            });
            return MetaCell;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaCell = MetaCell;
        var MetaConditional = (function (_super) {
            __extends(MetaConditional, _super);
            function MetaConditional() {
                _super.call(this, "pcm.Conditional", 13);
                var temp_all = new Array();
                var temp_references = new Array();
                temp_all[0] = MetaConditional.REF_CONDITION;
                temp_all[1] = MetaConditional.REF_VALUE;
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaConditional.getInstance = function () {
                if (MetaConditional.INSTANCE == null) {
                    MetaConditional.INSTANCE = new pcm.meta.MetaConditional();
                }
                return MetaConditional.INSTANCE;
            };
            MetaConditional.INSTANCE = null;
            MetaConditional.REF_CONDITION = new org.kevoree.modeling.api.abs.AbstractMetaReference("condition", 4, true, true, function () {
                return pcm.meta.MetaValue.getInstance();
            }, null, function () {
                return pcm.meta.MetaConditional.getInstance();
            });
            MetaConditional.REF_VALUE = new org.kevoree.modeling.api.abs.AbstractMetaReference("value", 5, true, true, function () {
                return pcm.meta.MetaValue.getInstance();
            }, null, function () {
                return pcm.meta.MetaConditional.getInstance();
            });
            return MetaConditional;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaConditional = MetaConditional;
        var MetaDateValue = (function (_super) {
            __extends(MetaDateValue, _super);
            function MetaDateValue() {
                _super.call(this, "pcm.DateValue", 15);
                var temp_all = new Array();
                temp_all[0] = MetaDateValue.ATT_VALUE;
                var temp_references = new Array();
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaDateValue.getInstance = function () {
                if (MetaDateValue.INSTANCE == null) {
                    MetaDateValue.INSTANCE = new pcm.meta.MetaDateValue();
                }
                return MetaDateValue.INSTANCE;
            };
            MetaDateValue.INSTANCE = null;
            MetaDateValue.ATT_VALUE = new org.kevoree.modeling.api.abs.AbstractMetaAttribute("value", 4, 0, false, org.kevoree.modeling.api.meta.PrimitiveTypes.STRING, org.kevoree.modeling.api.extrapolation.DiscreteExtrapolation.instance());
            return MetaDateValue;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaDateValue = MetaDateValue;
        var MetaDimension = (function (_super) {
            __extends(MetaDimension, _super);
            function MetaDimension() {
                _super.call(this, "pcm.Dimension", 17);
                var temp_all = new Array();
                var temp_references = new Array();
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaDimension.getInstance = function () {
                if (MetaDimension.INSTANCE == null) {
                    MetaDimension.INSTANCE = new pcm.meta.MetaDimension();
                }
                return MetaDimension.INSTANCE;
            };
            MetaDimension.INSTANCE = null;
            return MetaDimension;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaDimension = MetaDimension;
        var MetaFeature = (function (_super) {
            __extends(MetaFeature, _super);
            function MetaFeature() {
                _super.call(this, "pcm.Feature", 4);
                var temp_all = new Array();
                temp_all[0] = MetaFeature.ATT_NAME;
                var temp_references = new Array();
                temp_all[1] = MetaFeature.REF_CELLS;
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaFeature.getInstance = function () {
                if (MetaFeature.INSTANCE == null) {
                    MetaFeature.INSTANCE = new pcm.meta.MetaFeature();
                }
                return MetaFeature.INSTANCE;
            };
            MetaFeature.INSTANCE = null;
            MetaFeature.ATT_NAME = new org.kevoree.modeling.api.abs.AbstractMetaAttribute("name", 4, 0, false, org.kevoree.modeling.api.meta.PrimitiveTypes.STRING, org.kevoree.modeling.api.extrapolation.DiscreteExtrapolation.instance());
            MetaFeature.REF_CELLS = new org.kevoree.modeling.api.abs.AbstractMetaReference("cells", 5, false, false, function () {
                return pcm.meta.MetaCell.getInstance();
            }, function () {
                return pcm.meta.MetaCell.REF_FEATURE;
            }, function () {
                return pcm.meta.MetaFeature.getInstance();
            });
            return MetaFeature;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaFeature = MetaFeature;
        var MetaFeatureGroup = (function (_super) {
            __extends(MetaFeatureGroup, _super);
            function MetaFeatureGroup() {
                _super.call(this, "pcm.FeatureGroup", 5);
                var temp_all = new Array();
                temp_all[0] = MetaFeatureGroup.ATT_NAME;
                var temp_references = new Array();
                temp_all[1] = MetaFeatureGroup.REF_SUBFEATURES;
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaFeatureGroup.getInstance = function () {
                if (MetaFeatureGroup.INSTANCE == null) {
                    MetaFeatureGroup.INSTANCE = new pcm.meta.MetaFeatureGroup();
                }
                return MetaFeatureGroup.INSTANCE;
            };
            MetaFeatureGroup.INSTANCE = null;
            MetaFeatureGroup.ATT_NAME = new org.kevoree.modeling.api.abs.AbstractMetaAttribute("name", 4, 0, false, org.kevoree.modeling.api.meta.PrimitiveTypes.STRING, org.kevoree.modeling.api.extrapolation.DiscreteExtrapolation.instance());
            MetaFeatureGroup.REF_SUBFEATURES = new org.kevoree.modeling.api.abs.AbstractMetaReference("subFeatures", 5, true, false, function () {
                return pcm.meta.MetaAbstractFeature.getInstance();
            }, null, function () {
                return pcm.meta.MetaFeatureGroup.getInstance();
            });
            return MetaFeatureGroup;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaFeatureGroup = MetaFeatureGroup;
        var MetaIntegerValue = (function (_super) {
            __extends(MetaIntegerValue, _super);
            function MetaIntegerValue() {
                _super.call(this, "pcm.IntegerValue", 7);
                var temp_all = new Array();
                temp_all[0] = MetaIntegerValue.ATT_VALUE;
                var temp_references = new Array();
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaIntegerValue.getInstance = function () {
                if (MetaIntegerValue.INSTANCE == null) {
                    MetaIntegerValue.INSTANCE = new pcm.meta.MetaIntegerValue();
                }
                return MetaIntegerValue.INSTANCE;
            };
            MetaIntegerValue.INSTANCE = null;
            MetaIntegerValue.ATT_VALUE = new org.kevoree.modeling.api.abs.AbstractMetaAttribute("value", 4, 0, false, org.kevoree.modeling.api.meta.PrimitiveTypes.INT, org.kevoree.modeling.api.extrapolation.DiscreteExtrapolation.instance());
            return MetaIntegerValue;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaIntegerValue = MetaIntegerValue;
        var MetaMultiple = (function (_super) {
            __extends(MetaMultiple, _super);
            function MetaMultiple() {
                _super.call(this, "pcm.Multiple", 11);
                var temp_all = new Array();
                var temp_references = new Array();
                temp_all[0] = MetaMultiple.REF_SUBVALUES;
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaMultiple.getInstance = function () {
                if (MetaMultiple.INSTANCE == null) {
                    MetaMultiple.INSTANCE = new pcm.meta.MetaMultiple();
                }
                return MetaMultiple.INSTANCE;
            };
            MetaMultiple.INSTANCE = null;
            MetaMultiple.REF_SUBVALUES = new org.kevoree.modeling.api.abs.AbstractMetaReference("subvalues", 4, true, false, function () {
                return pcm.meta.MetaValue.getInstance();
            }, null, function () {
                return pcm.meta.MetaMultiple.getInstance();
            });
            return MetaMultiple;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaMultiple = MetaMultiple;
        var MetaNotApplicable = (function (_super) {
            __extends(MetaNotApplicable, _super);
            function MetaNotApplicable() {
                _super.call(this, "pcm.NotApplicable", 18);
                var temp_all = new Array();
                var temp_references = new Array();
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaNotApplicable.getInstance = function () {
                if (MetaNotApplicable.INSTANCE == null) {
                    MetaNotApplicable.INSTANCE = new pcm.meta.MetaNotApplicable();
                }
                return MetaNotApplicable.INSTANCE;
            };
            MetaNotApplicable.INSTANCE = null;
            return MetaNotApplicable;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaNotApplicable = MetaNotApplicable;
        var MetaNotAvailable = (function (_super) {
            __extends(MetaNotAvailable, _super);
            function MetaNotAvailable() {
                _super.call(this, "pcm.NotAvailable", 12);
                var temp_all = new Array();
                var temp_references = new Array();
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaNotAvailable.getInstance = function () {
                if (MetaNotAvailable.INSTANCE == null) {
                    MetaNotAvailable.INSTANCE = new pcm.meta.MetaNotAvailable();
                }
                return MetaNotAvailable.INSTANCE;
            };
            MetaNotAvailable.INSTANCE = null;
            return MetaNotAvailable;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaNotAvailable = MetaNotAvailable;
        var MetaPCM = (function (_super) {
            __extends(MetaPCM, _super);
            function MetaPCM() {
                _super.call(this, "pcm.PCM", 0);
                var temp_all = new Array();
                temp_all[0] = MetaPCM.ATT_NAME;
                var temp_references = new Array();
                temp_all[1] = MetaPCM.REF_FEATURES;
                temp_all[2] = MetaPCM.REF_PRODUCTS;
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaPCM.getInstance = function () {
                if (MetaPCM.INSTANCE == null) {
                    MetaPCM.INSTANCE = new pcm.meta.MetaPCM();
                }
                return MetaPCM.INSTANCE;
            };
            MetaPCM.INSTANCE = null;
            MetaPCM.ATT_NAME = new org.kevoree.modeling.api.abs.AbstractMetaAttribute("name", 4, 0, false, org.kevoree.modeling.api.meta.PrimitiveTypes.STRING, org.kevoree.modeling.api.extrapolation.DiscreteExtrapolation.instance());
            MetaPCM.REF_FEATURES = new org.kevoree.modeling.api.abs.AbstractMetaReference("features", 5, true, false, function () {
                return pcm.meta.MetaAbstractFeature.getInstance();
            }, null, function () {
                return pcm.meta.MetaPCM.getInstance();
            });
            MetaPCM.REF_PRODUCTS = new org.kevoree.modeling.api.abs.AbstractMetaReference("products", 6, true, false, function () {
                return pcm.meta.MetaProduct.getInstance();
            }, null, function () {
                return pcm.meta.MetaPCM.getInstance();
            });
            return MetaPCM;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaPCM = MetaPCM;
        var MetaPartial = (function (_super) {
            __extends(MetaPartial, _super);
            function MetaPartial() {
                _super.call(this, "pcm.Partial", 14);
                var temp_all = new Array();
                var temp_references = new Array();
                temp_all[0] = MetaPartial.REF_VALUE;
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaPartial.getInstance = function () {
                if (MetaPartial.INSTANCE == null) {
                    MetaPartial.INSTANCE = new pcm.meta.MetaPartial();
                }
                return MetaPartial.INSTANCE;
            };
            MetaPartial.INSTANCE = null;
            MetaPartial.REF_VALUE = new org.kevoree.modeling.api.abs.AbstractMetaReference("value", 4, true, true, function () {
                return pcm.meta.MetaValue.getInstance();
            }, null, function () {
                return pcm.meta.MetaPartial.getInstance();
            });
            return MetaPartial;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaPartial = MetaPartial;
        var MetaProduct = (function (_super) {
            __extends(MetaProduct, _super);
            function MetaProduct() {
                _super.call(this, "pcm.Product", 1);
                var temp_all = new Array();
                temp_all[0] = MetaProduct.ATT_NAME;
                var temp_references = new Array();
                temp_all[1] = MetaProduct.REF_CELLS;
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaProduct.getInstance = function () {
                if (MetaProduct.INSTANCE == null) {
                    MetaProduct.INSTANCE = new pcm.meta.MetaProduct();
                }
                return MetaProduct.INSTANCE;
            };
            MetaProduct.INSTANCE = null;
            MetaProduct.ATT_NAME = new org.kevoree.modeling.api.abs.AbstractMetaAttribute("name", 4, 0, false, org.kevoree.modeling.api.meta.PrimitiveTypes.STRING, org.kevoree.modeling.api.extrapolation.DiscreteExtrapolation.instance());
            MetaProduct.REF_CELLS = new org.kevoree.modeling.api.abs.AbstractMetaReference("cells", 5, true, false, function () {
                return pcm.meta.MetaCell.getInstance();
            }, null, function () {
                return pcm.meta.MetaProduct.getInstance();
            });
            return MetaProduct;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaProduct = MetaProduct;
        var MetaRealValue = (function (_super) {
            __extends(MetaRealValue, _super);
            function MetaRealValue() {
                _super.call(this, "pcm.RealValue", 9);
                var temp_all = new Array();
                temp_all[0] = MetaRealValue.ATT_VALUE;
                var temp_references = new Array();
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaRealValue.getInstance = function () {
                if (MetaRealValue.INSTANCE == null) {
                    MetaRealValue.INSTANCE = new pcm.meta.MetaRealValue();
                }
                return MetaRealValue.INSTANCE;
            };
            MetaRealValue.INSTANCE = null;
            MetaRealValue.ATT_VALUE = new org.kevoree.modeling.api.abs.AbstractMetaAttribute("value", 4, 0, false, org.kevoree.modeling.api.meta.PrimitiveTypes.DOUBLE, org.kevoree.modeling.api.extrapolation.DiscreteExtrapolation.instance());
            return MetaRealValue;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaRealValue = MetaRealValue;
        var MetaStringValue = (function (_super) {
            __extends(MetaStringValue, _super);
            function MetaStringValue() {
                _super.call(this, "pcm.StringValue", 8);
                var temp_all = new Array();
                temp_all[0] = MetaStringValue.ATT_VALUE;
                var temp_references = new Array();
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaStringValue.getInstance = function () {
                if (MetaStringValue.INSTANCE == null) {
                    MetaStringValue.INSTANCE = new pcm.meta.MetaStringValue();
                }
                return MetaStringValue.INSTANCE;
            };
            MetaStringValue.INSTANCE = null;
            MetaStringValue.ATT_VALUE = new org.kevoree.modeling.api.abs.AbstractMetaAttribute("value", 4, 0, false, org.kevoree.modeling.api.meta.PrimitiveTypes.STRING, org.kevoree.modeling.api.extrapolation.DiscreteExtrapolation.instance());
            return MetaStringValue;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaStringValue = MetaStringValue;
        var MetaUnit = (function (_super) {
            __extends(MetaUnit, _super);
            function MetaUnit() {
                _super.call(this, "pcm.Unit", 19);
                var temp_all = new Array();
                temp_all[0] = MetaUnit.ATT_UNIT;
                var temp_references = new Array();
                temp_all[1] = MetaUnit.REF_VALUE;
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaUnit.getInstance = function () {
                if (MetaUnit.INSTANCE == null) {
                    MetaUnit.INSTANCE = new pcm.meta.MetaUnit();
                }
                return MetaUnit.INSTANCE;
            };
            MetaUnit.INSTANCE = null;
            MetaUnit.ATT_UNIT = new org.kevoree.modeling.api.abs.AbstractMetaAttribute("unit", 4, 0, false, org.kevoree.modeling.api.meta.PrimitiveTypes.STRING, org.kevoree.modeling.api.extrapolation.DiscreteExtrapolation.instance());
            MetaUnit.REF_VALUE = new org.kevoree.modeling.api.abs.AbstractMetaReference("value", 5, true, true, function () {
                return pcm.meta.MetaValue.getInstance();
            }, null, function () {
                return pcm.meta.MetaUnit.getInstance();
            });
            return MetaUnit;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaUnit = MetaUnit;
        var MetaValue = (function (_super) {
            __extends(MetaValue, _super);
            function MetaValue() {
                _super.call(this, "pcm.Value", 6);
                var temp_all = new Array();
                var temp_references = new Array();
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaValue.getInstance = function () {
                if (MetaValue.INSTANCE == null) {
                    MetaValue.INSTANCE = new pcm.meta.MetaValue();
                }
                return MetaValue.INSTANCE;
            };
            MetaValue.INSTANCE = null;
            return MetaValue;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaValue = MetaValue;
        var MetaVersion = (function (_super) {
            __extends(MetaVersion, _super);
            function MetaVersion() {
                _super.call(this, "pcm.Version", 16);
                var temp_all = new Array();
                var temp_references = new Array();
                var temp_operations = new Array();
                this.init(temp_all);
            }
            MetaVersion.getInstance = function () {
                if (MetaVersion.INSTANCE == null) {
                    MetaVersion.INSTANCE = new pcm.meta.MetaVersion();
                }
                return MetaVersion.INSTANCE;
            };
            MetaVersion.INSTANCE = null;
            return MetaVersion;
        })(org.kevoree.modeling.api.abs.AbstractMetaClass);
        meta.MetaVersion = MetaVersion;
    })(meta = pcm.meta || (pcm.meta = {}));
})(pcm || (pcm = {}));




© 2015 - 2025 Weber Informatics LLC | Privacy Policy