(function(){"use strict";function a(a){var c=a.eClass;if(c){var d=c.get("eAllStructuralFeatures");s.each(d,function(c){b(a,c)})}}function b(a,b){if(a&&b){var c=b.get("name"),d=b.values.defaultValue,e=b.get("upperBound"),f=!0===b.values.derived,g=(b.values.containment,a.values[c]);null!==g&&void 0!==g||(f?a.values[c]=b.values._:1!==e&&e?g instanceof t.EList?g._setFeature(b):b.isTypeOf("EAttribute")?a.values[c]=[]:a.values[c]=new t.EList(a,b):a.values[c]=function(){return null===d||void 0===d?null:0===d?0:!1!==d&&d}())}}function c(a,b){return s.find(a.get("eAllStructuralFeatures"),function(a){return a.values.name===b})}function d(a,b){if(a.eClass){var d=function(a,b){return"function"==typeof b?b:b instanceof v?b:t.create(a,b)},e=function(b,c,e,f){e?a.set(b,d(f,c)):a.set(b,c)},f=function(b,c,e,f){var g=s.isArray(c)?c:[c];s.each(g,function(c){e?a.get(b).add(d(f,c)):a.get(b).push(c)})};s.each(b,function(a,b){var d=c(this.eClass,b);d&&void 0!==a&&(1===d.get("upperBound")?e(b,a,d.eClass===t.EReference,d.get("eType")):f(b,a,d.eClass===ha,d.get("eType")))},a)}}function e(a){var b=a.get("eOperations").array(),c=a.get("eAllSuperTypes");return s.flatten(s.union(b||[],s.map(c||[],function(a){return e(a)})))}function f(a){if(a&&a.eClass){var b=e(a.eClass);b&&s.each(b,function(b){a[b.get("name")]=b._})}}function g(a){var b={},c=a.get("contents").array();if(c.length){var d,e,f=function(a,c){var d=a.eContents();b[c]=a,s.each(d,function(a){f(a,a.fragment())})};if(1===c.length)d=c[0],d._id?f(d,d._id):(e=d.eClass.get("eIDAttribute")||null,e?f(d,d.get(e.get("name"))):f(d,"/"));else for(var g=0;g<c.length;g++)d=c[g],d._id?f(d,d._id):(e=d.eClass.get("eIDAttribute")||null,e?f(d,d.get(e.get("name"))):f(d,"/"+g))}return b}function h(a){return!a.get("abstract")}function i(a){if(!a||!a.eClass)return[];var b=a.get("eAllSubTypes");return s.filter(s.union([a],b),h)}function j(a,b){if(!a)return[];var c=a.eClass.get("eAllContainments"),d=function(c){var d=i(c.get("eType"));return b&&"function"==typeof b?b(a,c,d):d};return s.flatten(s.map(c,d))}function k(a,b){return a?j(a.eContainer,b):[]}function l(a,b,c){return s.map(c,function(c){return{label:"New "+c.get("name"),owner:a,feature:b,type:c}})}function m(a){return j(a,l)}function n(a){return k(a,l)}function o(a){return a.get("name")||""}function p(a){var b=a.get("eType"),c=a.eClass===t.EOperation,d=b?b.get("name"):null;return a.get("name")+(c?"()":"")+(d?" : "+d:"")}function q(a,b){if(null==a||null==a.eResource()||null==a.eResource().get("resourceSet"))throw new Error("Bad argument");var c=b.get("eType"),d=a.eResource().get("resourceSet"),e=d.elements();return s.filter(e,function(a){return a.isKindOf(c)})}var r=this,s=r._;s||"undefined"==typeof require||(s=require("underscore"));var t={create:function(a,b){var c;if(b?(c=b,c.eClass=b.eClass||a):a instanceof v?(c={},c.eClass=a):c=a,!c.eClass||c.eClass.get("abstract"))throw new Error("Cannot create EObject from undefined or abstract EClass");return new v(c)}};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=t),exports.Ecore=t):r.Ecore=t;var u={on:function(a,b,c){var d,e,f;if(!b)return this;for(a=a.split(/\s+/),d=this._callbacks||(this._callbacks={});e=a.shift();)f=d[e]||(d[e]=[]),f.push(b,c);return this},off:function(a,b,c){var d,e,f,g;if(!(e=this._callbacks))return this;if(!(a||b||c))return delete this._callbacks,this;for(a=a?a.split(/\s+/):s.keys(e);d=a.shift();)if((f=e[d])&&(b||c))for(g=f.length-2;g>=0;g-=2)b&&f[g]!==b||c&&f[g+1]!==c||f.splice(g,2);else delete e[d];return this},trigger:function(a){var b,c,d,e,f,g,h,i;if(!(c=this._callbacks))return this;for(i=[],a=a.split(/\s+/),e=1,f=arguments.length;e<f;e++)i[e-1]=arguments[e];for(;b=a.shift();){if((h=c.all)&&(h=h.slice()),(d=c[b])&&(d=d.slice()),d)for(e=0,f=d.length;e<f;e+=2)d[e].apply(d[e+1]||this,i);if(h)for(g=[b].concat(i),e=0,f=h.length;e<f;e+=2)h[e].apply(h[e+1]||this,g)}return this}},v=function(b){return b||(b={}),this.eClass=b.eClass,this.values={},b._&&(this._=b._),a(this),d(this,b),f(this),this};t.EObjectPrototype={setEClass:function(b){return this.eClass=b,a(this),d(this,this.values),f(this),this},create:function(a){if("EClass"===this.eClass.get("name"))return t.create(this,a)},has:function(a){return this.values.hasOwnProperty(a)||c(this.eClass,a)},isSet:function(a){if(!this.has(a))return!1;if(!this.eClass)return!1;var b=this.get(a);return b instanceof w?b.size()>0:null!==b&&void 0!==b},set:function(a,b){var d,e,f,g;if(null===a)return this;a.eClass&&(a=a.get("name")),s.isObject(a)||(e=a,(a={})[e]=b);var h=this.eResource();for(d in a)if(void 0!==(f=a[d])&&this.has(d)){this.isSet(d)&&this.unset(d);var i=c(this.eClass,d),j=i.get("containment"),k="containment"===d&&"string"==typeof f&&"EReference"===this.eClass.values.name;k&&(f="true"===f.toLowerCase()),this.values[d]=f,j&&(f.eContainingFeature=i,f.eContainer=this),g="change:"+d,this.trigger("change "+g,d),h&&h.trigger("change",this)}return this},unset:function(a,b){var d,e,f;if(null===a)return this;a.eClass&&(a=a.get("name")),s.isObject(a)||(e=a,(a={})[e]=void 0);var g=this.eResource();for(d in a)if(this.has(d)&&this.isSet(d)){var h=c(this.eClass,d),i=!0===Boolean(h.get("containment")),j=this.values[d];i&&(j.eContainingFeature=void 0,j.eContainer=void 0),this.values[d]=void 0,f="unset:"+d,this.trigger("unset "+f,d),g&&g.trigger("change",this)}return this},get:function(a){if(!a)return null;var d=a.eClass?a.get("name"):a;!s.has(this.values,d)&&this.has(d)&&b(this,c(this.eClass,d));var e=this.values[d];return"function"==typeof e?e.apply(this):e},isTypeOf:function(a){if(!a||!this.eClass)return!1;var b=a.eClass?a.get("name"):a;return this.eClass.get("name")===b},isKindOf:function(a){if(!a||!this.eClass)return!1;if(this.isTypeOf(a))return!0;var b=a.eClass?a.get("name"):a,c=this.eClass.get("eAllSuperTypes");return s.any(c,function(a){return a.get("name")===b})},eResource:function(){return this.isKindOf("Resource")?this:this.eContainer?this.eContainer.isKindOf("Resource")?this.eContainer:this.eContainer.eResource():null},eContents:function(){if(!this.eClass)return[];if(s.isUndefined(this.__updateContents)){this.__updateContents=!0;var a=this.eResource();if(a){var b=this;a.on("add remove",function(){b.__updateContents=!0})}}if(this.__updateContents){var c=this.eClass.get("eAllStructuralFeatures"),d=s.filter(c,function(a){return a.isTypeOf("EReference")&&a.get("containment")&&this.isSet(a.get("name"))},this),e=null;this.__eContents=s.flatten(s.map(d,function(a){return e=this.get(a.get("name")),e?e.array?e.array():e:[]},this)),this.__updateContents=!1}return this.__eContents},eURI:function(){var a=this.eResource();return(a?a.get("uri"):"")+"#"+this.fragment()},fragment:function(){var a,b,c,d=this.eContainer,e=this.eClass,f=e.get("eIDAttribute");return d?f?this.get(f.get("name")):this._id?this._id:this.isKindOf("EModelElement")?d?d.isKindOf("Resource")?(b=d.get("contents"),b.size()>1?"/"+b.indexOf(this):"/"):d.fragment()+"/"+this.get("name"):"/":(d.isKindOf("Resource")?(b=d.get("contents"),c=b.size()>1?"/"+b.indexOf(this):"/"):(a=this.eContainingFeature)&&(c=d.fragment()+"/@"+a.get("name"),1!==a.get("upperBound")&&(c+="."+d.get(a.get("name")).indexOf(this))),c):null}},s.extend(v.prototype,t.EObjectPrototype,u);var w=t.EList=function(a,b){return this._internal=[],this._owner=a,this._size=0,this._setFeature(b),this};w.prototype={_setFeature:function(a){a&&(this._feature=a,this._isContainment=this._feature.get("containment"),s.each(this._internal,function(a){this._isContainment&&(a.eContainer=this._owner,a.eContainingFeature=this._feature)},this))},add:function(a){if(!a||!a instanceof v)return this;this._isContainment&&(a.eContainingFeature=this._feature,a.eContainer=this._owner),this._size++,this._internal.push(a);var b=this._owner.eResource(),c="add";return this._feature&&(c+=":"+this._feature.get("name")),this._owner.trigger(c,a),b&&b.trigger("add",this),this},addAll:function(){return s.each(s.flatten(arguments||[]),function(a){this.add(a)},this),this},remove:function(a){var b="remove",c=this._owner.eResource();return this._internal=s.without(this._internal,a),this._size=this._size-1,this._feature&&(b+=":"+this._feature.get("name")),this._owner.trigger(b,a),c&&c.trigger("remove",this),this},clear:function(){for(var a=this.array(),b=0;b<a.length;b++)this.remove(a[b]);return this},size:function(){return this._size},at:function(a){if(this._size<a)throw new Error("Index Out Of Range");return this._internal[a]},array:function(){return this._internal},first:function(){return s.first(this._internal)},last:function(){return s.last(this._internal)},rest:function(a){return s.rest(this._internal,a)},each:function(a,b){return s.each(this._internal,a,b)},filter:function(a,b){return s.filter(this._internal,a,b)},find:function(a,b){return s.find(this._internal,a,b)},map:function(a,b){return s.map(this._internal,a,b)},reject:function(a,b){return s.reject(this._internal,a,b)},contains:function(a){return s.contains(this._internal,a)},indexOf:function(a){return s.indexOf(this._internal,a)}};var x=new v,y=new v,z=new v,A=new v,B=new v,C=new v,D=new v,E=new v,F=new v,G=new v,H=new v,I=new v,J=new v,K=new v,L=new v,M=new v,N=new v;x.eClass=x,x.values={name:"EClass",abstract:!1,interface:!1,eStructuralFeatures:new t.EList(x),eOperations:new t.EList(x),eSuperTypes:new t.EList(x),eAllSuperTypes:function(){if(!this._eAllSuperTypes){var a=function(a){var b=a.get("eSuperTypes").array(),c=s.flatten(s.map(b,function(a){return a.get("eAllSuperTypes")}));return s.union(c,b)};this.on("add:eSuperTypes remove:eSuperTypes",function(){this._eAllSuperTypes=a(this)},this),this._eAllSuperTypes=a(this)}return this._eAllSuperTypes},eAllSubTypes:function(){var a,b,c;return c=this.eResource().get("resourceSet"),a=c?c.elements("EClass"):t.EPackage.Registry.elements("EClass"),b=s.filter(a,function(a){return s.contains(a.get("eAllSuperTypes"),this)},this),s.isArray(b)?b:[]},eReferences:function(){var a;return a=this.get("eStructuralFeatures"),a.filter(function(a){return a.isTypeOf("EReference")})},eAttributes:function(){var a;return a=this.get("eStructuralFeatures"),a.filter(function(a){return a.isTypeOf("EAttribute")})},eIDAttribute:function(){var a,b;return a=this.get("eAllAttributes"),b=s.filter(a,function(a){return!0===a.get("iD")}),s.isArray(b)?b[0]:null},eAllStructuralFeatures:function(){return function(a){var b,c,d;return d=a.get("eAllSuperTypes"),c=a.values.eStructuralFeatures.array(),b=s.flatten(s.map(d||[],function(a){return a.values.eStructuralFeatures.array()})),s.union(b||[],c||[])}(this)},eAllAttributes:function(){var a=this.get("eAllStructuralFeatures");return s.filter(a||[],function(a){return a.eClass===t.EAttribute})},eAllContainments:function(){var a=this.get("eAllStructuralFeatures");return s.filter(a,function(a){return a.eClass===t.EReference&&a.get("containment")})},eAllReferences:function(){var a=this.get("eAllStructuralFeatures");return s.filter(a,function(a){return a.eClass===t.EReference&&!a.get("containment")})}},J.values={name:"abstract",lowerBound:0,upperBound:1,defaultValueLiteral:"false",defaultValue:!1,eType:A},K.values={name:"interface",lowerBound:0,upperBound:1,defaultValueLiteral:"false",defaultValue:!1,eType:A},L.values={name:"eStructuralFeatures",lowerBound:0,upperBound:-1,containment:!0},N.values={name:"eSuperTypes",lowerBound:0,upperBound:-1,containment:!1},M.values={name:"eOperations",lowerBound:0,upperBound:-1,containment:!0},x.get("eStructuralFeatures").add(J).add(K).add(N).add(L).add(M);var O=new v;O.values={name:"eAllStructuralFeatures",lowerBound:0,upperBound:-1,derived:!0,containment:!1,_:x.values.eAllStructuralFeatures};var P=new v;P.values={name:"eAllSuperTypes",lowerBound:0,upperBound:-1,derived:!0,containment:!1,_:x.values.eAllSuperTypes};var Q=new v;Q.values={name:"eAllSubTypes",lowerBound:0,upperBound:-1,derived:!0,containment:!1,_:x.values.eAllSubTypes};var R=new v;R.values={name:"eAllAttributes",lowerBound:0,upperBound:-1,derived:!0,containment:!1,_:x.values.eAllAttributes};var S=new v;S.values={name:"eAllContainments",lowerBound:0,upperBound:-1,derived:!0,containment:!1,_:x.values.eAllContainments};var T=new v;T.values={name:"eAllReferences",lowerBound:0,upperBound:-1,derived:!0,containment:!1,_:x.values.eAllReferences};var U=new v;U.values={name:"eReferences",lowerBound:0,upperBound:-1,derived:!0,containment:!1,_:x.values.eReferences};var V=new v;V.values={name:"eAttributes",lowerBound:0,upperBound:-1,derived:!0,containment:!1,_:x.values.eAttributes};var W=new v;W.values={name:"eIDAttribute",lowerBound:0,upperBound:1,derived:!0,containment:!1,_:x.values.eIDAttribute},x.get("eStructuralFeatures").add(O).add(P).add(Q).add(R).add(T).add(S).add(V).add(U).add(W),x.getEStructuralFeature=function(a){var b;return b=a.eClass?a.get("name"):a,s.find(this.get("eAllStructuralFeatures"),function(a){return a.get("name")===b})};var X=new v;X.values={name:"getEStructuralFeature",lowerBound:0,upperBound:1,eParameters:new t.EList(this)},X._=x.getEStructuralFeature,x.get("eOperations").add(X),x.values.eStructuralFeatures._setFeature(L),x.values.eSuperTypes._setFeature(N),x.values.eOperations._setFeature(M);var Y=x.create(),Z=x.create(),$=x.create(),_=x.create(),aa=x.create(),ba=x.create(),ca=x.create(),da=x.create(),ea=x.create(),fa=x.create(),ga=x.create(),ha=x.create(),ia=x.create(),ja=x.create(),ka=x.create(),la=x.create(),ma=x.create();J.eClass=ga,K.eClass=ga,L.eClass=ha,L.values.eType=fa,N.eClass=ha,N.values.eType=x,M.eClass=ha,M.values.eType=ia,O.eClass=ha,O.values.eType=fa,P.eClass=ha,P.values.eType=x,Q.eClass=ha,Q.values.eType=x,R.eClass=ha,R.values.eType=ga,T.eClass=ha,T.values.eType=ha,S.eClass=ha,S.values.eType=ha,V.eClass=ha,V.values.eType=ga,U.eClass=ha,U.values.eType=ha,W.eClass=ha,W.values.eType=ga,X.eClass=ia,X.values.eType=fa,Z.get("eSuperTypes").add(Y),$.get("eSuperTypes").add(Z),_.get("eSuperTypes").add(Z),aa.get("eSuperTypes").add(_),ba.get("eSuperTypes").add(_),x.get("eSuperTypes").add(ba),ca.get("eSuperTypes").add(ba),da.get("eSuperTypes").add(ca),ka.get("eSuperTypes").add(_),ea.get("eSuperTypes").add(_),fa.get("eSuperTypes").add(ea),ga.get("eSuperTypes").add(fa),ha.get("eSuperTypes").add(fa),ia.get("eSuperTypes").add(ea),ja.get("eSuperTypes").add(ea),ma.get("eSuperTypes").add(_),la.get("eSuperTypes").add(Y);var na=new v,oa=new v,pa=new v,qa=new v,ra=new v,sa=new v,ta=new v;na.eClass=ha,na.values={name:"eType",lowerBound:0,upperBound:1,containment:!1,eType:ba},oa.eClass=ga,oa.values={name:"ordered",lowerBound:0,upperBound:1,defaultValueLiteral:"true",defaultValue:!0,eType:A},pa.eClass=ga,pa.values={name:"unique",lowerBound:0,upperBound:1,defaultValueLiteral:"true",defaultValue:!0,eType:A},qa.eClass=ga,qa.values={name:"lowerBound",lowerBound:0,upperBound:1,defaultValueLiteral:"0",defaultValue:0,eType:z},ra.eClass=ga,ra.values={name:"upperBound",lowerBound:0,upperBound:1,defaultValueLiteral:"1",defaultValue:1,eType:z},sa.eClass=ga,sa.values={name:"many",lowerBound:0,upperBound:1,eType:A,derived:!0,_:function(){return 1!==this.get("upperBound")}},ta.eClass=ga,ta.values={name:"required",lowerBound:0,upperBound:1,eType:A,derived:!0,_:function(){return 1===this.get("lowerBound")}},ea.get("eStructuralFeatures").add(na).add(oa).add(pa).add(qa).add(ra).add(sa).add(ta);var ua=new v;ua.eClass=ha,ua.values={name:"eAnnotations",eType:$,lowerBound:0,upperBound:-1,containment:!0},Z.get("eStructuralFeatures").add(ua);var va=new v;va.eClass=ga,va.values={name:"name",lowerBound:0,upperBound:1,eType:y},_.get("eStructuralFeatures").add(va);var wa=ga.create({name:"changeable",eType:A}),xa=ga.create({name:"volatile",eType:A}),ya=ga.create({name:"transient",eType:A}),za=ga.create({name:"defaultValueLiteral",eType:y}),Aa=ga.create({name:"defaultValue",eType:I,derived:!0}),Ba=ga.create({name:"unsettable",eType:A}),Ca=ga.create({name:"derived",eType:A});fa.get("eStructuralFeatures").add(wa).add(xa).add(ya).add(za).add(Aa).add(Ba).add(Ca),Aa.set({derived:!0});var Da=ga.create({name:"containment",eType:A}),Ea=ga.create({name:"container",eType:A}),Fa=ga.create({name:"resolveProxies",eType:A}),Ga=ha.create({name:"eOpposite",eType:ha});ha.get("eStructuralFeatures").add(Da).add(Ea).add(Fa).add(Ga);var Ha=ga.create({name:"iD",eType:A});ga.get("eStructuralFeatures").add(Ha),Y.set({name:"EObject"}),Z.set({name:"EModelElement",abstract:!0}),$.set({name:"EAnnotation"}),_.set({name:"ENamedElement",abstract:!0}),aa.set({name:"EPackage"}),ba.set({name:"EClassifier",abstract:!0}),ca.set({name:"EDataType"}),da.set({name:"EEnum"}),ea.set({name:"ETypedElement",abstract:!0}),fa.set({name:"EStructuralFeature",abstract:!0}),ga.set({name:"EAttribute"}),ha.set({name:"EReference"}),ia.set({name:"EOperation"}),ja.set({name:"EParameter"}),ka.set({name:"EEnumLiteral"}),ma.set({name:"ETypeParameter"}),la.set({name:"EGenericType"});var Ia=ha.create({name:"eParameters",eType:ja,containment:!0,lowerBound:0,upperBound:-1});ia.get("eStructuralFeatures").add(Ia);var Ja=ha.create({name:"eLiterals",eType:ka,containment:!0,lowerBound:0,upperBound:-1});da.get("eStructuralFeatures").add(Ja),ka.get("eStructuralFeatures").add(ga.create({name:"literal",eType:y})).add(ga.create({name:"value",eType:z}));var Ka=x.create({name:"EStringToStringMapEntry"}),La=ga.create({name:"key",lowerBound:0,upperBound:1,eType:y}),Ma=ga.create({name:"value",lowerBound:0,upperBound:1,eType:y});Ka.get("eStructuralFeatures").add(La).add(Ma);var Na=ga.create({name:"source",upperBound:1,lowerBound:0,eType:y}),Oa=ha.create({name:"details",upperBound:-1,lowerBound:0,containment:!0,eType:Ka});$.get("eStructuralFeatures").add(Na).add(Oa);var Pa=ha.create({name:"eTypeParameter",eType:ma,containment:!1,lowerBound:0,upperBound:1}),Qa=ha.create({name:"eUpperBound",containment:!0,eType:la}),Ra=ha.create({name:"eLowerBound",containment:!0,eType:la}),Sa=ha.create({name:"eTypeArguments",containment:!0,upperBound:-1,eType:la}),Ta=ha.create({name:"eClassifier",eType:ba});la.get("eStructuralFeatures").add(Pa).add(Qa).add(Ra).add(Sa).add(Ta);var Ua=ha.create({name:"eGenericType",upperBound:1,containment:!0,eType:la});ea.get("eStructuralFeatures").add(Ua);var Va=ha.create({name:"eGenericSuperTypes",upperBound:-1,containment:!0,eType:la});x.get("eStructuralFeatures").add(Va);var Wa=ha.create({name:"eGenericExceptions",upperBound:-1,containment:!0,eType:la});ia.get("eStructuralFeatures").add(Wa);var Xa=ha.create({name:"eBounds",containment:!0,upperBound:-1,eType:la}),Ya=ha.create({name:"eGenericTypes",containment:!1,upperBound:-1,eType:la});ma.get("eStructuralFeatures").add(Xa).add(Ya);var Za=ha.create({name:"eTypeParameters",upperBound:-1,containment:!0,eType:ma});ba.get("eStructuralFeatures").add(Za);var $a=ha.create({name:"eTypeParameters",upperBound:-1,containment:!0,eType:ma});ia.get("eStructuralFeatures").add($a),y.eClass=ca,y.set({name:"EString"}),z.eClass=ca,z.set({name:"EInt"}),A.eClass=ca,A.set({name:"EBoolean"}),C.eClass=ca,C.set({name:"EDate"}),B.eClass=ca,B.set({name:"EDouble"}),D.eClass=ca,D.set({name:"EIntegerObject"}),E.eClass=ca,E.set({name:"EFloatObject"}),F.eClass=ca,F.set({name:"ELongObject"}),G.eClass=ca,G.set({name:"EMap"}),H.eClass=ca,H.set({name:"EDiagnosticChain"}),I.eClass=ca,I.set({name:"JSObject"}),t.ELong=ca.create({name:"ELong"}),t.EFloat=ca.create({name:"EFloat"}),t.EShort=ca.create({name:"EShort"}),t.EDoubleObject=ca.create({name:"EDoubleObject"});var _a=ha.create({name:"eClassifiers",lowerBound:0,upperBound:-1,containment:!0,eType:ba}),ab=ha.create({name:"eSubPackages",lowerBound:0,upperBound:-1,containment:!0,eType:aa});aa.get("eStructuralFeatures").add(ga.create({name:"nsURI",eType:y})).add(ga.create({name:"nsPrefix",eType:y})).add(_a).add(ab),t.EcorePackage=aa.create({name:"ecore",nsPrefix:"ecore",nsURI:"http://www.eclipse.org/emf/2002/Ecore"}),t.EcorePackage.get("eClassifiers").add(Y).add(Z).add($).add(_).add(aa).add(ba).add(x).add(ca).add(ea).add(fa).add(ga).add(ha).add(ia).add(ja).add(da).add(ka).add(ma).add(la).add(Ka).add(y).add(A).add(z).add(B).add(D).add(E).add(F).add(G).add(H).add(C).add(t.EShort).add(t.EFloat).add(t.ELong).add(t.EDoubleObject).add(I),t.EObject=Y,t.EModelElement=Z,t.EClass=x,t.EClassifier=ba,t.EAnnotation=$,t.EStringToStringMapEntry=Ka,t.EPackage=aa,t.ETypedElement=ea,t.ENamedElement=_,t.EStructuralFeature=fa,t.EAttribute=ga,t.EReference=ha,t.EEnum=da,t.EEnumLiteral=ka,t.EDataType=ca,t.EOperation=ia,t.EParameter=ja,t.ETypeParameter=ma,t.EGenericType=la,t.EString=y,t.EBoolean=A,t.EInt=z,t.EDouble=B,t.EIntegerObject=D,t.EFloatObject=E,t.ELongObject=F,t.EMap=G,t.EDiagnosticChain=H,t.EDate=C,t.JSObject=I,t.EPackage.Registry={_ePackages:{},getEPackage:function(a){return this._ePackages[a]},register:function(a){if(!a.isSet("nsURI"))throw new Error("Cannot register EPackage without nsURI");a.get("eSubPackages").each(function(a){register(a)}),this._ePackages[a.get("nsURI")]=a},ePackages:function(){return s.values(this._ePackages)},elements:function(a){var b=function(b){return!a||(a.eClass?b.eClass===a:b.eClass.get("name")===a)},c=this.ePackages(),d=function(a){return s.map(a.eContents(),function(a){return[a,d(a)]})},e=function(a){return d(a)},f=[c,s.map(c,e)];return f=s.flatten(f),f=s.filter(f,b)}},t.EPackage.Registry.register(t.EcorePackage),t.JSON={dataType:"json",contentType:"application/json",parse:function(a,b){function c(a,b){return a&&b?function(c){if(c&&!c.get("derived")){var d=c.get("name"),g=a[d];if(void 0!==g)if(c.isTypeOf("EAttribute"))b.set(d,g);else if(c.get("containment")){var h=c.get("eType");1===c.get("upperBound")?b.set(d,e(g,h)):s.each(g||[],function(a){b.get(d).add(e(a,h))})}else f.push({parent:b,feature:c,value:g})}}:function(){}}function d(a,b){if(a.source&&b.set("source",a.source),a.details)if(s.isArray(a.details));else{var c=b.get("details");s.each(a.details,function(a,b){c.add(t.EStringToStringMapEntry.create({key:b,value:a}))})}}function e(a,b){var e;if(a&&(b||a.eClass)){a.eClass&&(b=h.getEObject(a.eClass));try{e=t.create(b)}catch(b){throw new Error("Cannot parse or cannot find EClass for object"+JSON.stringify(a))}e&&(a._id&&(e._id=a._id),b===t.EAnnotation?d(a,e):s.each(b.get("eAllStructuralFeatures"),c(a,e)))}return e}s.isString(b)&&(b=JSON.parse(b));var f=[],h=a.get("resourceSet")||t.ResourceSet.create();s.isArray(b)?s.each(b,function(b){a.add(e(b))}):a.add(e(b)),function(){function b(a,b,d,e){var f=d.$ref,g=c[f];g||(g=h.getEObject(f)),g&&(e?a.get(b.get("name")).add(g):a.set(b.get("name"),g))}var c=g(a);s.each(f,function(a){var c=a.parent,d=a.feature,e=a.value;1===d.get("upperBound")?b(c,d,e,!1):s.each(s.isArray(e)?e:[e],function(a){b(c,d,a,!0)})})}()},to:function(a){function b(a,b){var c=b.eResource(),d=a.eResource(),e=c!==d;if(c&&d){i[c.get("uri")]||(i[c.get("uri")]=g(c));var f=i[c.get("uri")];for(var h in f)if(f[h]===b)return e?c.get("uri")+"#"+h:h;return null}}function c(a,c,d){return!0===d?f(c):{$ref:b(a,c),eClass:c.eClass.eURI()}}function d(a,b){return a&&b?function(d,e){if("_"!==e[0]){var f=a.eClass.getEStructuralFeature(e),g=a.isSet(e);if(f&&g&&!f.get("derived")){var h=d,i=f.get("name"),j=1!==f.get("upperBound"),k=f.get("containment");f.isTypeOf("EAttribute")?b[i]=h:j?(b[i]=[],h.each(function(d){b[i].push(c(a,d,k))})):b[i]=c(a,h,k)}}}:function(){}}function e(a,b){a.values.source&&(b.source=a.values.source),a.values.details&&a.values.details.size()>0&&(b.details={},a.values.details.each(function(a){var c=a.get("key"),d=a.get("value");c&&(b.details[c]=d)}))}function f(a){var b=a.eClass,c=a.values,f={eClass:b.eURI()};return a._id&&(f._id=a._id),b===t.EAnnotation?e(a,f):s.each(c,d(a,f)),f}var h=a.get("contents").array(),i={};i[a.get("uri")]=g(a);var j;if(1===h.length){j=f(h[0])}else{j=[];for(var k=0;k<h.length;k++)j.push(f(h[k]))}return j}};var bb=t.Resource=t.EClass.create({name:"Resource",eSuperTypes:[t.EObject],eStructuralFeatures:[{eClass:t.EAttribute,name:"uri",lowerBound:1,upperBound:1,eType:t.EString},{eClass:t.EReference,name:"contents",upperBound:-1,containment:!0,eType:t.EObject},{eClass:t.EReference,name:"resourceSet",upperBound:1,lowerBound:0,eType:t.ResourceSet}],eOperations:[{eClass:t.EOperation,name:"add",_:function(a){return a||a.eClass?(a.eContainer=this,this.get("contents").add(a),this):this}},{eClass:t.EOperation,name:"clear",_:function(){return this.get("contents").clear(),this}},{eClass:t.EOperation,name:"addAll",_:function(a){return s.isArray(a)&&s.each(a,function(a){this.add(a)},this),this}},{eClass:t.EOperation,name:"getEObject",eType:t.EObject,_:function(a){return a?this._index()[a]?this._index()[a]:void 0:null}},{eClass:t.EOperation,name:"each",_:function(a,b){return this.get("contents").each(a,b)}},{eClass:t.EOperation,name:"to",_:function(a,b){return a&&"function"==typeof a.to?a.to(this,b):t.JSON.to(this)}},{eClass:t.EOperation,name:"parse",_:function(a,b){return b&&"function"==typeof b.parse?b.parse(this,a):t.JSON.parse(this,a),this}},{eClass:t.EOperation,name:"save",_:function(a,b){b||(b={});var c,d=b.format?b.format:t.JSON;try{c=this.to(d)}catch(b){a(null,b)}a(c,null)}},{eClass:t.EOperation,name:"load",_:function(a,b,c){c||(c={});var d=c.format||t.JSON;this.get("resourceSet");try{this.parse(a,d)}catch(a){b(null,a)}this.trigger("change"),"function"==typeof b&&b(this,null)}},{eClass:t.EOperation,name:"remove",_:function(){var a=this.get("resourceSet");a&&a.get("resources").remove(this),this.clear()}},{eClass:t.EOperation,name:"_index",eType:I,_:function(){if(s.isUndefined(this.__updateIndex)){var a=this;a.__updateIndex=!0,a.on("add remove",function(){a.__updateIndex=!0})}return this.__updateIndex&&(this.__index=g(this),this.__updateIndex=!1),this.__index}}]}),cb=function(){this.uriMap={}};cb.prototype={map:function(a,b){this.uriMap[a]=b},normalize:function(a){var b=a.split("#"),c=b[0],d=this.uriMap[c];if(d)return d;var e,f,g=c.lastIndexOf("/")+1;return(e=c.slice(0,g))===c?a:(f=c.slice(g,c.length),this.normalize(e)+f)}};var db=t.ResourceSet=t.EClass.create({name:"ResourceSet",eSuperTypes:[t.EObject],eStructuralFeatures:[{eClass:t.EAttribute,name:"uri",upperBound:1,lowerBound:0,eType:t.EString},{eClass:t.EReference,name:"resources",upperBound:-1,containment:!0,eType:bb}],eOperations:[{eClass:t.EOperation,eType:t.Resource,upperBound:1,name:"create",_:function(a){var b=s.isObject(a)?a:{uri:a};if(!b.uri)throw new Error("Cannot create Resource, missing URI parameter");var c=this.get("resources").find(function(a){return a.get("uri")===b.uri});return c||(c=t.Resource.create(b),c.set("resourceSet",this),this.get("resources").add(c),this.trigger("add",c),c)}},{eClass:t.EOperation,eType:t.EObject,upperBound:1,name:"getEObject",_:function(a){var b,c=a.split("#"),d=c[0],e=c[1];if(!e)return null;var f=t.EPackage.Registry.getEPackage(d);return f&&((b=f.eResource())||(b=this.create({uri:d}),b.add(f),this.get("resources").add(b),b.set("resourceSet",this))),b?b.getEObject(e):(b=this.get("resources").find(function(a){return a.get("uri")===d}),b?b.getEObject(e):null)}},{eClass:t.EOperation,eType:t.EObject,upperBound:-1,name:"elements",_:function(a){var b=function(b){return!a||b.isKindOf(a)},c=this.get("resources").map(function(a){return s.filter(s.values(a._index()),b)});return s.flatten(c)}},{eClass:t.EOperation,eType:t.JSObject,upperBound:1,name:"uriConverter",_:function(){return this._converter||(this._converter=new cb),this._converter}},{eClass:t.EOperation,eType:t.JSObject,upperBound:1,name:"toJSON",_:function(){var a={total:this.get("resources").size(),resources:[]};return this.get("resources").each(function(b){a.resources.push({uri:b.get("uri"),length:b.get("contents").size(),contents:b.get("contents").map(function(a){return{eURI:a.eURI(),eClass:a.eClass.eURI()}})})}),a}},{eClass:t.EOperation,name:"parse",_:function(a){a&&a.resources&&s.each(a.resources,function(a){a.uri&&resourceSet.create({uri:a.uri})},this)}}]});bb.getEStructuralFeature("resourceSet").set("eType",db);var eb=t.EPackage.create({name:"resources",nsPrefix:"resources",nsURI:"http://www.eclipselabs.org/ecore/2012/resources",eClassifiers:[db,bb]});t.Resource.create({uri:t.EcorePackage.get("nsURI")}).add(t.EcorePackage),t.Resource.create({uri:eb.get("nsURI")}).add(eb),t.EPackage.Registry.register(eb),t.Edit={childTypes:j,siblingTypes:k,childDescriptors:m,siblingDescriptors:n,choiceOfValues:q,_get:function(a,b){if(!b||!b.eClass)return null;var c=b.eClass.get("name");return this[c]?"function"==typeof this[c][a]?this[c][a](b):this[c][a]:b.eClass.get("name")},text:function(a){return this._get("text",a)},icon:function(a){return this._get("icon",a)},label:function(a){return this._get("label",a)},EClass:{text:o,label:o,icon:"icon-EClass"},EDataType:{text:o,label:o,icon:"icon-EDataType"},EEnum:{text:o,label:o,icon:"icon-EEnum"},EEnumLiteral:{text:function(a){return a.get("name")+" = "+a.get("value")},label:o,icon:"icon-EEnumLiteral"},EAttribute:{text:p,label:o,icon:"icon-EAttribute"},EReference:{text:p,label:o,icon:"icon-EReference"},EOperation:{text:p,label:o,icon:"icon-EOperation"},EPackage:{text:o,label:o,icon:"icon-EPackage"},EAnnotation:{text:function(a){return a.get("source")},label:function(a){return a.get("source")},icon:"icon-EAnnotation"},EStringToStringMapEntry:{text:function(a){return a.get("key")+" -> "+a.get("value")},label:function(a){return a.get("key")},icon:"icon-EStringToStringMapEntry"},ResourceSet:{text:"resourceSet",label:"",icon:"icon-EObject"},Resource:{text:function(a){return a.get("uri")},label:function(a){return a.get("uri")},icon:"icon-EObject"}}}).call(this);