var $hxClasses = $hxClasses || {},$estr = function() { return js.Boot.__string_rec(this,''); };
function $extend(from, fields) {
	function inherit() {}; inherit.prototype = from; var proto = new inherit();
	for (var name in fields) proto[name] = fields[name];
	return proto;
}
var EReg = $hxClasses["EReg"] = function(r,opt) {
	opt = opt.split("u").join("");
	this.r = new RegExp(r,opt);
};
EReg.__name__ = ["EReg"];
EReg.prototype = {
	customReplace: function(s,f) {
		var buf = new StringBuf();
		while(true) {
			if(!this.match(s)) break;
			buf.b += Std.string(this.matchedLeft());
			buf.b += Std.string(f(this));
			s = this.matchedRight();
		}
		buf.b += Std.string(s);
		return buf.b;
	}
	,replace: function(s,by) {
		return s.replace(this.r,by);
	}
	,split: function(s) {
		var d = "#__delim__#";
		return s.replace(this.r,d).split(d);
	}
	,matchedPos: function() {
		if(this.r.m == null) throw "No string matched";
		return { pos : this.r.m.index, len : this.r.m[0].length};
	}
	,matchedRight: function() {
		if(this.r.m == null) throw "No string matched";
		var sz = this.r.m.index + this.r.m[0].length;
		return this.r.s.substr(sz,this.r.s.length - sz);
	}
	,matchedLeft: function() {
		if(this.r.m == null) throw "No string matched";
		return this.r.s.substr(0,this.r.m.index);
	}
	,matched: function(n) {
		return this.r.m != null && n >= 0 && n < this.r.m.length?this.r.m[n]:(function($this) {
			var $r;
			throw "EReg::matched";
			return $r;
		}(this));
	}
	,match: function(s) {
		if(this.r.global) this.r.lastIndex = 0;
		this.r.m = this.r.exec(s);
		this.r.s = s;
		return this.r.m != null;
	}
	,r: null
	,__class__: EReg
}
var Hash = $hxClasses["Hash"] = function() {
	this.h = { };
};
Hash.__name__ = ["Hash"];
Hash.prototype = {
	toString: function() {
		var s = new StringBuf();
		s.b += Std.string("{");
		var it = this.keys();
		while( it.hasNext() ) {
			var i = it.next();
			s.b += Std.string(i);
			s.b += Std.string(" => ");
			s.b += Std.string(Std.string(this.get(i)));
			if(it.hasNext()) s.b += Std.string(", ");
		}
		s.b += Std.string("}");
		return s.b;
	}
	,iterator: function() {
		return { ref : this.h, it : this.keys(), hasNext : function() {
			return this.it.hasNext();
		}, next : function() {
			var i = this.it.next();
			return this.ref["$" + i];
		}};
	}
	,keys: function() {
		var a = [];
		for( var key in this.h ) {
		if(this.h.hasOwnProperty(key)) a.push(key.substr(1));
		}
		return HxOverrides.iter(a);
	}
	,remove: function(key) {
		key = "$" + key;
		if(!this.h.hasOwnProperty(key)) return false;
		delete(this.h[key]);
		return true;
	}
	,exists: function(key) {
		return this.h.hasOwnProperty("$" + key);
	}
	,get: function(key) {
		return this.h["$" + key];
	}
	,set: function(key,value) {
		this.h["$" + key] = value;
	}
	,h: null
	,__class__: Hash
}
var HxOverrides = $hxClasses["HxOverrides"] = function() { }
HxOverrides.__name__ = ["HxOverrides"];
HxOverrides.dateStr = function(date) {
	var m = date.getMonth() + 1;
	var d = date.getDate();
	var h = date.getHours();
	var mi = date.getMinutes();
	var s = date.getSeconds();
	return date.getFullYear() + "-" + (m < 10?"0" + m:"" + m) + "-" + (d < 10?"0" + d:"" + d) + " " + (h < 10?"0" + h:"" + h) + ":" + (mi < 10?"0" + mi:"" + mi) + ":" + (s < 10?"0" + s:"" + s);
}
HxOverrides.strDate = function(s) {
	switch(s.length) {
	case 8:
		var k = s.split(":");
		var d = new Date();
		d.setTime(0);
		d.setUTCHours(k[0]);
		d.setUTCMinutes(k[1]);
		d.setUTCSeconds(k[2]);
		return d;
	case 10:
		var k = s.split("-");
		return new Date(k[0],k[1] - 1,k[2],0,0,0);
	case 19:
		var k = s.split(" ");
		var y = k[0].split("-");
		var t = k[1].split(":");
		return new Date(y[0],y[1] - 1,y[2],t[0],t[1],t[2]);
	default:
		throw "Invalid date format : " + s;
	}
}
HxOverrides.cca = function(s,index) {
	var x = s.charCodeAt(index);
	if(x != x) return undefined;
	return x;
}
HxOverrides.substr = function(s,pos,len) {
	if(pos != null && pos != 0 && len != null && len < 0) return "";
	if(len == null) len = s.length;
	if(pos < 0) {
		pos = s.length + pos;
		if(pos < 0) pos = 0;
	} else if(len < 0) len = s.length + len - pos;
	return s.substr(pos,len);
}
HxOverrides.remove = function(a,obj) {
	var i = 0;
	var l = a.length;
	while(i < l) {
		if(a[i] == obj) {
			a.splice(i,1);
			return true;
		}
		i++;
	}
	return false;
}
HxOverrides.iter = function(a) {
	return { cur : 0, arr : a, hasNext : function() {
		return this.cur < this.arr.length;
	}, next : function() {
		return this.arr[this.cur++];
	}};
}
var IntHash = $hxClasses["IntHash"] = function() {
	this.h = { };
};
IntHash.__name__ = ["IntHash"];
IntHash.prototype = {
	toString: function() {
		var s = new StringBuf();
		s.b += Std.string("{");
		var it = this.keys();
		while( it.hasNext() ) {
			var i = it.next();
			s.b += Std.string(i);
			s.b += Std.string(" => ");
			s.b += Std.string(Std.string(this.get(i)));
			if(it.hasNext()) s.b += Std.string(", ");
		}
		s.b += Std.string("}");
		return s.b;
	}
	,iterator: function() {
		return { ref : this.h, it : this.keys(), hasNext : function() {
			return this.it.hasNext();
		}, next : function() {
			var i = this.it.next();
			return this.ref[i];
		}};
	}
	,keys: function() {
		var a = [];
		for( var key in this.h ) {
		if(this.h.hasOwnProperty(key)) a.push(key | 0);
		}
		return HxOverrides.iter(a);
	}
	,remove: function(key) {
		if(!this.h.hasOwnProperty(key)) return false;
		delete(this.h[key]);
		return true;
	}
	,exists: function(key) {
		return this.h.hasOwnProperty(key);
	}
	,get: function(key) {
		return this.h[key];
	}
	,set: function(key,value) {
		this.h[key] = value;
	}
	,h: null
	,__class__: IntHash
}
var IntIter = $hxClasses["IntIter"] = function(min,max) {
	this.min = min;
	this.max = max;
};
IntIter.__name__ = ["IntIter"];
IntIter.prototype = {
	next: function() {
		return this.min++;
	}
	,hasNext: function() {
		return this.min < this.max;
	}
	,max: null
	,min: null
	,__class__: IntIter
}
var List = $hxClasses["List"] = function() {
	this.length = 0;
};
List.__name__ = ["List"];
List.prototype = {
	map: function(f) {
		var b = new List();
		var l = this.h;
		while(l != null) {
			var v = l[0];
			l = l[1];
			b.add(f(v));
		}
		return b;
	}
	,filter: function(f) {
		var l2 = new List();
		var l = this.h;
		while(l != null) {
			var v = l[0];
			l = l[1];
			if(f(v)) l2.add(v);
		}
		return l2;
	}
	,join: function(sep) {
		var s = new StringBuf();
		var first = true;
		var l = this.h;
		while(l != null) {
			if(first) first = false; else s.b += Std.string(sep);
			s.b += Std.string(l[0]);
			l = l[1];
		}
		return s.b;
	}
	,toString: function() {
		var s = new StringBuf();
		var first = true;
		var l = this.h;
		s.b += Std.string("{");
		while(l != null) {
			if(first) first = false; else s.b += Std.string(", ");
			s.b += Std.string(Std.string(l[0]));
			l = l[1];
		}
		s.b += Std.string("}");
		return s.b;
	}
	,iterator: function() {
		return { h : this.h, hasNext : function() {
			return this.h != null;
		}, next : function() {
			if(this.h == null) return null;
			var x = this.h[0];
			this.h = this.h[1];
			return x;
		}};
	}
	,remove: function(v) {
		var prev = null;
		var l = this.h;
		while(l != null) {
			if(l[0] == v) {
				if(prev == null) this.h = l[1]; else prev[1] = l[1];
				if(this.q == l) this.q = prev;
				this.length--;
				return true;
			}
			prev = l;
			l = l[1];
		}
		return false;
	}
	,clear: function() {
		this.h = null;
		this.q = null;
		this.length = 0;
	}
	,isEmpty: function() {
		return this.h == null;
	}
	,pop: function() {
		if(this.h == null) return null;
		var x = this.h[0];
		this.h = this.h[1];
		if(this.h == null) this.q = null;
		this.length--;
		return x;
	}
	,last: function() {
		return this.q == null?null:this.q[0];
	}
	,first: function() {
		return this.h == null?null:this.h[0];
	}
	,push: function(item) {
		var x = [item,this.h];
		this.h = x;
		if(this.q == null) this.q = x;
		this.length++;
	}
	,add: function(item) {
		var x = [item];
		if(this.h == null) this.h = x; else this.q[1] = x;
		this.q = x;
		this.length++;
	}
	,length: null
	,q: null
	,h: null
	,__class__: List
}
var Reflect = $hxClasses["Reflect"] = function() { }
Reflect.__name__ = ["Reflect"];
Reflect.hasField = function(o,field) {
	return Object.prototype.hasOwnProperty.call(o,field);
}
Reflect.field = function(o,field) {
	var v = null;
	try {
		v = o[field];
	} catch( e ) {
	}
	return v;
}
Reflect.setField = function(o,field,value) {
	o[field] = value;
}
Reflect.getProperty = function(o,field) {
	var tmp;
	return o == null?null:o.__properties__ && (tmp = o.__properties__["get_" + field])?o[tmp]():o[field];
}
Reflect.setProperty = function(o,field,value) {
	var tmp;
	if(o.__properties__ && (tmp = o.__properties__["set_" + field])) o[tmp](value); else o[field] = value;
}
Reflect.callMethod = function(o,func,args) {
	return func.apply(o,args);
}
Reflect.fields = function(o) {
	var a = [];
	if(o != null) {
		var hasOwnProperty = Object.prototype.hasOwnProperty;
		for( var f in o ) {
		if(hasOwnProperty.call(o,f)) a.push(f);
		}
	}
	return a;
}
Reflect.isFunction = function(f) {
	return typeof(f) == "function" && !(f.__name__ || f.__ename__);
}
Reflect.compare = function(a,b) {
	return a == b?0:a > b?1:-1;
}
Reflect.compareMethods = function(f1,f2) {
	if(f1 == f2) return true;
	if(!Reflect.isFunction(f1) || !Reflect.isFunction(f2)) return false;
	return f1.scope == f2.scope && f1.method == f2.method && f1.method != null;
}
Reflect.isObject = function(v) {
	if(v == null) return false;
	var t = typeof(v);
	return t == "string" || t == "object" && !v.__enum__ || t == "function" && (v.__name__ || v.__ename__);
}
Reflect.deleteField = function(o,f) {
	if(!Reflect.hasField(o,f)) return false;
	delete(o[f]);
	return true;
}
Reflect.copy = function(o) {
	var o2 = { };
	var _g = 0, _g1 = Reflect.fields(o);
	while(_g < _g1.length) {
		var f = _g1[_g];
		++_g;
		o2[f] = Reflect.field(o,f);
	}
	return o2;
}
Reflect.makeVarArgs = function(f) {
	return function() {
		var a = Array.prototype.slice.call(arguments);
		return f(a);
	};
}
var Std = $hxClasses["Std"] = function() { }
Std.__name__ = ["Std"];
Std["is"] = function(v,t) {
	return js.Boot.__instanceof(v,t);
}
Std.string = function(s) {
	return js.Boot.__string_rec(s,"");
}
Std["int"] = function(x) {
	return x | 0;
}
Std.parseInt = function(x) {
	var v = parseInt(x,10);
	if(v == 0 && (HxOverrides.cca(x,1) == 120 || HxOverrides.cca(x,1) == 88)) v = parseInt(x);
	if(isNaN(v)) return null;
	return v;
}
Std.parseFloat = function(x) {
	return parseFloat(x);
}
Std.random = function(x) {
	return Math.floor(Math.random() * x);
}
var StringBuf = $hxClasses["StringBuf"] = function() {
	this.b = "";
};
StringBuf.__name__ = ["StringBuf"];
StringBuf.prototype = {
	toString: function() {
		return this.b;
	}
	,addSub: function(s,pos,len) {
		this.b += HxOverrides.substr(s,pos,len);
	}
	,addChar: function(c) {
		this.b += String.fromCharCode(c);
	}
	,add: function(x) {
		this.b += Std.string(x);
	}
	,b: null
	,__class__: StringBuf
}
var StringTools = $hxClasses["StringTools"] = function() { }
StringTools.__name__ = ["StringTools"];
StringTools.urlEncode = function(s) {
	return encodeURIComponent(s);
}
StringTools.urlDecode = function(s) {
	return decodeURIComponent(s.split("+").join(" "));
}
StringTools.htmlEscape = function(s) {
	return s.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;");
}
StringTools.htmlUnescape = function(s) {
	return s.split("&gt;").join(">").split("&lt;").join("<").split("&amp;").join("&");
}
StringTools.startsWith = function(s,start) {
	return s.length >= start.length && HxOverrides.substr(s,0,start.length) == start;
}
StringTools.endsWith = function(s,end) {
	var elen = end.length;
	var slen = s.length;
	return slen >= elen && HxOverrides.substr(s,slen - elen,elen) == end;
}
StringTools.isSpace = function(s,pos) {
	var c = HxOverrides.cca(s,pos);
	return c >= 9 && c <= 13 || c == 32;
}
StringTools.ltrim = function(s) {
	var l = s.length;
	var r = 0;
	while(r < l && StringTools.isSpace(s,r)) r++;
	if(r > 0) return HxOverrides.substr(s,r,l - r); else return s;
}
StringTools.rtrim = function(s) {
	var l = s.length;
	var r = 0;
	while(r < l && StringTools.isSpace(s,l - r - 1)) r++;
	if(r > 0) return HxOverrides.substr(s,0,l - r); else return s;
}
StringTools.trim = function(s) {
	return StringTools.ltrim(StringTools.rtrim(s));
}
StringTools.rpad = function(s,c,l) {
	var sl = s.length;
	var cl = c.length;
	while(sl < l) if(l - sl < cl) {
		s += HxOverrides.substr(c,0,l - sl);
		sl = l;
	} else {
		s += c;
		sl += cl;
	}
	return s;
}
StringTools.lpad = function(s,c,l) {
	var ns = "";
	var sl = s.length;
	if(sl >= l) return s;
	var cl = c.length;
	while(sl < l) if(l - sl < cl) {
		ns += HxOverrides.substr(c,0,l - sl);
		sl = l;
	} else {
		ns += c;
		sl += cl;
	}
	return ns + s;
}
StringTools.replace = function(s,sub,by) {
	return s.split(sub).join(by);
}
StringTools.hex = function(n,digits) {
	var s = "";
	var hexChars = "0123456789ABCDEF";
	do {
		s = hexChars.charAt(n & 15) + s;
		n >>>= 4;
	} while(n > 0);
	if(digits != null) while(s.length < digits) s = "0" + s;
	return s;
}
StringTools.fastCodeAt = function(s,index) {
	return s.charCodeAt(index);
}
StringTools.isEOF = function(c) {
	return c != c;
}
var ValueType = $hxClasses["ValueType"] = { __ename__ : ["ValueType"], __constructs__ : ["TNull","TInt","TFloat","TBool","TObject","TFunction","TClass","TEnum","TUnknown"] }
ValueType.TNull = ["TNull",0];
ValueType.TNull.toString = $estr;
ValueType.TNull.__enum__ = ValueType;
ValueType.TInt = ["TInt",1];
ValueType.TInt.toString = $estr;
ValueType.TInt.__enum__ = ValueType;
ValueType.TFloat = ["TFloat",2];
ValueType.TFloat.toString = $estr;
ValueType.TFloat.__enum__ = ValueType;
ValueType.TBool = ["TBool",3];
ValueType.TBool.toString = $estr;
ValueType.TBool.__enum__ = ValueType;
ValueType.TObject = ["TObject",4];
ValueType.TObject.toString = $estr;
ValueType.TObject.__enum__ = ValueType;
ValueType.TFunction = ["TFunction",5];
ValueType.TFunction.toString = $estr;
ValueType.TFunction.__enum__ = ValueType;
ValueType.TClass = function(c) { var $x = ["TClass",6,c]; $x.__enum__ = ValueType; $x.toString = $estr; return $x; }
ValueType.TEnum = function(e) { var $x = ["TEnum",7,e]; $x.__enum__ = ValueType; $x.toString = $estr; return $x; }
ValueType.TUnknown = ["TUnknown",8];
ValueType.TUnknown.toString = $estr;
ValueType.TUnknown.__enum__ = ValueType;
var Type = $hxClasses["Type"] = function() { }
Type.__name__ = ["Type"];
Type.getClass = function(o) {
	if(o == null) return null;
	return o.__class__;
}
Type.getEnum = function(o) {
	if(o == null) return null;
	return o.__enum__;
}
Type.getSuperClass = function(c) {
	return c.__super__;
}
Type.getClassName = function(c) {
	var a = c.__name__;
	return a.join(".");
}
Type.getEnumName = function(e) {
	var a = e.__ename__;
	return a.join(".");
}
Type.resolveClass = function(name) {
	var cl = $hxClasses[name];
	if(cl == null || !cl.__name__) return null;
	return cl;
}
Type.resolveEnum = function(name) {
	var e = $hxClasses[name];
	if(e == null || !e.__ename__) return null;
	return e;
}
Type.createInstance = function(cl,args) {
	switch(args.length) {
	case 0:
		return new cl();
	case 1:
		return new cl(args[0]);
	case 2:
		return new cl(args[0],args[1]);
	case 3:
		return new cl(args[0],args[1],args[2]);
	case 4:
		return new cl(args[0],args[1],args[2],args[3]);
	case 5:
		return new cl(args[0],args[1],args[2],args[3],args[4]);
	case 6:
		return new cl(args[0],args[1],args[2],args[3],args[4],args[5]);
	case 7:
		return new cl(args[0],args[1],args[2],args[3],args[4],args[5],args[6]);
	case 8:
		return new cl(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7]);
	default:
		throw "Too many arguments";
	}
	return null;
}
Type.createEmptyInstance = function(cl) {
	function empty() {}; empty.prototype = cl.prototype;
	return new empty();
}
Type.createEnum = function(e,constr,params) {
	var f = Reflect.field(e,constr);
	if(f == null) throw "No such constructor " + constr;
	if(Reflect.isFunction(f)) {
		if(params == null) throw "Constructor " + constr + " need parameters";
		return f.apply(e,params);
	}
	if(params != null && params.length != 0) throw "Constructor " + constr + " does not need parameters";
	return f;
}
Type.createEnumIndex = function(e,index,params) {
	var c = e.__constructs__[index];
	if(c == null) throw index + " is not a valid enum constructor index";
	return Type.createEnum(e,c,params);
}
Type.getInstanceFields = function(c) {
	var a = [];
	for(var i in c.prototype) a.push(i);
	HxOverrides.remove(a,"__class__");
	HxOverrides.remove(a,"__properties__");
	return a;
}
Type.getClassFields = function(c) {
	var a = Reflect.fields(c);
	HxOverrides.remove(a,"__name__");
	HxOverrides.remove(a,"__interfaces__");
	HxOverrides.remove(a,"__properties__");
	HxOverrides.remove(a,"__super__");
	HxOverrides.remove(a,"prototype");
	return a;
}
Type.getEnumConstructs = function(e) {
	var a = e.__constructs__;
	return a.slice();
}
Type["typeof"] = function(v) {
	switch(typeof(v)) {
	case "boolean":
		return ValueType.TBool;
	case "string":
		return ValueType.TClass(String);
	case "number":
		if(Math.ceil(v) == v % 2147483648.0) return ValueType.TInt;
		return ValueType.TFloat;
	case "object":
		if(v == null) return ValueType.TNull;
		var e = v.__enum__;
		if(e != null) return ValueType.TEnum(e);
		var c = v.__class__;
		if(c != null) return ValueType.TClass(c);
		return ValueType.TObject;
	case "function":
		if(v.__name__ || v.__ename__) return ValueType.TObject;
		return ValueType.TFunction;
	case "undefined":
		return ValueType.TNull;
	default:
		return ValueType.TUnknown;
	}
}
Type.enumEq = function(a,b) {
	if(a == b) return true;
	try {
		if(a[0] != b[0]) return false;
		var _g1 = 2, _g = a.length;
		while(_g1 < _g) {
			var i = _g1++;
			if(!Type.enumEq(a[i],b[i])) return false;
		}
		var e = a.__enum__;
		if(e != b.__enum__ || e == null) return false;
	} catch( e ) {
		return false;
	}
	return true;
}
Type.enumConstructor = function(e) {
	return e[0];
}
Type.enumParameters = function(e) {
	return e.slice(2);
}
Type.enumIndex = function(e) {
	return e[1];
}
Type.allEnums = function(e) {
	var all = [];
	var cst = e.__constructs__;
	var _g = 0;
	while(_g < cst.length) {
		var c = cst[_g];
		++_g;
		var v = Reflect.field(e,c);
		if(!Reflect.isFunction(v)) all.push(v);
	}
	return all;
}
var Xml = $hxClasses["Xml"] = function() {
};
Xml.__name__ = ["Xml"];
Xml.Element = null;
Xml.PCData = null;
Xml.CData = null;
Xml.Comment = null;
Xml.DocType = null;
Xml.Prolog = null;
Xml.Document = null;
Xml.parse = function(str) {
	return haxe.xml.Parser.parse(str);
}
Xml.createElement = function(name) {
	var r = new Xml();
	r.nodeType = Xml.Element;
	r._children = new Array();
	r._attributes = new Hash();
	r.setNodeName(name);
	return r;
}
Xml.createPCData = function(data) {
	var r = new Xml();
	r.nodeType = Xml.PCData;
	r.setNodeValue(data);
	return r;
}
Xml.createCData = function(data) {
	var r = new Xml();
	r.nodeType = Xml.CData;
	r.setNodeValue(data);
	return r;
}
Xml.createComment = function(data) {
	var r = new Xml();
	r.nodeType = Xml.Comment;
	r.setNodeValue(data);
	return r;
}
Xml.createDocType = function(data) {
	var r = new Xml();
	r.nodeType = Xml.DocType;
	r.setNodeValue(data);
	return r;
}
Xml.createProlog = function(data) {
	var r = new Xml();
	r.nodeType = Xml.Prolog;
	r.setNodeValue(data);
	return r;
}
Xml.createDocument = function() {
	var r = new Xml();
	r.nodeType = Xml.Document;
	r._children = new Array();
	return r;
}
Xml.prototype = {
	toString: function() {
		if(this.nodeType == Xml.PCData) return this._nodeValue;
		if(this.nodeType == Xml.CData) return "<![CDATA[" + this._nodeValue + "]]>";
		if(this.nodeType == Xml.Comment) return "<!--" + this._nodeValue + "-->";
		if(this.nodeType == Xml.DocType) return "<!DOCTYPE " + this._nodeValue + ">";
		if(this.nodeType == Xml.Prolog) return "<?" + this._nodeValue + "?>";
		var s = new StringBuf();
		if(this.nodeType == Xml.Element) {
			s.b += Std.string("<");
			s.b += Std.string(this._nodeName);
			var $it0 = this._attributes.keys();
			while( $it0.hasNext() ) {
				var k = $it0.next();
				s.b += Std.string(" ");
				s.b += Std.string(k);
				s.b += Std.string("=\"");
				s.b += Std.string(this._attributes.get(k));
				s.b += Std.string("\"");
			}
			if(this._children.length == 0) {
				s.b += Std.string("/>");
				return s.b;
			}
			s.b += Std.string(">");
		}
		var $it1 = this.iterator();
		while( $it1.hasNext() ) {
			var x = $it1.next();
			s.b += Std.string(x.toString());
		}
		if(this.nodeType == Xml.Element) {
			s.b += Std.string("</");
			s.b += Std.string(this._nodeName);
			s.b += Std.string(">");
		}
		return s.b;
	}
	,insertChild: function(x,pos) {
		if(this._children == null) throw "bad nodetype";
		if(x._parent != null) HxOverrides.remove(x._parent._children,x);
		x._parent = this;
		this._children.splice(pos,0,x);
	}
	,removeChild: function(x) {
		if(this._children == null) throw "bad nodetype";
		var b = HxOverrides.remove(this._children,x);
		if(b) x._parent = null;
		return b;
	}
	,addChild: function(x) {
		if(this._children == null) throw "bad nodetype";
		if(x._parent != null) HxOverrides.remove(x._parent._children,x);
		x._parent = this;
		this._children.push(x);
	}
	,firstElement: function() {
		if(this._children == null) throw "bad nodetype";
		var cur = 0;
		var l = this._children.length;
		while(cur < l) {
			var n = this._children[cur];
			if(n.nodeType == Xml.Element) return n;
			cur++;
		}
		return null;
	}
	,firstChild: function() {
		if(this._children == null) throw "bad nodetype";
		return this._children[0];
	}
	,elementsNamed: function(name) {
		if(this._children == null) throw "bad nodetype";
		return { cur : 0, x : this._children, hasNext : function() {
			var k = this.cur;
			var l = this.x.length;
			while(k < l) {
				var n = this.x[k];
				if(n.nodeType == Xml.Element && n._nodeName == name) break;
				k++;
			}
			this.cur = k;
			return k < l;
		}, next : function() {
			var k = this.cur;
			var l = this.x.length;
			while(k < l) {
				var n = this.x[k];
				k++;
				if(n.nodeType == Xml.Element && n._nodeName == name) {
					this.cur = k;
					return n;
				}
			}
			return null;
		}};
	}
	,elements: function() {
		if(this._children == null) throw "bad nodetype";
		return { cur : 0, x : this._children, hasNext : function() {
			var k = this.cur;
			var l = this.x.length;
			while(k < l) {
				if(this.x[k].nodeType == Xml.Element) break;
				k += 1;
			}
			this.cur = k;
			return k < l;
		}, next : function() {
			var k = this.cur;
			var l = this.x.length;
			while(k < l) {
				var n = this.x[k];
				k += 1;
				if(n.nodeType == Xml.Element) {
					this.cur = k;
					return n;
				}
			}
			return null;
		}};
	}
	,iterator: function() {
		if(this._children == null) throw "bad nodetype";
		return { cur : 0, x : this._children, hasNext : function() {
			return this.cur < this.x.length;
		}, next : function() {
			return this.x[this.cur++];
		}};
	}
	,attributes: function() {
		if(this.nodeType != Xml.Element) throw "bad nodeType";
		return this._attributes.keys();
	}
	,exists: function(att) {
		if(this.nodeType != Xml.Element) throw "bad nodeType";
		return this._attributes.exists(att);
	}
	,remove: function(att) {
		if(this.nodeType != Xml.Element) throw "bad nodeType";
		this._attributes.remove(att);
	}
	,set: function(att,value) {
		if(this.nodeType != Xml.Element) throw "bad nodeType";
		this._attributes.set(att,value);
	}
	,get: function(att) {
		if(this.nodeType != Xml.Element) throw "bad nodeType";
		return this._attributes.get(att);
	}
	,getParent: function() {
		return this._parent;
	}
	,setNodeValue: function(v) {
		if(this.nodeType == Xml.Element || this.nodeType == Xml.Document) throw "bad nodeType";
		return this._nodeValue = v;
	}
	,getNodeValue: function() {
		if(this.nodeType == Xml.Element || this.nodeType == Xml.Document) throw "bad nodeType";
		return this._nodeValue;
	}
	,setNodeName: function(n) {
		if(this.nodeType != Xml.Element) throw "bad nodeType";
		return this._nodeName = n;
	}
	,getNodeName: function() {
		if(this.nodeType != Xml.Element) throw "bad nodeType";
		return this._nodeName;
	}
	,_parent: null
	,_children: null
	,_attributes: null
	,_nodeValue: null
	,_nodeName: null
	,parent: null
	,nodeValue: null
	,nodeName: null
	,nodeType: null
	,__class__: Xml
	,__properties__: {set_nodeName:"setNodeName",get_nodeName:"getNodeName",set_nodeValue:"setNodeValue",get_nodeValue:"getNodeValue",get_parent:"getParent"}
}
var com = com || {}
if(!com.wiris) com.wiris = {}
if(!com.wiris.calc) com.wiris.calc = {}
com.wiris.calc.CalcModel = $hxClasses["com.wiris.calc.CalcModel"] = function() { }
com.wiris.calc.CalcModel.__name__ = ["com","wiris","calc","CalcModel"];
com.wiris.calc.CalcModel.prototype = {
	getFunctionNames: null
	,getVariableNames: null
	,addCalcModelListener: null
	,reset: null
	,getXml: null
	,setXml: null
	,actionWithParams: null
	,__class__: com.wiris.calc.CalcModel
}
com.wiris.calc.CalcModelListener = $hxClasses["com.wiris.calc.CalcModelListener"] = function() { }
com.wiris.calc.CalcModelListener.__name__ = ["com","wiris","calc","CalcModelListener"];
com.wiris.calc.CalcModelListener.prototype = {
	calcModelRebuilt: null
	,removeCookie: null
	,saveCookie: null
	,interfaceLanguageChanged: null
	,contentChanged: null
	,authorizationRequested: null
	,plotterDownloadRequested: null
	,downloadRequested: null
	,closeDialogRequested: null
	,openToolkitDialogRequested: null
	,openDialogRequested: null
	,openLinkRequested: null
	,uploadFileRequested: null
	,removeFileRequested: null
	,openFileRequested: null
	,saveFileRequested: null
	,newFileRequested: null
	,__class__: com.wiris.calc.CalcModelListener
}
if(!com.wiris.calc.dialog) com.wiris.calc.dialog = {}
com.wiris.calc.dialog.DialogModel = $hxClasses["com.wiris.calc.dialog.DialogModel"] = function() { }
com.wiris.calc.dialog.DialogModel.__name__ = ["com","wiris","calc","dialog","DialogModel"];
if(!com.wiris.common) com.wiris.common = {}
com.wiris.common.WInteger = $hxClasses["com.wiris.common.WInteger"] = function() { }
com.wiris.common.WInteger.__name__ = ["com","wiris","common","WInteger"];
com.wiris.common.WInteger.max = function(x,y) {
	if(x > y) return x;
	return y;
}
com.wiris.common.WInteger.min = function(x,y) {
	if(x < y) return x;
	return y;
}
com.wiris.common.WInteger.toHex = function(x,digits) {
	var s = "";
	while(x != 0 && digits > 0) {
		digits--;
		var d = x & 15;
		s = com.wiris.system.Utf8.uchr(d + (d >= 10?55:48)) + s;
		x = x >> 4;
	}
	while(digits-- > 0) s = "0" + s;
	return s;
}
com.wiris.common.WInteger.parseHex = function(str) {
	return Std.parseInt("0x" + str);
}
com.wiris.common.WInteger.isInteger = function(str) {
	str = StringTools.trim(str);
	var i = 0;
	var n = str.length;
	if(StringTools.startsWith(str,"-")) i++;
	if(StringTools.startsWith(str,"+")) i++;
	var c;
	while(i < n) {
		c = HxOverrides.cca(str,i);
		if(c < 48 || c > 57) return false;
		i++;
	}
	return true;
}
if(!com.wiris.editor) com.wiris.editor = {}
com.wiris.editor.EditorListener = $hxClasses["com.wiris.editor.EditorListener"] = function() { }
com.wiris.editor.EditorListener.__name__ = ["com","wiris","editor","EditorListener"];
com.wiris.editor.EditorListener.prototype = {
	transformationReceived: null
	,styleChanged: null
	,contentChanged: null
	,clipboardChanged: null
	,caretPositionChanged: null
	,__class__: com.wiris.editor.EditorListener
}
if(!com.wiris.graph) com.wiris.graph = {}
com.wiris.graph.GraphInterface = $hxClasses["com.wiris.graph.GraphInterface"] = function() { }
com.wiris.graph.GraphInterface.__name__ = ["com","wiris","graph","GraphInterface"];
com.wiris.graph.GraphInterface.prototype = {
	getGraphModel: null
	,close: null
	,__class__: com.wiris.graph.GraphInterface
}
com.wiris.graph.GraphModel = $hxClasses["com.wiris.graph.GraphModel"] = function() { }
com.wiris.graph.GraphModel.__name__ = ["com","wiris","graph","GraphModel"];
com.wiris.graph.GraphModel.prototype = {
	setDisplaySetting: null
	,changeMode: null
	,setHidingActionsEnabled: null
	,activateMainAction: null
	,exitViewOnly: null
	,enterViewOnly: null
	,setAwakeMode: null
	,insertInto: null
	,getGraphComponent: null
	,getDisplay: null
	,updateGraphToolbar: null
	,__class__: com.wiris.graph.GraphModel
}
if(!com.wiris.hand) com.wiris.hand = {}
com.wiris.hand.HandInterface = $hxClasses["com.wiris.hand.HandInterface"] = function() { }
com.wiris.hand.HandInterface.__name__ = ["com","wiris","hand","HandInterface"];
com.wiris.hand.HandInterface.prototype = {
	setParams: null
	,setStrokes: null
	,getStrokes: null
	,setMathML: null
	,getMathMLWithStrokes: null
	,getMathML: null
	,addHandListener: null
	,insertInto: null
	,__class__: com.wiris.hand.HandInterface
}
com.wiris.hand.HandListener = $hxClasses["com.wiris.hand.HandListener"] = function() { }
com.wiris.hand.HandListener.__name__ = ["com","wiris","hand","HandListener"];
com.wiris.hand.HandListener.prototype = {
	strokesChanged: null
	,recognitionError: null
	,contentChanged: null
	,__class__: com.wiris.hand.HandListener
}
if(!com.wiris.kernel) com.wiris.kernel = {}
if(!com.wiris.kernel.plotter) com.wiris.kernel.plotter = {}
com.wiris.kernel.plotter.QuizzesCorrectAnswerPlotter = $hxClasses["com.wiris.kernel.plotter.QuizzesCorrectAnswerPlotter"] = function() { }
com.wiris.kernel.plotter.QuizzesCorrectAnswerPlotter.__name__ = ["com","wiris","kernel","plotter","QuizzesCorrectAnswerPlotter"];
com.wiris.kernel.plotter.QuizzesCorrectAnswerPlotter.prototype = {
	getElementsThatCanBeGraded: null
	,getElementsToGrade: null
	,__class__: com.wiris.kernel.plotter.QuizzesCorrectAnswerPlotter
}
com.wiris.kernel.plotter.QuizzesCorrectAnswerPlotterParameters = $hxClasses["com.wiris.kernel.plotter.QuizzesCorrectAnswerPlotterParameters"] = function() {
	this.isSketch = false;
	this.includeImages = false;
	this.includeStatisticsCharts = false;
	this.includePartsOfElements = false;
	this.includeLabelsOfElements = false;
};
com.wiris.kernel.plotter.QuizzesCorrectAnswerPlotterParameters.__name__ = ["com","wiris","kernel","plotter","QuizzesCorrectAnswerPlotterParameters"];
com.wiris.kernel.plotter.QuizzesCorrectAnswerPlotterParameters.prototype = {
	isSketch: null
	,includeImages: null
	,includeStatisticsCharts: null
	,includePartsOfElements: null
	,includeLabelsOfElements: null
	,__class__: com.wiris.kernel.plotter.QuizzesCorrectAnswerPlotterParameters
}
if(!com.wiris.util) com.wiris.util = {}
if(!com.wiris.util.graphics) com.wiris.util.graphics = {}
com.wiris.util.graphics.Display = $hxClasses["com.wiris.util.graphics.Display"] = function() { }
com.wiris.util.graphics.Display.__name__ = ["com","wiris","util","graphics","Display"];
com.wiris.util.graphics.Display.prototype = {
	getInitialContent: null
	,getAllHiddenElements: null
	,setInitialContent: null
	,dispose: null
	,loadGeometryFile: null
	,getGeometryFile: null
	,setCursor: null
	,unfreeze: null
	,freeze: null
	,canUndo: null
	,canRedo: null
	,setId: null
	,getId: null
	,redoAction: null
	,undoAction: null
	,removeDisplayListeners: null
	,addDisplayDrawingListener: null
	,addDisplayListener: null
	,cancelAction: null
	,startAction: null
	,useCurrentActionParameters: null
	,setActionParameters: null
	,setActionParameter: null
	,pointerLeave: null
	,pointerEnter: null
	,pointerDrag: null
	,strokesDrawn: null
	,pointerMove: null
	,pointerUp: null
	,pointerDown: null
	,invalidate: null
	,animateFrame: null
	,update: null
	,isEmpty: null
	,setOption: null
	,setOptionDictionary: null
	,getOptionDictionary: null
	,__class__: com.wiris.util.graphics.Display
}
com.wiris.kernel.plotter.QuizzesValidationPlotter = $hxClasses["com.wiris.kernel.plotter.QuizzesValidationPlotter"] = function() { }
com.wiris.kernel.plotter.QuizzesValidationPlotter.__name__ = ["com","wiris","kernel","plotter","QuizzesValidationPlotter"];
com.wiris.kernel.plotter.QuizzesValidationPlotter.__interfaces__ = [com.wiris.util.graphics.Display];
com.wiris.kernel.plotter.QuizzesValidationPlotter.prototype = {
	unfocusElement: null
	,focusElement: null
	,setElementTolerances: null
	,setElementTolerance: null
	,getElementSummary: null
	,__class__: com.wiris.kernel.plotter.QuizzesValidationPlotter
}
if(!com.wiris.quizzes) com.wiris.quizzes = {}
if(!com.wiris.quizzes.api) com.wiris.quizzes.api = {}
if(!com.wiris.quizzes.api.ui) com.wiris.quizzes.api.ui = {}
com.wiris.quizzes.api.ui.MathViewer = $hxClasses["com.wiris.quizzes.api.ui.MathViewer"] = function() { }
com.wiris.quizzes.api.ui.MathViewer.__name__ = ["com","wiris","quizzes","api","ui","MathViewer"];
com.wiris.quizzes.api.ui.MathViewer.prototype = {
	filterConstructions: null
	,filterMathML: null
	,filter: null
	,graph: null
	,thumbnail: null
	,plot: null
	,render: null
	,renderCorrectAnswer: null
	,__class__: com.wiris.quizzes.api.ui.MathViewer
}
com.wiris.quizzes.HxMathViewer = $hxClasses["com.wiris.quizzes.HxMathViewer"] = function() {
	this.zoom = 1.0;
	this.centerBaseline = true;
	this.renderOffline = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_STATIC) == "true";
};
com.wiris.quizzes.HxMathViewer.__name__ = ["com","wiris","quizzes","HxMathViewer"];
com.wiris.quizzes.HxMathViewer.__interfaces__ = [com.wiris.quizzes.api.ui.MathViewer];
com.wiris.quizzes.HxMathViewer.prototype = {
	setMathMLAltText: function(img,mathml) {
		var c = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration();
		var url;
		if("true" == c.get(com.wiris.quizzes.api.ConfigurationKeys.CROSSORIGINCALLS_ENABLED)) url = c.get(com.wiris.quizzes.api.ConfigurationKeys.EDITOR_URL) + "/mathml2accessible?"; else url = c.get(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL) + "?service=mathml2accessible";
		url += "&stats-app=quizzes";
		var http = new haxe.Http(url);
		http.setParameter("mml",mathml);
		http.async = true;
		http.onData = function(data) {
			img.alt = data;
		};
		http.onError = function(error) {
			img.alt = error;
		};
		http.request(true);
	}
	,renderImage: function(mathml) {
		var img = js.Lib.document.createElement("img");
		var c = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration();
		var editorUrl = c.get(com.wiris.quizzes.api.ConfigurationKeys.EDITOR_URL);
		var proxyUrl = c.get(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL);
		var crossOriginEnabled = "true" == c.get(com.wiris.quizzes.api.ConfigurationKeys.CROSSORIGINCALLS_ENABLED);
		img.src = com.wiris.quizzes.impl.HTMLTools.mathMLImgSrc(mathml,this.centerBaseline,this.zoom,editorUrl,proxyUrl,crossOriginEnabled);
		img.align = "middle";
		img.className = "wirismathml";
		this.setMathMLAltText(img,mathml);
		return img;
	}
	,setCenterBaseline: function(centerBaseline) {
		this.centerBaseline = centerBaseline;
	}
	,setZoom: function(zoom) {
		this.zoom = zoom;
	}
	,graphImpl: function(construction,initialContent,container) {
		var _g = this;
		if(this.graphJSLoaded() && container.parentNode != null) {
			var graph = window.com.wiris.js.JsGraph.newInstance({ 
				viewOnly: true,
				allowAnimations: true
			});
			if(initialContent != null) graph.getGraphModel().getDisplay().setInitialContent(initialContent,true);
			graph.setContent(construction);
			graph.insertInto(container);
		} else haxe.Timer.delay(function() {
			_g.graphImpl(construction,initialContent,container);
		},100);
	}
	,graph: function(construction,initialContent) {
		if(!this.graphJSLoaded()) this.loadGraphJS();
		var div = js.Lib.document.createElement("div");
		this.graphImpl(construction,initialContent,div);
		return div;
	}
	,plotJS: function(construction,container,width,height) {
		var _g = this;
		if(this.graphJSLoaded() && container.offsetParent != null) {
			if(this.graphViewer == null) this.graphViewer = window.com.wiris.js.JsGraphViewer.newInstance(null);
			this.graphViewer.geometryFile2Canvas(construction,container,width,height);
		} else haxe.Timer.delay(function() {
			_g.plotJS(construction,container,width,height);
		},100);
	}
	,plotConstruction: function(construction,width,height) {
		var img = js.Lib.document.createElement("img");
		img.src = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getResourceUrl("plotter_loading.png");
		img.align = "middle";
		img.className = "wirisgraphic";
		img.width = width;
		img.height = height;
		var c = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration();
		var url;
		if("true" == c.get(com.wiris.quizzes.api.ConfigurationKeys.CROSSORIGINCALLS_ENABLED)) url = c.get(com.wiris.quizzes.api.ConfigurationKeys.GRAPH_URL) + "/plot.png?"; else url = c.get(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL) + "?service=plot.png.base64";
		url += "&stats-app=quizzes";
		var http = new haxe.Http(url);
		http.setHeader("Accept","text/plain");
		http.setParameter("gf",construction);
		http.setParameter("width",width + "");
		http.setParameter("height",height + "");
		http.async = true;
		http.onData = function(data) {
			img.src = "data:image/png;base64, " + data;
		};
		http.request(true);
		return img;
	}
	,plotImpl: function(construction,width,height) {
		var container;
		if(this.renderOffline) {
			if(!this.graphJSLoaded()) this.loadGraphJS();
			container = js.Lib.document.createElement("div");
			this.plotJS(construction,container,width,height);
		} else container = this.plotConstruction(construction,width,height);
		return container;
	}
	,thumbnail: function(construction) {
		return this.plotImpl(construction,com.wiris.quizzes.HxMathViewer.THUMBNAIL_WIDTH,com.wiris.quizzes.HxMathViewer.THUMBNAIL_HEIGHT);
	}
	,getDimensionOrDefault: function(arg,width) {
		if(arg != null) {
			var parsed = Std.parseInt(arg);
			if(parsed != null && parsed > 0) return parsed;
		}
		return width?com.wiris.quizzes.HxMathViewer.PLOT_WIDTH:com.wiris.quizzes.HxMathViewer.PLOT_HEIGHT;
	}
	,plot: function(construction,widthArg,heightArg) {
		var width = this.getDimensionOrDefault(widthArg,true);
		var height = this.getDimensionOrDefault(heightArg,false);
		return this.plotImpl(construction,width,height);
	}
	,loadViewer: function() {
		if(this.isOffline()) {
			var url = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.EDITOR_URL);
			this.viewer = new window.com.wiris.js.JsViewerMain(url);
		} else this.viewer = js.Lib.window.com.wiris.js.JsViewerMain.newInstance();
		this.viewer.insertCSS(null,null);
	}
	,isOffline: function() {
		var offline = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.SERVICE_OFFLINE);
		return offline.toLowerCase() == "true";
	}
	,loadGraphJS: function() {
		var win = js.Lib.window;
		if(win.com_wiris_quizzes_isGraphScript == null) {
			win.com_wiris_quizzes_isGraphScript = true;
			var d = js.Lib.document;
			var script = d.createElement("script");
			script.setAttribute("type","text/javascript");
			var url = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.GRAPH_URL) + "/graph.js";
			script.setAttribute("src",url);
			d.getElementsByTagName("head")[0].appendChild(script);
		}
	}
	,loadViewerJS: function() {
		var win = js.Lib.window;
		if(win.com_wiris_quizzes_isViewerScript == null) {
			win.com_wiris_quizzes_isViewerScript = true;
			var d = js.Lib.document;
			var script = d.createElement("script");
			script.setAttribute("type","text/javascript");
			var url;
			if(this.isOffline()) url = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.EDITOR_URL) + "/viewer_offline.js"; else url = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.EDITOR_URL) + "/viewer";
			script.setAttribute("src",url);
			d.getElementsByTagName("head")[0].appendChild(script);
		}
	}
	,graphJSLoaded: function() {
		var win = js.Lib.window;
		return win.com != null && win.com.wiris != null && win.com.wiris.js != null && win.com.wiris.js.JsGraphViewer != null;
	}
	,viewerJSLoaded: function() {
		var win = js.Lib.window;
		return win.com != null && win.com.wiris != null && win.com.wiris.js != null && win.com.wiris.js.JsViewerMain != null;
	}
	,exposeViewer: function() {
		var _g = this;
		if(!this.viewerJSLoaded()) this.loadViewerJS();
		var win = js.Lib.window;
		if(this.viewerJSLoaded()) {
			var url = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.EDITOR_URL);
			if (win.viewer == null) win.viewer = new window.com.wiris.js.JsViewerMain(url);
		} else haxe.Timer.delay(function() {
			_g.exposeViewer();
		},100);
	}
	,renderJS: function(mathml,container) {
		var _g = this;
		if(this.viewerJSLoaded() && container.offsetParent != null) {
			if(this.viewer == null) this.loadViewer();
			this.viewer.paintFormulaOnContainer(mathml,container,null);
		} else haxe.Timer.delay(function() {
			_g.renderJS(mathml,container);
		},100);
	}
	,unescapeIfNecessary: function(s) {
		if(s != null && s.indexOf("<") == -1 && s.indexOf(">") == -1 && s.indexOf("\"") == -1 && (s.indexOf("&lt;") != -1 || s.indexOf("&gt;") != -1 || s.indexOf("&quot;") != -1)) return com.wiris.util.xml.WXmlUtils.htmlUnescape(s);
		return s;
	}
	,filterConstructions: function(root) {
		var plotters = com.wiris.quizzes.JsDomUtils.getElementsByClassName("wirisconstruction",null,root);
		var n = plotters.length - 1;
		while(n >= 0) {
			var imgTag = plotters[n];
			var construction = imgTag.getAttribute("data-wirisconstruction");
			var initialContent = imgTag.getAttribute("data-wirisinitialcontent");
			var width = imgTag.getAttribute("data-wiriswidth");
			var height = imgTag.getAttribute("data-wirisheight");
			var canvas;
			if(imgTag.className.indexOf("wirisgraphanimate") > -1) canvas = this.graph(this.unescapeIfNecessary(construction),this.unescapeIfNecessary(initialContent)); else canvas = this.plot(this.unescapeIfNecessary(construction),width,height);
			imgTag.parentNode.replaceChild(canvas,imgTag);
			n--;
		}
	}
	,getOuterHTMLIE11: function(elem) {
		var a = elem.ownerDocument.createElement("div");
		a.appendChild(elem.cloneNode(true));
		return a.innerHTML;
	}
	,filterMathML: function(root) {
		var maths = root.getElementsByTagName("math");
		var n = maths.length - 1;
		while(n >= 0) {
			var elem = maths[n];
			var mathml = elem.outerHTML || this.getOuterHTMLIE11(elem);
			var render = this.render(mathml);
			elem.parentNode.replaceChild(render,elem);
			n--;
		}
	}
	,filter: function(root) {
		this.filterMathML(root);
		this.filterConstructions(root);
	}
	,render: function(mathml) {
		var container;
		if(this.renderOffline) {
			container = js.Lib.document.createElement("span");
			if(!this.viewerJSLoaded()) this.loadViewerJS();
			this.renderJS(mathml,container);
		} else container = this.renderImage(mathml);
		return container;
	}
	,renderCorrectAnswer: function(instance,slot,authorAnswer) {
		if(slot.getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC) return this.graph(authorAnswer.getValue(),slot.getInitialContent()); else {
			var value = authorAnswer.getValue();
			var valueExpanded = instance.expandVariablesMathML(value);
			return this.render(valueExpanded);
		}
	}
	,graphViewer: null
	,viewer: null
	,centerBaseline: null
	,renderOffline: null
	,zoom: null
	,__class__: com.wiris.quizzes.HxMathViewer
}
com.wiris.quizzes.JsDomUtils = $hxClasses["com.wiris.quizzes.JsDomUtils"] = function() { }
com.wiris.quizzes.JsDomUtils.__name__ = ["com","wiris","quizzes","JsDomUtils"];
com.wiris.quizzes.JsDomUtils.getElementsByClassName = function(className,tagName,element) {
	if(element == null) element = js.Lib.document;
	if(tagName == null) tagName = "*";
	try {
		if(typeof(element.getElementsByClassName) != 'undefined') return element.getElementsByClassName(className,tagName);
	} catch( e ) {
	}
	var elements = element.getElementsByTagName(tagName);
	var selected = new Array();
	var i;
	var n = elements.length;
	var _g = 0;
	while(_g < n) {
		var i1 = _g++;
		var elem = elements[i1];
		if(com.wiris.quizzes.JsDomUtils.hasClass(elem,className)) selected.push(elem);
	}
	return selected;
}
com.wiris.quizzes.JsDomUtils.hasClass = function(elem,className) {
	return elem.nodeType == 1 && (" " + elem.className + " ").indexOf(" " + className + " ") >= 0;
}
com.wiris.quizzes.JsDomUtils.addClass = function(element,className) {
	element.className = com.wiris.quizzes.JsDomUtils.addClassToString(element.className,className);
}
com.wiris.quizzes.JsDomUtils.removeClass = function(element,className) {
	element.className = com.wiris.quizzes.JsDomUtils.removeClassFromString(element.className,className);
}
com.wiris.quizzes.JsDomUtils.hasClassString = function(elemClass,className) {
	return elemClass != null && (" " + elemClass + " ").indexOf(" " + className + " ") >= 0;
}
com.wiris.quizzes.JsDomUtils.addClassToString = function(str,className) {
	if(!com.wiris.quizzes.JsDomUtils.hasClassString(str,className)) {
		if(str == null || str.length == 0) str = className; else str += " " + className;
	}
	return str;
}
com.wiris.quizzes.JsDomUtils.removeClassFromString = function(elemClass,className) {
	if(com.wiris.quizzes.JsDomUtils.hasClassString(elemClass,className)) {
		elemClass = StringTools.replace(elemClass," " + className + " "," ");
		if(StringTools.startsWith(elemClass,className + " ")) elemClass = HxOverrides.substr(elemClass,className.length + 1,null);
		if(StringTools.endsWith(elemClass," " + className)) elemClass = HxOverrides.substr(elemClass,0,elemClass.length - (className.length + 1));
		if(elemClass == className) elemClass = "";
	}
	return elemClass;
}
com.wiris.quizzes.JsDomUtils.addEvent = function(element,event,func) {
	var useCapture = false;
	if(event == "focusin" || event == "focusout") {
		if(!'onfocusin' in window) {
			event = event == "focusin"?"focus":"blur";
			useCapture = true;
		}
	}
	if(element.addEventListener) element.addEventListener(event,func,useCapture); else if(element.attachEvent) element.attachEvent("on" + event,func);
}
com.wiris.quizzes.JsDomUtils.removeEvent = function(element,event,func) {
	if(element.removeEventListener) element.removeEventListener(event,func,false); else if(element.detachEvent) element.detachEvent("on" + event,func);
}
com.wiris.quizzes.JsDomUtils.getNearestElementByClassName = function(element,className) {
	var target = com.wiris.quizzes.JsDomUtils.getChildByClassName(element,className);
	while(target == null && element.parentNode != null) {
		var brothers = element.parentNode.childNodes;
		var i = 0;
		var n = brothers.length;
		while(target == null && i < n) {
			var brother = brothers[i];
			if(element != brother) target = com.wiris.quizzes.JsDomUtils.getChildByClassName(brother,className);
			i++;
		}
		element = element.parentNode;
	}
	return target;
}
com.wiris.quizzes.JsDomUtils.getChildByClassName = function(element,className) {
	if(com.wiris.quizzes.JsDomUtils.hasClass(element,className)) return element; else if(element.hasChildNodes()) {
		var i;
		var n = element.childNodes.length;
		var _g = 0;
		while(_g < n) {
			var i1 = _g++;
			var target = com.wiris.quizzes.JsDomUtils.getChildByClassName(element.childNodes[i1],className);
			if(target != null) return target;
		}
	}
	return null;
}
com.wiris.quizzes.JsDomUtils.loadFilePost = function(elem,url,func,params) {
	var d = elem.ownerDocument;
	var iframe = d.createElement("iframe");
	var submitted = false;
	com.wiris.quizzes.JsDomUtils.addEvent(iframe,"load",function(e) {
		if(submitted) {
			var node = iframe.contentWindow.document.body.firstChild;
			while(node.nodeType != 3) node = node.firstChild;
			var text = node.nodeValue;
			while(node.nextSibling != null) {
				node = node.nextSibling;
				text += node.nodeValue;
			}
			elem.removeChild(iframe);
			func(text);
		}
	});
	elem.appendChild(iframe);
	var form = com.wiris.quizzes.JsDomUtils.createForm(iframe.contentWindow.document,url,params);
	form.setAttribute("enctype","multipart/form-data");
	var fileInput = d.createElement("input");
	fileInput.setAttribute("name","data");
	fileInput.setAttribute("type","file");
	form.appendChild(fileInput);
	com.wiris.quizzes.JsDomUtils.addEvent(fileInput,"change",function(e) {
		iframe.contentWindow.document.body.appendChild(form);
		submitted = true;
		form.submit();
	});
	fileInput.click();
}
com.wiris.quizzes.JsDomUtils.loadFile = function(elem,url,func,params) {
	try {
		var browser = new com.wiris.system.JsBrowser();
		if(browser.isIE() || browser.isEdge()) {
			var temp = js.Lib.document.createElement("div");
			temp.style.display = "none";
			js.Lib.document.body.appendChild(temp);
			com.wiris.system.JsDOMUtils.loadTextFile(temp,function(content) {
				js.Lib.document.body.removeChild(temp);
				com.wiris.quizzes.JsDomUtils.getDocumentWindow(elem.ownerDocument).focus();
				func(content);
			});
		} else com.wiris.system.JsDOMUtils.loadTextFile(elem,func);
	} catch( e ) {
		if(url != null) com.wiris.quizzes.JsDomUtils.loadFilePost(elem,url,func,params); else throw e;
	}
}
com.wiris.quizzes.JsDomUtils.saveFile = function(elem,url,filename,contents,params) {
	try {
		com.wiris.system.JsDOMUtils.saveTextFile(elem,filename,"application/xml",contents);
	} catch( e ) {
		if(url != null) com.wiris.quizzes.JsDomUtils.saveFilePost(elem,url,filename,contents,params); else throw e;
	}
}
com.wiris.quizzes.JsDomUtils.saveFilePost = function(elem,url,filename,contents,params) {
	var d = elem.ownerDocument;
	var iframe = d.createElement("iframe");
	var submitted = false;
	com.wiris.quizzes.JsDomUtils.addEvent(iframe,"load",function(e) {
		if(!submitted) {
			submitted = true;
			var iframedoc = iframe.contentWindow.document;
			params.set("data",contents);
			params.set("filename",filename);
			var form = com.wiris.quizzes.JsDomUtils.createForm(iframedoc,url,params);
			iframedoc.body.appendChild(form);
			form.submit();
		} else elem.removeChild(iframe);
	});
	elem.appendChild(iframe);
}
com.wiris.quizzes.JsDomUtils.createForm = function(d,action,items) {
	var form = d.createElement("form");
	form.setAttribute("action",action);
	form.setAttribute("method","POST");
	var $it0 = items.keys();
	while( $it0.hasNext() ) {
		var name = $it0.next();
		var input = d.createElement("input");
		input.setAttribute("type","hidden");
		input.setAttribute("name",name);
		input.setAttribute("value",items.get(name));
		form.appendChild(input);
	}
	return form;
}
com.wiris.quizzes.JsDomUtils.getComputedStyle = function(d,x,styleProp) {
	if(x.currentStyle) return x.currentStyle[styleProp]; else if(window.getComputedStyle) return d.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp); else return null;
}
com.wiris.quizzes.JsDomUtils.isImageLoaded = function(image) {
	return image.complete && image.naturalWidth === undefined || image.naturalWidth != 0;
}
com.wiris.quizzes.JsDomUtils.getImageNaturalSize = function(image,f) {
	if(image.naturalWidth !== undefined) f(image.naturalWidth,image.naturalHeight); else {
		var aux = js.Lib.document.createElement("img");
		aux.src = image.src;
		if(aux.complete) f(aux.width,aux.height); else com.wiris.quizzes.JsDomUtils.addEvent(aux,"load",function(e) {
			f(aux.width,aux.height);
		});
	}
}
com.wiris.quizzes.JsDomUtils.getEventTarget = function(e) {
	return e.target?e.target:e.srcElement;
}
com.wiris.quizzes.JsDomUtils.addScript = function(d,win,url) {
	com.wiris.system.JsDOMUtils.addScript(d,win,url);
}
com.wiris.quizzes.JsDomUtils.removeDuplicatedCSS = function(d,source,name) {
	var head = d.getElementsByTagName("head")[0];
	var links = head.getElementsByTagName("link");
	var i = 0;
	var n = links.length;
	var found = false;
	while(i < n) {
		var link = links[i];
		var type = link.getAttribute("type");
		if(type == "text/css") {
			var href = link.getAttribute("href");
			var k = href.indexOf(source);
			if(k >= 0) {
				if(found && href.indexOf(name,k + 1) >= 0) {
					head.removeChild(link);
					i--;
					n--;
				}
			} else if(!found && href.indexOf(name) > -1) {
				found = true;
				i = 0;
			}
		}
		i++;
	}
}
com.wiris.quizzes.JsDomUtils.getDocumentWindow = function(doc) {
	var ownerWindow = null;
	if('defaultView' in doc) ownerWindow = doc.defaultView; else if('parentWindow' in doc) ownerWindow = doc.parentWindow;
	return ownerWindow;
}
com.wiris.quizzes.api.ui.QuizzesComponent = $hxClasses["com.wiris.quizzes.api.ui.QuizzesComponent"] = function() { }
com.wiris.quizzes.api.ui.QuizzesComponent.__name__ = ["com","wiris","quizzes","api","ui","QuizzesComponent"];
com.wiris.quizzes.api.ui.QuizzesComponent.prototype = {
	getElement: null
	,__class__: com.wiris.quizzes.api.ui.QuizzesComponent
}
com.wiris.quizzes.api.ui.QuizzesField = $hxClasses["com.wiris.quizzes.api.ui.QuizzesField"] = function() { }
com.wiris.quizzes.api.ui.QuizzesField.__name__ = ["com","wiris","quizzes","api","ui","QuizzesField"];
com.wiris.quizzes.api.ui.QuizzesField.__interfaces__ = [com.wiris.quizzes.api.ui.QuizzesComponent];
com.wiris.quizzes.api.ui.QuizzesField.prototype = {
	setReadOnly: null
	,addQuizzesFieldListener: null
	,setValue: null
	,getValue: null
	,__class__: com.wiris.quizzes.api.ui.QuizzesField
}
com.wiris.quizzes.api.ui.AuthoringField = $hxClasses["com.wiris.quizzes.api.ui.AuthoringField"] = function() { }
com.wiris.quizzes.api.ui.AuthoringField.__name__ = ["com","wiris","quizzes","api","ui","AuthoringField"];
com.wiris.quizzes.api.ui.AuthoringField.__interfaces__ = [com.wiris.quizzes.api.ui.QuizzesField];
com.wiris.quizzes.api.ui.AuthoringField.prototype = {
	showAnswerFieldPlainText: null
	,showAnswerFieldPopupEditor: null
	,showAnswerFieldInlineEditor: null
	,showGraphicSyntax: null
	,showGradingFunction: null
	,showAuxiliaryTextInput: null
	,showAuxiliarTextInput: null
	,showAuxiliaryCasReplaceEditor: null
	,showAuxiliarCasReplaceEditor: null
	,showAuxiliaryCas: null
	,showAuxiliarCas: null
	,showCorrectAnswer: null
	,showGradingCriteria: null
	,showVariablesDefinition: null
	,showPreviewTab: null
	,showVariablesTab: null
	,showValidationTab: null
	,showCorrectAnswerTab: null
	,setConfiguration: null
	,getFieldType: null
	,setFieldType: null
	,__class__: com.wiris.quizzes.api.ui.AuthoringField
}
com.wiris.quizzes.api.ui.EmbeddedAnswersEditor = $hxClasses["com.wiris.quizzes.api.ui.EmbeddedAnswersEditor"] = function() { }
com.wiris.quizzes.api.ui.EmbeddedAnswersEditor.__name__ = ["com","wiris","quizzes","api","ui","EmbeddedAnswersEditor"];
com.wiris.quizzes.api.ui.EmbeddedAnswersEditor.__interfaces__ = [com.wiris.quizzes.api.ui.AuthoringField];
com.wiris.quizzes.api.ui.EmbeddedAnswersEditor.prototype = {
	setEditableElement: null
	,newEmbeddedAuthoringElement: null
	,filterHTML: null
	,analyzeHTML: null
	,__class__: com.wiris.quizzes.api.ui.EmbeddedAnswersEditor
}
if(!com.wiris.quizzes.impl) com.wiris.quizzes.impl = {}
if(!com.wiris.quizzes.impl.ui) com.wiris.quizzes.impl.ui = {}
com.wiris.quizzes.impl.ui.EmbeddedAnswersEditorImpl = $hxClasses["com.wiris.quizzes.impl.ui.EmbeddedAnswersEditorImpl"] = function(question,questionInstance,componentBuilder) {
	this.question = question;
	this.questionInstance = questionInstance;
	this.componentBuilder = componentBuilder;
	this.globalContext = com.wiris.quizzes.impl.ui.QuizzesContext.getInstance();
	this.embeddedAuthoringFields = new Array();
};
com.wiris.quizzes.impl.ui.EmbeddedAnswersEditorImpl.__name__ = ["com","wiris","quizzes","impl","ui","EmbeddedAnswersEditorImpl"];
com.wiris.quizzes.impl.ui.EmbeddedAnswersEditorImpl.__interfaces__ = [com.wiris.quizzes.api.ui.EmbeddedAnswersEditor,com.wiris.quizzes.api.ui.AuthoringField];
com.wiris.quizzes.impl.ui.EmbeddedAnswersEditorImpl.prototype = {
	destroyAuthoringField: function(authoringField) {
		HxOverrides.remove(this.embeddedAuthoringFields,authoringField);
	}
	,getElement: function() {
		return null;
	}
	,setReadOnly: function(readOnly) {
	}
	,addQuizzesFieldListener: function(listener) {
	}
	,setValue: function(value) {
	}
	,getValue: function() {
		return null;
	}
	,getQuestion: function() {
		return this.question;
	}
	,showAnswerFieldPlainText: function(visible) {
	}
	,showAnswerFieldPopupEditor: function(visible) {
	}
	,showAnswerFieldInlineEditor: function(visible) {
	}
	,showGraphicSyntax: function(visible) {
	}
	,showGradingFunction: function(visible) {
	}
	,showAuxiliaryTextInput: function(visible) {
	}
	,showAuxiliaryCasReplaceEditor: function(visible) {
	}
	,showAuxiliaryCas: function(visible) {
	}
	,showAuxiliarTextInput: function(visible) {
	}
	,showAuxiliarCasReplaceEditor: function(visible) {
	}
	,showAuxiliarCas: function(visible) {
	}
	,showCorrectAnswer: function(visible) {
	}
	,showGradingCriteria: function(visible) {
	}
	,showVariablesDefinition: function(visible) {
	}
	,showPreviewTab: function(visible) {
	}
	,showVariablesTab: function(visible) {
	}
	,showValidationTab: function(visible) {
	}
	,showCorrectAnswerTab: function(visible) {
	}
	,setConfiguration: function(configuration) {
	}
	,getFieldType: function() {
		return com.wiris.quizzes.api.ui.AuthoringFieldType.EMBEDDED_ANSWERS_EDITOR;
	}
	,setFieldType: function(type) {
		if(type != com.wiris.quizzes.api.ui.AuthoringFieldType.EMBEDDED_ANSWERS_EDITOR) throw "Invalid parameter type.";
	}
	,buildEmbeddedAuthoringElement: function(slot,authorAnswer) {
		var context = new com.wiris.quizzes.impl.ui.QuizzesStudioContext(this.question,slot,authorAnswer);
		context.setOptAnswerFieldInlineEditor(false);
		var embeddedElement = new com.wiris.quizzes.impl.ui.EmbeddedAuthoringField(context,this.componentBuilder);
		embeddedElement.setEmbeddedAnswersEditor(this);
		this.embeddedAuthoringFields.push(embeddedElement);
		return embeddedElement;
	}
	,setEditableElement: function(element) {
		this.editableElement = element;
		this.analyzeHTML();
	}
	,newEmbeddedAuthoringElement: function() {
		var slot = this.question.addNewSlot();
		var authorAnswer = slot.addNewAuthorAnswer("");
		var context = new com.wiris.quizzes.impl.ui.QuizzesStudioContext(this.question,slot,authorAnswer);
		context.setOptAnswerFieldInlineEditor(false);
		var embeddedElement = new com.wiris.quizzes.impl.ui.EmbeddedAuthoringField(context,this.componentBuilder);
		embeddedElement.setEmbeddedAnswersEditor(this);
		this.embeddedAuthoringFields.push(embeddedElement);
		return embeddedElement.getElement();
	}
	,filterHTML: function(questionText,mode) {
		return com.wiris.quizzes.impl.EmbeddedAnswerFilter.filterHTML(questionText,mode,this.question.getImpl(),this.questionInstance);
	}
	,analyzeHTML: function() {
		var _g = 0, _g1 = this.embeddedAuthoringFields;
		while(_g < _g1.length) {
			var authoringField = _g1[_g];
			++_g;
			authoringField.setEditableElement(this.editableElement);
			authoringField.changeState();
		}
	}
	,embeddedAuthoringFields: null
	,editableElement: null
	,componentBuilder: null
	,globalContext: null
	,questionInstance: null
	,question: null
	,__class__: com.wiris.quizzes.impl.ui.EmbeddedAnswersEditorImpl
}
com.wiris.quizzes.JsEmbeddedAnswersEditor = $hxClasses["com.wiris.quizzes.JsEmbeddedAnswersEditor"] = function(question,questionInstance,componentBuilder) {
	com.wiris.quizzes.impl.ui.EmbeddedAnswersEditorImpl.call(this,question,questionInstance,componentBuilder);
};
com.wiris.quizzes.JsEmbeddedAnswersEditor.__name__ = ["com","wiris","quizzes","JsEmbeddedAnswersEditor"];
com.wiris.quizzes.JsEmbeddedAnswersEditor.__super__ = com.wiris.quizzes.impl.ui.EmbeddedAnswersEditorImpl;
com.wiris.quizzes.JsEmbeddedAnswersEditor.prototype = $extend(com.wiris.quizzes.impl.ui.EmbeddedAnswersEditorImpl.prototype,{
	filterAuthoringField: function(element,index) {
		var slot = null;
		var authorAnswer = null;
		var slots = this.question.getSlots();
		var _g = 0;
		while(_g < slots.length) {
			var s = slots[_g];
			++_g;
			var authorAnswers = s.getAuthorAnswers();
			var _g1 = 0;
			while(_g1 < authorAnswers.length) {
				var aa = authorAnswers[_g1];
				++_g1;
				var aai = aa;
				if(Std.parseInt(aai.id) == index) {
					slot = s;
					authorAnswer = aai;
					break;
				}
			}
		}
		if(slot == null) slot = this.question.addNewSlot();
		if(authorAnswer == null) while(authorAnswer == null || Std.parseInt(authorAnswer.id) < index) authorAnswer = slot.addNewAuthorAnswer("");
		var component = this.buildEmbeddedAuthoringElement(slot,authorAnswer);
		element.parentNode.replaceChild(component.getElement(),element);
	}
	,analyzeHTML: function() {
		var root = this.editableElement;
		var elementsLive = com.wiris.quizzes.JsDomUtils.getElementsByClassName(com.wiris.quizzes.JsEmbeddedAnswersEditor.CLASS_AUTHOR_FIELD_EMBEDDED,null,root);
		var elements = new Array();
		var _g = 0;
		while(_g < elementsLive.length) {
			var element = elementsLive[_g];
			++_g;
			elements.push(element);
		}
		var _g1 = 0, _g = elements.length;
		while(_g1 < _g) {
			var i = _g1++;
			var element = elements[i];
			this.filterAuthoringField(element,i);
		}
		com.wiris.quizzes.impl.ui.EmbeddedAnswersEditorImpl.prototype.analyzeHTML.call(this);
	}
	,__class__: com.wiris.quizzes.JsEmbeddedAnswersEditor
});
com.wiris.quizzes.api.Quizzes = $hxClasses["com.wiris.quizzes.api.Quizzes"] = function() {
};
com.wiris.quizzes.api.Quizzes.__name__ = ["com","wiris","quizzes","api","Quizzes"];
com.wiris.quizzes.api.Quizzes.getInstance = function() {
	return com.wiris.quizzes.JsQuizzes.getInstance();
}
com.wiris.quizzes.api.Quizzes.prototype = {
	newFeaturedAssertionsRequest: function(question) {
		return null;
	}
	,newFeaturedSyntaxAssertionsRequest: function(question) {
		return null;
	}
	,getResourceUrl: function(name) {
		return null;
	}
	,getConfiguration: function() {
		return null;
	}
	,getMathFilter: function() {
		return null;
	}
	,getQuizzesService: function() {
		return null;
	}
	,newFeedbackRequest: function(html,instance) {
		return null;
	}
	,newMultipleAnswersGradeRequest: function(correctAnswers,studentAnswers) {
		return null;
	}
	,newSimpleGradeRequest: function(correctAnswer,studentAnswer) {
		return null;
	}
	,newGradeRequest: function(instance) {
		return null;
	}
	,newVariablesRequestWithQuestionData: function(html,instance) {
		return null;
	}
	,newVariablesRequest: function(html,instance) {
		return null;
	}
	,readQuestionInstance: function(xml,question) {
		return null;
	}
	,readQuestion: function(xml) {
		return null;
	}
	,newQuestionInstance: function(q) {
		return null;
	}
	,newQuestion: function() {
		return null;
	}
	,getQuizzesComponentBuilder: function() {
		return null;
	}
	,__class__: com.wiris.quizzes.api.Quizzes
}
com.wiris.quizzes.impl.QuizzesImpl = $hxClasses["com.wiris.quizzes.impl.QuizzesImpl"] = function() {
	this.componentBuilder = null;
	com.wiris.quizzes.api.Quizzes.call(this);
};
com.wiris.quizzes.impl.QuizzesImpl.__name__ = ["com","wiris","quizzes","impl","QuizzesImpl"];
com.wiris.quizzes.impl.QuizzesImpl.getInstance = function() {
	if(com.wiris.quizzes.impl.QuizzesImpl.singleton == null) com.wiris.quizzes.impl.QuizzesImpl.singleton = new com.wiris.quizzes.impl.QuizzesImpl();
	return com.wiris.quizzes.impl.QuizzesImpl.singleton;
}
com.wiris.quizzes.impl.QuizzesImpl.getIndex = function(id) {
	var i = id.indexOf("_") + 1;
	return Std.parseInt(HxOverrides.substr(id,i,null));
}
com.wiris.quizzes.impl.QuizzesImpl.extractQuestionInstanceVariableNames = function(qi) {
	var vars = new Array();
	var i = qi.variables.keys();
	while(i.hasNext()) {
		var h = qi.variables.get(i.next());
		var j = h.keys();
		while(j.hasNext()) com.wiris.quizzes.impl.HTMLTools.insertStringInSortedArray(j.next(),vars);
	}
	return com.wiris.quizzes.impl.HTMLTools.toNativeArray(vars);
}
com.wiris.quizzes.impl.QuizzesImpl.removeAnswerVariables = function(variables,q,qi) {
	var qq = q.getImpl();
	if(qq.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER) == "true") {
		var name = qq.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER_NAME);
		var defname = qq.defaultOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER_NAME);
		if(defname == name) {
			var lang = com.wiris.quizzes.impl.CalcDocumentTools.casSessionLang(qq.getAlgorithm());
			name = com.wiris.quizzes.impl.QuizzesTranslator.getInstance(lang).t(name);
		}
		var n = 0;
		var i;
		var _g1 = 0, _g = variables.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(StringTools.startsWith(variables[i1],name)) {
				var after = HxOverrides.substr(variables[i1],name.length,null);
				if(after.length == 0 || com.wiris.util.type.IntegerTools.isInt(after) && Std.parseInt(after) <= qi.getStudentAnswersLength()) {
					variables[i1] = null;
					n++;
				} else if(qq.getLocalData(com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_COMPOUND_ANSWER) == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE && q.getCorrectAnswersLength() > 0) {
					var correctAnswer = qq.correctAnswers[0];
					var parts = com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswer(correctAnswer);
					if(com.wiris.util.type.IntegerTools.isInt(after) && Std.parseInt(after) <= parts.length) {
						variables[i1] = null;
						n++;
					}
				} else if(com.wiris.util.type.IntegerTools.isInt(after) && com.wiris.quizzes.impl.QuizzesImpl.containsCorrectAnswerWithCompoundName(qq,Std.parseInt(after))) {
					variables[i1] = null;
					n++;
				}
			}
		}
		if(n > 0) {
			var newvariables = new Array();
			var j = 0;
			var _g1 = 0, _g = variables.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				if(variables[i1] != null) {
					newvariables[j] = variables[i1];
					j++;
				}
			}
			variables = newvariables;
		}
	}
	return variables;
}
com.wiris.quizzes.impl.QuizzesImpl.containsCorrectAnswerWithCompoundName = function(q,after) {
	var it = HxOverrides.iter(q.correctAnswers);
	while(it.hasNext()) {
		var id = it.next().id;
		if(id != null && StringTools.endsWith(id,"_c" + (after - 1))) return true;
	}
	return false;
}
com.wiris.quizzes.impl.QuizzesImpl.setVariables = function(html,q,qi,qr) {
	var variables = null;
	if(html == null) variables = com.wiris.quizzes.impl.QuizzesImpl.extractQuestionInstanceVariableNames(qi); else {
		var h = new com.wiris.quizzes.impl.HTMLTools();
		var computedVariables = new Hash();
		html = h.extractActionExpressions(html,computedVariables);
		q.setAlgorithm(h.addComputedVariablesToAlgorithm(q.getAlgorithm(),computedVariables));
		variables = h.extractVariableNames(html);
		variables = com.wiris.quizzes.impl.QuizzesImpl.removeAnswerVariables(variables,q,qi);
	}
	if(variables.length > 0) {
		qr.variables(variables,com.wiris.quizzes.impl.MathContent.TYPE_TEXT);
		qr.variables(variables,com.wiris.quizzes.impl.MathContent.TYPE_MATHML);
	}
}
com.wiris.quizzes.impl.QuizzesImpl.__super__ = com.wiris.quizzes.api.Quizzes;
com.wiris.quizzes.impl.QuizzesImpl.prototype = $extend(com.wiris.quizzes.api.Quizzes.prototype,{
	mathContentToFilterableValue: function(value,initialContent) {
		if(value.type == com.wiris.quizzes.impl.MathContent.TYPE_GEOMETRY_FILE) return "<img " + "src=\"" + com.wiris.quizzes.impl.QuizzesImpl.getInstance().getResourceUrl("plotter_loading.png") + "\" " + "alt=\"Plotter\" " + "class=\"wirisconstruction wirisgraphanimate\" " + "data-wirisconstruction=\"" + com.wiris.util.xml.WXmlUtils.htmlEscape(value.content) + "\"" + (initialContent != null && !(initialContent == "")?"data-wirisinitialcontent=\"" + com.wiris.util.xml.WXmlUtils.htmlEscape(initialContent) + "\"":"") + "/>";
		return value.content;
	}
	,answerToFilterableValue: function(value,initialContent) {
		var mc = new com.wiris.quizzes.impl.MathContent();
		mc.set(value);
		return this.mathContentToFilterableValue(mc,initialContent);
	}
	,getElementsToGrade: function(geometryFile,assertion) {
		if(assertion.getParam(com.wiris.quizzes.impl.Assertion.PARAM_ELEMENTS_TO_GRADE) != null) {
			var ao = com.wiris.util.json.JSon.getArray(com.wiris.util.json.JSon.decode(assertion.getParam(com.wiris.quizzes.impl.Assertion.PARAM_ELEMENTS_TO_GRADE)));
			var strings = new Array();
			var _g = 0;
			while(_g < ao.length) {
				var o = ao[_g];
				++_g;
				strings.push(com.wiris.util.json.JSon.getString(o));
			}
			return strings;
		} else {
			var g = com.wiris.util.geometry.GeometryFile.readJSON(geometryFile);
			return g.getDisplaysLength() >= 1?g.getDisplay(0).getElementNames():new Array();
		}
	}
	,getElementsToGradeFromAuthorAnswer: function(authorAnswer) {
		return this.getElementsToGrade(authorAnswer.getValue(),authorAnswer.getComparison());
	}
	,getHttpObject: function(httpl,serviceUrl,service,postData) {
		var http;
		var config = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getConfiguration();
		var clientSide = com.wiris.settings.PlatformSettings.IS_JAVASCRIPT || com.wiris.settings.PlatformSettings.IS_FLASH;
		var allowCors = clientSide && "true" == config.get(com.wiris.quizzes.api.ConfigurationKeys.CROSSORIGINCALLS_ENABLED);
		if(clientSide && !allowCors) {
			var url = config.get(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL);
			http = new com.wiris.quizzes.impl.HttpImpl(url,httpl);
			http.setParameter("service",service);
			if(postData != null) {
				http.setParameter("rawpostdata","true");
				http.setParameter("postdata",postData);
				http.setHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
			} else http.setParameter("url",serviceUrl);
		} else {
			if(clientSide) http = new com.wiris.quizzes.impl.HttpImpl(serviceUrl,httpl); else {
				http = new com.wiris.quizzes.impl.MaxConnectionsHttpImpl(serviceUrl,httpl);
				var referrer = config.get(com.wiris.quizzes.api.ConfigurationKeys.REFERER_URL);
				if(referrer == null || StringTools.trim(referrer) == "") com.wiris.system.Logger.log(900,"'quizzes.referer.url' configuration item is not set so requests to the " + "service can not be identified. Unidentified requests may be blocked by the server " + "and will certainly be blocked in future releases." + "\n" + "Setup the referrer editing your configuration.ini file or setting it programmatically " + "through the Configuration interface." + "\n"); else http.setHeader("Referer",referrer);
			}
			if(postData != null) {
				http.setHeader("Content-Type","text/xml; charset=UTF-8");
				http.setPostData(postData);
			} else http.setHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
		}
		return http;
	}
	,newMultipleAnswersGradeRequest: function(correctAnswers,studentAnswers) {
		return this.newEvalMultipleAnswersRequest(correctAnswers,studentAnswers,null,null);
	}
	,newSimpleGradeRequest: function(correctAnswer,studentAnswer) {
		return this.newEvalMultipleAnswersRequest([correctAnswer],[studentAnswer],null,null);
	}
	,newMultipleResponseFromXml: function(xml) {
		var s = this.getSerializer();
		var elem = s.read(xml);
		var mqr;
		var tag = s.getTagName(elem);
		if(tag == com.wiris.quizzes.impl.QuestionResponseImpl.tagName) {
			var res = elem;
			mqr = new com.wiris.quizzes.impl.MultipleQuestionResponse();
			mqr.questionResponses = new Array();
			mqr.questionResponses.push(res);
		} else if(tag == com.wiris.quizzes.impl.MultipleQuestionResponse.tagName) mqr = elem; else throw "Unexpected XML root tag " + tag + ".";
		return mqr;
	}
	,newResponseFromXml: function(xml) {
		var mqr = this.newMultipleResponseFromXml(xml);
		return mqr.questionResponses[0];
	}
	,newRequestFromXml: function(xml) {
		var s = this.getSerializer();
		var elem = s.read(xml);
		var req;
		var tag = s.getTagName(elem);
		if(tag == com.wiris.quizzes.impl.QuestionRequestImpl.tagName) req = elem; else if(tag == com.wiris.quizzes.impl.MultipleQuestionRequest.tagName) {
			var mqr = elem;
			req = mqr.questionRequests[0];
		} else throw "Unexpected XML root tag " + tag + ".";
		return req;
	}
	,newTranslationRequest: function(q,lang) {
		var r = new com.wiris.quizzes.impl.QuestionRequestImpl();
		r.question = q;
		var p = new com.wiris.quizzes.impl.ProcessGetTranslation();
		p.lang = lang;
		r.addProcess(p);
		return r;
	}
	,replicateCompoundAnswerAssertionsImpl: function(aa,aux) {
		var assertions = new Array();
		var _g = 0;
		while(_g < aa.length) {
			var a = aa[_g];
			++_g;
			var n = aux.get(a.getCorrectAnswer());
			var k;
			var _g1 = 0;
			while(_g1 < n) {
				var k1 = _g1++;
				var ca = new com.wiris.quizzes.impl.Assertion();
				ca.name = a.name;
				ca.parameters = a.parameters;
				assertions.push(ca);
				if(a.name == com.wiris.quizzes.impl.Assertion.EQUIVALENT_FUNCTION) {
					var caa = new Array();
					var uaa = new Array();
					var l;
					var _g2 = 0;
					while(_g2 < n) {
						var l1 = _g2++;
						caa[l1] = a.getCorrectAnswer() + "_c" + l1;
						uaa[l1] = a.getAnswer() + "_c" + l1;
					}
					ca.setCorrectAnswers(caa);
					ca.setAnswers(uaa);
					break;
				} else {
					ca.setCorrectAnswer(a.getCorrectAnswer() + "_c" + k1);
					ca.setAnswer(a.getAnswer() + "_c" + k1);
				}
			}
		}
		return assertions;
	}
	,spliceEqualAssertion: function(a,assertions) {
		if(assertions == null) return null;
		var _g = 0;
		while(_g < assertions.length) {
			var ass = assertions[_g];
			++_g;
			if(ass.isEquivalent(a)) {
				HxOverrides.remove(assertions,ass);
				return ass;
			}
		}
		return null;
	}
	,replicateCompoundAnswerAssertions: function(qa,qq,aux) {
		if(qq.assertions == null) return;
		if(qa.getImpl().isQuestionCompoundAnswer()) {
			qq.assertions = this.replicateCompoundAnswerAssertionsImpl(qq.assertions,aux);
			return;
		}
		var slots = qa.getSlots();
		var _g = 0;
		while(_g < slots.length) {
			var s = slots[_g];
			++_g;
			if(s.isSlotCompoundAnswer()) {
				var assertions = new Array();
				var a = s.getSyntax();
				a = this.spliceEqualAssertion(a,qq.assertions);
				if(a != null) assertions.push(a);
				var authorAnswers = s.getAuthorAnswers();
				var _g1 = 0;
				while(_g1 < authorAnswers.length) {
					var aa = authorAnswers[_g1];
					++_g1;
					a = aa.getComparison();
					a = this.spliceEqualAssertion(a,qq.assertions);
					if(a != null) assertions.push(a);
					var validations = aa.getValidations();
					var _g2 = 0;
					while(_g2 < validations.length) {
						var v = validations[_g2];
						++_g2;
						a = v;
						a = this.spliceEqualAssertion(a,qq.assertions);
						if(a != null) assertions.push(a);
					}
				}
				qq.assertions = qq.assertions.concat(this.replicateCompoundAnswerAssertionsImpl(assertions,aux));
			}
		}
	}
	,breakCompoundUserAnswersImpl: function(answers) {
		var userAns = new Array();
		if(answers == null) return userAns;
		var _g = 0;
		while(_g < answers.length) {
			var a = answers[_g];
			++_g;
			var parts = com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswer(a);
			var k;
			var _g2 = 0, _g1 = parts.length;
			while(_g2 < _g1) {
				var k1 = _g2++;
				var ca = new com.wiris.quizzes.impl.Answer();
				ca.id = a.id + "_c" + k1;
				ca.set(parts[k1][1]);
				userAns.push(ca);
			}
		}
		return userAns;
	}
	,breakCompoundUserAnswers: function(qa,qq,uu) {
		if(uu.answers == null) return;
		if(qa.getImpl().isQuestionCompoundAnswer()) {
			uu.answers = this.breakCompoundUserAnswersImpl(uu.answers);
			return;
		}
		var slots = qa.getSlots();
		var _g = 0;
		while(_g < slots.length) {
			var s = slots[_g];
			++_g;
			if(s.isSlotCompoundAnswer()) {
				var compound = new Array();
				var i = uu.answers.length - 1;
				while(i >= 0) {
					var a = uu.answers[i--];
					if(s.id == a.id) {
						compound.push(a);
						HxOverrides.remove(uu.answers,a);
					}
				}
				uu.answers = uu.answers.concat(this.breakCompoundUserAnswersImpl(compound));
			}
		}
	}
	,breakCompoundCorrectAnswersImpl: function(qq,aux) {
		var correctAnswers = new Array();
		if(qq == null) return correctAnswers;
		var _g = 0;
		while(_g < qq.length) {
			var c = qq[_g];
			++_g;
			if(c == null) continue;
			var parts = com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswer(c);
			if(aux != null) aux.set(c.id,parts.length);
			var k;
			var _g2 = 0, _g1 = parts.length;
			while(_g2 < _g1) {
				var k1 = _g2++;
				var cc = new com.wiris.quizzes.impl.CorrectAnswer();
				cc.type = c.type;
				cc.id = c.id + "_c" + k1;
				cc.content = parts[k1][1];
				cc.weight = 1.0 / parts.length;
				correctAnswers.push(cc);
			}
		}
		return correctAnswers;
	}
	,breakCompoundCorrectAnswers: function(qa,qq,aux,instance) {
		if(qq.correctAnswers == null) return;
		if(qa.getImpl().isQuestionCompoundAnswer()) {
			qq.correctAnswers = this.breakCompoundCorrectAnswersImpl(qq.correctAnswers,aux);
			return;
		}
		var slots = qa.getSlots();
		var _g = 0;
		while(_g < slots.length) {
			var s = slots[_g];
			++_g;
			if(s.isSlotCompoundAnswer()) {
				var authorAnswers = s.getAuthorAnswers();
				var correctAnswers = new Array();
				var _g1 = 0;
				while(_g1 < authorAnswers.length) {
					var aa = authorAnswers[_g1];
					++_g1;
					correctAnswers.push(aa.value);
				}
				var separated = this.breakCompoundCorrectAnswersImpl(correctAnswers,aux);
				var _g1 = 0;
				while(_g1 < correctAnswers.length) {
					var ca = correctAnswers[_g1];
					++_g1;
					HxOverrides.remove(qq.correctAnswers,ca);
				}
				if(instance != null && instance.hasVariables()) {
					var _g1 = 0;
					while(_g1 < separated.length) {
						var sepCA = separated[_g1];
						++_g1;
						var isPlainTextField = s.getAnswerFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD;
						var isStringSyntax = s.getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.STRING;
						var value = sepCA.content;
						if(isPlainTextField || isStringSyntax) value = instance.expandVariablesText(value); else value = instance.expandVariablesMathMLEval(value);
						sepCA.set(value);
					}
				}
				qq.correctAnswers = qq.correctAnswers.concat(separated);
			}
		}
	}
	,isCompoundGraphicalAssertion: function(a) {
		return a.name == com.wiris.quizzes.impl.Assertion.EQUIVALENT_GRAPHIC || a.name == com.wiris.quizzes.impl.Assertion.CHECK_COLOR || a.name == com.wiris.quizzes.impl.Assertion.CHECK_LINESTYLE;
	}
	,breakCompoundGraphical: function(qq) {
		var toAdd = new Array();
		var toRemove = new Array();
		var _g1 = 0, _g = qq.getAssertionsLength();
		while(_g1 < _g) {
			var i = _g1++;
			if(this.isCompoundGraphicalAssertion(qq.getAssertion(i))) {
				var ass = qq.getAssertion(i);
				var ca = null;
				var _g3 = 0, _g2 = qq.correctAnswers.length;
				while(_g3 < _g2) {
					var j = _g3++;
					if(com.wiris.util.type.Arrays.containsArray(ass.getCorrectAnswers(),qq.correctAnswers[j].id)) ca = qq.correctAnswers[j];
				}
				if(ca == null) return;
				var elements = this.getElementsToGrade(ca.content,ass);
				var steppedElements = new Array();
				var _g3 = 0, _g2 = elements.length;
				while(_g3 < _g2) {
					var j = _g3++;
					var elemId = elements[j];
					steppedElements.push(elemId);
					var ca_j = new com.wiris.quizzes.impl.CorrectAnswer();
					ca_j.id = ca.id + "_cg" + j + "_" + elemId;
					ca_j.reference = ca.id;
					var ass_j = new com.wiris.quizzes.impl.Assertion();
					ass_j.name = ass.name;
					ass_j.addCorrectAnswer(ca_j.id);
					ass_j.answer = ass.answer;
					ass_j.setParam(com.wiris.quizzes.impl.Assertion.PARAM_ELEMENTS_TO_GRADE,com.wiris.util.json.JSon.encode(steppedElements));
					if(ass.getParam(com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE) != null) ass_j.setParam(com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE,ass.getParam(com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE));
					qq.correctAnswers.push(ca_j);
					toAdd.push(ass_j);
				}
				toRemove.push(ass);
			}
		}
		var _g = 0;
		while(_g < toRemove.length) {
			var a = toRemove[_g];
			++_g;
			HxOverrides.remove(qq.assertions,a);
		}
		var _g = 0;
		while(_g < toAdd.length) {
			var a = toAdd[_g];
			++_g;
			qq.assertions.push(a);
		}
	}
	,isCompoundGraphical: function(qq) {
		var _g1 = 0, _g = qq.getAssertionsLength();
		while(_g1 < _g) {
			var i = _g1++;
			if(this.isCompoundGraphicalAssertion(qq.getAssertion(i))) return true;
		}
		return false;
	}
	,newEvalMultipleAnswersRequest: function(correctAnswers,userAnswers,question,instance) {
		var q = null;
		var qi = null;
		if(question != null) q = question.getImpl();
		if(instance != null) qi = instance;
		var qq = new com.wiris.quizzes.impl.QuestionImpl();
		var uu = new com.wiris.quizzes.impl.UserData();
		uu.answers = new Array();
		if(q != null) {
			qq.wirisCasSession = q.wirisCasSession;
			qq.options = q.options;
		}
		if(qi != null && qi.userData != null) {
			uu.randomSeed = qi.userData.randomSeed;
			uu.parameters = qi.userData.parameters;
		} else {
			var qqi = new com.wiris.quizzes.impl.QuestionInstanceImpl();
			uu.randomSeed = qqi.userData.randomSeed;
		}
		var i = 0;
		if(correctAnswers != null) {
			var _g1 = 0, _g = correctAnswers.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var value = com.wiris.util.xml.MathMLUtils.removeStrokesAnnotation(correctAnswers[i1]);
				if(value == null) value = "";
				qq.setCorrectAnswer(i1,value);
			}
		}
		if(userAnswers != null) {
			var _g1 = 0, _g = userAnswers.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				uu.setUserAnswer(i1,this.removeHandAnnotations(userAnswers[i1]));
			}
		}
		qq.assertions = new Array();
		var qa = q;
		var ua = null;
		if(qi != null) ua = qi.userData;
		var j;
		if(correctAnswers == null && qa != null) {
			qq.correctAnswers = new Array();
			var cas = qa.correctAnswers;
			var _g1 = 0, _g = cas.length;
			while(_g1 < _g) {
				var j1 = _g1++;
				var ca = cas[j1];
				if(ca != null && ca.content != null) {
					var newCA = new com.wiris.quizzes.impl.CorrectAnswer();
					newCA.type = ca.type;
					newCA.content = com.wiris.util.xml.MathMLUtils.removeStrokesAnnotation(ca.content);
					newCA.weight = ca.weight;
					newCA.id = ca.id;
					qq.correctAnswers.push(newCA);
				}
			}
		}
		if(userAnswers == null && ua != null && ua.answers != null) {
			var _g1 = 0, _g = ua.answers.length;
			while(_g1 < _g) {
				var j1 = _g1++;
				var aa = ua.answers[j1].content;
				if(aa != null) {
					aa = this.removeHandAnnotations(aa);
					uu.setUserAnswer(j1,aa);
				}
			}
		}
		var syntax = null;
		if(qa != null && qa.assertions != null) {
			var _g1 = 0, _g = qa.assertions.length;
			while(_g1 < _g) {
				var j1 = _g1++;
				var ass = qa.assertions[j1].copy();
				if(ass.isSyntactic()) syntax = ass;
				if(correctAnswers != null) {
					var assCA = ass.getCorrectAnswers();
					var caCounter = assCA.length - 1;
					while(caCounter >= 0) {
						var ca = assCA[caCounter];
						if(Std.parseInt(ca) >= correctAnswers.length) ass.removeCorrectAnswer(ca);
						caCounter--;
					}
					if(ass.getCorrectAnswers().length == 0) continue;
				}
				qq.assertions.push(ass);
			}
		}
		if(syntax == null) {
			syntax = new com.wiris.quizzes.impl.Assertion();
			syntax.addCorrectAnswer("0");
			syntax.name = com.wiris.quizzes.impl.Assertion.SYNTAX_MATH;
			qq.assertions.push(syntax);
		}
		var _g1 = 0, _g = uu.answers.length;
		while(_g1 < _g) {
			var j1 = _g1++;
			var foundSyntax = false;
			var k;
			var _g3 = 0, _g2 = qq.assertions.length;
			while(_g3 < _g2) {
				var k1 = _g3++;
				var ass = qq.assertions[k1];
				if(ass.isSyntactic() && com.wiris.util.type.Arrays.containsArray(ass.getAnswers(),j1)) foundSyntax = true;
			}
			if(!foundSyntax) syntax.addAnswer(j1 + "");
		}
		if(qi != null && qi.hasVariables()) {
			var _g1 = 0, _g = qq.getCorrectAnswersLength();
			while(_g1 < _g) {
				var j1 = _g1++;
				var ca = qq.correctAnswers[j1];
				var value = ca.content;
				var isPlainTextField = qa.getAnswerFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD;
				var isStringSyntax = syntax.name == com.wiris.quizzes.impl.Assertion.SYNTAX_STRING;
				var slots = qa.slots;
				if(slots != null) {
					var _g2 = 0;
					while(_g2 < slots.length) {
						var slot = slots[_g2];
						++_g2;
						var authorAnswers = slot.authorAnswers;
						var _g3 = 0;
						while(_g3 < authorAnswers.length) {
							var authorAnswer = authorAnswers[_g3];
							++_g3;
							if(authorAnswer.id == ca.id) {
								isPlainTextField = slot.getAnswerFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD;
								isStringSyntax = slot.getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.STRING;
							}
						}
					}
				}
				var isTextFormat = ca.type == com.wiris.quizzes.impl.MathContent.TYPE_TEXT;
				var hasMultiletterIdentifierInTextFormat = false;
				if(isTextFormat) {
					var splitByRegularSp = ca.content.split(" ");
					var words = new Array();
					var _g2 = 0;
					while(_g2 < splitByRegularSp.length) {
						var word = splitByRegularSp[_g2];
						++_g2;
						var splitByNbsp = word.split(com.wiris.system.Utf8.uchr(160));
						words = words.concat(splitByNbsp);
					}
					var _g2 = 0;
					while(_g2 < words.length) {
						var word = words[_g2];
						++_g2;
						if(!StringTools.startsWith(word,"#") && word.length > 1) {
							hasMultiletterIdentifierInTextFormat = true;
							break;
						}
					}
				}
				if(isPlainTextField || isStringSyntax || hasMultiletterIdentifierInTextFormat) value = qi.expandVariablesText(value); else value = qi.expandVariablesMathMLEval(value);
				qq.setCorrectAnswer(j1,value);
			}
		}
		j = qq.assertions.length - 1;
		while(j >= 0) {
			if(qq.assertions[j].name == com.wiris.quizzes.impl.Assertion.EQUIVALENT_ALL) {
				var correctanswer = qq.assertions[j].getCorrectAnswer();
				var k = qq.assertions.length - 1;
				while(k >= 0) {
					if(qq.assertions[k].isSyntactic()) {
						qq.assertions[k].removeCorrectAnswer(correctanswer);
						if(qq.assertions[k].getCorrectAnswers().length == 0) {
							HxOverrides.remove(qq.assertions,qq.assertions[k]);
							if(k < j) j--;
						}
					}
					k--;
				}
			}
			j--;
		}
		var usedcorrectanswers = new Array();
		var _g1 = 0, _g = qq.getCorrectAnswersLength();
		while(_g1 < _g) {
			var j1 = _g1++;
			usedcorrectanswers[j1] = false;
		}
		var usedanswers = new Array();
		var _g1 = 0, _g = uu.answers.length;
		while(_g1 < _g) {
			var j1 = _g1++;
			usedanswers[j1] = false;
		}
		var _g1 = 0, _g = qq.assertions.length;
		while(_g1 < _g) {
			var j1 = _g1++;
			var ass = qq.assertions[j1];
			var corr = com.wiris.quizzes.impl.QuizzesImpl.getIndex(ass.getCorrectAnswer());
			var ans = com.wiris.quizzes.impl.QuizzesImpl.getIndex(ass.getAnswer());
			if(ass.isEquivalence()) {
				if(corr < usedcorrectanswers.length) usedcorrectanswers[corr] = true;
				if(ans < usedanswers.length) usedanswers[ans] = true;
			} else if(ass.isCheck()) {
				if(ans < usedanswers.length) usedanswers[ans] = true;
			}
		}
		var pairs = this.getPairings(qq.getCorrectAnswersLength(),uu.answers.length);
		var _g1 = 0, _g = usedcorrectanswers.length;
		while(_g1 < _g) {
			var j1 = _g1++;
			if(!usedcorrectanswers[j1]) {
				var k;
				var _g3 = 0, _g2 = pairs.length;
				while(_g3 < _g2) {
					var k1 = _g3++;
					if(pairs[k1][0] == j1) {
						var user = pairs[k1][1];
						qq.setParametrizedAssertion(com.wiris.quizzes.impl.Assertion.EQUIVALENT_SYMBOLIC,j1 + "",user + "",null);
						usedanswers[user] = true;
					}
				}
			}
		}
		var _g1 = 0, _g = usedanswers.length;
		while(_g1 < _g) {
			var j1 = _g1++;
			if(!usedanswers[j1]) {
				var k;
				var _g3 = 0, _g2 = pairs.length;
				while(_g3 < _g2) {
					var k1 = _g3++;
					if(pairs[k1][1] == j1) qq.setParametrizedAssertion(com.wiris.quizzes.impl.Assertion.EQUIVALENT_SYMBOLIC,pairs[k1][0] + "",j1 + "",null);
				}
			}
		}
		if(qa != null && qa.getImpl().isCompoundAnswer()) {
			if(this.isCompoundGraphical(qq)) this.breakCompoundGraphical(qq); else {
				var aux = new Hash();
				this.breakCompoundCorrectAnswers(qa,qq,aux,qi);
				this.breakCompoundUserAnswers(qa,qq,uu);
				this.replicateCompoundAnswerAssertions(qa,qq,aux);
			}
		}
		var qr = new com.wiris.quizzes.impl.QuestionRequestImpl();
		qr.question = qq;
		qr.userData = uu;
		qr.checkAssertions();
		return qr;
	}
	,removeHandAnnotations: function(mathml) {
		var conf = this.getConfiguration();
		if(!(conf.get(com.wiris.quizzes.api.ConfigurationKeys.HAND_LOGTRACES) == "true") || conf.get(com.wiris.quizzes.api.ConfigurationKeys.SERVICE_URL).indexOf("www.wiris.net") == -1) return com.wiris.util.xml.MathMLUtils.removeStrokesAnnotation(mathml);
		return mathml;
	}
	,getPairings: function(c,u) {
		var p = new Array();
		var reverse;
		if(c >= u) reverse = false; else {
			var aux = c;
			c = u;
			u = aux;
			reverse = true;
		}
		if(u == 0) return p;
		var n = c / u | 0;
		var d = c % u | 0;
		var i;
		var cc = 0;
		var cu = 0;
		var _g = 0;
		while(_g < u) {
			var i1 = _g++;
			var j;
			var _g1 = 0;
			while(_g1 < n) {
				var j1 = _g1++;
				p.push([reverse?cu:cc,reverse?cc:cu]);
				cc++;
			}
			if(i1 < d) {
				p.push([reverse?cu:cc,reverse?cc:cu]);
				cc++;
			}
			cu++;
		}
		return p;
	}
	,getSerializer: function() {
		var s = new com.wiris.util.xml.XmlSerializer();
		s.register(new com.wiris.quizzes.impl.Answer());
		s.register(new com.wiris.quizzes.impl.Assertion());
		s.register(new com.wiris.quizzes.impl.AssertionCheckImpl());
		s.register(new com.wiris.quizzes.impl.AssertionParam());
		s.register(new com.wiris.quizzes.impl.CorrectAnswer());
		s.register(new com.wiris.quizzes.impl.InitialContent());
		s.register(new com.wiris.quizzes.impl.LocalData());
		s.register(new com.wiris.quizzes.impl.MathContent());
		s.register(new com.wiris.quizzes.impl.MultipleQuestionRequest());
		s.register(new com.wiris.quizzes.impl.MultipleQuestionResponse());
		s.register(new com.wiris.quizzes.impl.Option());
		s.register(new com.wiris.quizzes.impl.ProcessGetCheckAssertions());
		s.register(new com.wiris.quizzes.impl.ProcessGetFeaturedAssertions());
		s.register(new com.wiris.quizzes.impl.ProcessGetFeaturedSyntaxAssertions());
		s.register(new com.wiris.quizzes.impl.ProcessGetTranslation());
		s.register(new com.wiris.quizzes.impl.ProcessGetVariables());
		s.register(new com.wiris.quizzes.impl.ProcessStoreQuestion());
		s.register(new com.wiris.quizzes.impl.QuestionImpl());
		s.register(new com.wiris.quizzes.impl.QuestionRequestImpl());
		s.register(new com.wiris.quizzes.impl.QuestionResponseImpl());
		s.register(new com.wiris.quizzes.impl.QuestionInstanceImpl());
		s.register(new com.wiris.quizzes.impl.ResultError());
		s.register(new com.wiris.quizzes.impl.ResultErrorLocation());
		s.register(new com.wiris.quizzes.impl.ResultGetCheckAssertions());
		s.register(new com.wiris.quizzes.impl.ResultGetTranslation());
		s.register(new com.wiris.quizzes.impl.ResultGetVariables());
		s.register(new com.wiris.quizzes.impl.ResultStoreQuestion());
		s.register(new com.wiris.quizzes.impl.ResultGetFeaturedSyntaxAssertions());
		s.register(new com.wiris.quizzes.impl.ResultGetFeaturedAssertions());
		s.register(new com.wiris.quizzes.impl.SlotImpl());
		s.register(new com.wiris.quizzes.impl.TranslationNameChange());
		s.register(new com.wiris.quizzes.impl.UserData());
		s.register(new com.wiris.quizzes.impl.Variable());
		s.register(new com.wiris.quizzes.impl.Parameter());
		return s;
	}
	,cloneAndProcessCompoundAnswers: function(question) {
		var q = question;
		if(!q.getImpl().isCompoundAnswer()) return q;
		var qq = new com.wiris.quizzes.impl.QuestionImpl();
		var ca = q.getImpl().correctAnswers;
		qq.importQuestion(q.getImpl());
		var aux = new Hash();
		if(ca != null) {
			qq.correctAnswers = ca.concat(new Array());
			this.breakCompoundCorrectAnswers(qq,qq,aux,null);
		}
		var aa = q.getImpl().assertions;
		if(aa != null) {
			qq.assertions = aa.concat(new Array());
			this.replicateCompoundAnswerAssertions(qq,qq,aux);
		}
		return qq;
	}
	,newFeaturedAssertionsRequest: function(question) {
		if(question == null) throw "Question cannot be null.";
		var qr = new com.wiris.quizzes.impl.QuestionRequestImpl();
		qr.question = this.cloneAndProcessCompoundAnswers(question);
		qr.addProcess(new com.wiris.quizzes.impl.ProcessGetFeaturedAssertions());
		return qr;
	}
	,newFeaturedSyntaxAssertionsRequest: function(question) {
		if(question == null) throw "Question cannot be null.";
		var qr = new com.wiris.quizzes.impl.QuestionRequestImpl();
		qr.question = question;
		qr.addProcess(new com.wiris.quizzes.impl.ProcessGetFeaturedSyntaxAssertions());
		return qr;
	}
	,getLockProvider: function() {
		if(this.locker == null) {
			var className = this.getConfiguration().get(com.wiris.quizzes.impl.ConfigurationImpl.LOCKPROVIDER_CLASS);
			if(!(className == "")) this.locker = Type.createInstance(Type.resolveClass(className),new Array()); else this.locker = new com.wiris.quizzes.impl.FileLockProvider(this.getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.CACHE_DIR));
		}
		return this.locker;
	}
	,getVariablesCache: function() {
		if(this.variablesCache == null) this.variablesCache = this.createCache(com.wiris.quizzes.impl.ConfigurationImpl.VARIABLESCACHE_CLASS);
		return this.variablesCache;
	}
	,getImagesCache: function() {
		if(this.imagesCache == null) this.imagesCache = this.createCache(com.wiris.quizzes.impl.ConfigurationImpl.IMAGESCACHE_CLASS);
		return this.imagesCache;
	}
	,newStoreCache: function() {
		return new com.wiris.util.sys.StoreCache(this.getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.CACHE_DIR));
	}
	,createCache: function(configKey) {
		var cache;
		var className = this.getConfiguration().get(configKey);
		if(!(className == "")) cache = Type.createInstance(Type.resolveClass(className),new Array()); else cache = this.newStoreCache();
		return cache;
	}
	,getAccessProvider: function() {
		if(this.accessProvider == null) {
			var classpath = this.getConfiguration().get(com.wiris.quizzes.impl.ConfigurationImpl.ACCESSPROVIDER_CLASSPATH);
			if(!(classpath == "")) com.wiris.quizzes.impl.ClasspathLoader.load(classpath);
			var className = this.getConfiguration().get(com.wiris.quizzes.impl.ConfigurationImpl.ACCESSPROVIDER_CLASS);
			if(!(className == "")) this.accessProvider = Type.createInstance(Type.resolveClass(className),new Array());
		}
		return this.accessProvider;
	}
	,getTracker: function() {
		return this.tracker;
	}
	,getTelemetryService: function() {
		return this.telemetryService;
	}
	,getResourceUrl: function(name) {
		var c = this.getConfiguration();
		var version = c.get(com.wiris.quizzes.api.ConfigurationKeys.VERSION);
		if("true" == c.get(com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_STATIC)) return c.get(com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_URL) + "/" + name + "?v=" + version; else return c.get(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL) + "?service=resource&name=" + name + "&v=" + version;
	}
	,getConfiguration: function() {
		return com.wiris.quizzes.impl.ConfigurationImpl.getInstance();
	}
	,getMathFilter: function() {
		return new com.wiris.quizzes.impl.MathMLFilter();
	}
	,getQuizzesService: function() {
		return new com.wiris.quizzes.impl.QuizzesServiceImpl();
	}
	,newFeedbackRequest: function(html,instance) {
		if(instance == null) throw "The question instance cannot be null!";
		var r = this.newGradeRequest(instance);
		var qr = r;
		var qi = instance;
		qr.question = this.copyQuestion(qr.question);
		com.wiris.quizzes.impl.QuizzesImpl.setVariables(html,qr.question,qi,qr);
		return r;
	}
	,newGradeRequest: function(instance) {
		if(instance == null) throw "The question instance cannot be null!";
		return this.newEvalMultipleAnswersRequest(null,null,instance.question,instance);
	}
	,newVariablesRequestWithQuestionData: function(html,instance) {
		if(instance == null) throw "The question instance cannot be null!";
		var qi = instance;
		var question = qi.question;
		var sb = new StringBuf();
		if(question != null) {
			var slots = question.getSlots();
			var _g = 0;
			while(_g < slots.length) {
				var slot = slots[_g];
				++_g;
				if(slot.getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC) continue;
				if(slot.getInitialContent() != null) sb.b += Std.string(slot.getInitialContent() + " ");
				var authorAnswers = slot.getAuthorAnswers();
				var _g1 = 0;
				while(_g1 < authorAnswers.length) {
					var authorAnswer = authorAnswers[_g1];
					++_g1;
					if(authorAnswer.getValue() != null) sb.b += Std.string(authorAnswer.getValue() + " ");
				}
			}
		}
		if(html != null) sb.b += Std.string(html);
		return this.newVariablesRequest(sb.b,instance);
	}
	,copyQuestion: function(question) {
		var copy = this.newQuestion().getImpl();
		var original = question.getImpl();
		copy.id = original.id;
		copy.localData = original.localData;
		copy.assertions = original.assertions;
		copy.slots = original.slots;
		copy.correctAnswers = original.correctAnswers;
		copy.options = original.options;
		copy.wirisCasSession = original.wirisCasSession;
		return copy;
	}
	,newVariablesRequest: function(html,instance) {
		if(instance == null) throw "The question instance cannot be null!";
		var qi = instance;
		var question = qi.question;
		if(question == null) throw "The question must be specified, either as a parameter" + " of this function or as a field of the question instance";
		question = this.copyQuestion(question);
		var qr = new com.wiris.quizzes.impl.QuestionRequestImpl();
		qr.question = question;
		qr.userData = qi.userData;
		com.wiris.quizzes.impl.QuizzesImpl.setVariables(html,question,qi,qr);
		return qr;
	}
	,readQuestionInstance: function(xml,q) {
		var s = this.getSerializer();
		var elem = s.read(xml);
		var tag = s.getTagName(elem);
		if(!(tag == "questionInstance")) throw "Unexpected root tag " + tag + ". Expected questionInstance.";
		if(q != null) elem.question = q;
		return elem;
	}
	,readQuestion: function(xml) {
		return new com.wiris.quizzes.impl.QuestionLazy(xml);
	}
	,newQuestionInstance: function(q) {
		var qi = new com.wiris.quizzes.impl.QuestionInstanceImpl();
		qi.question = q;
		return qi;
	}
	,newQuestion: function() {
		return new com.wiris.quizzes.impl.QuestionImpl();
	}
	,getQuizzesComponentBuilder: function() {
		if(this.componentBuilder == null) this.componentBuilder = new com.wiris.quizzes.impl.QuizzesComponentBuilderImpl();
		return this.componentBuilder;
	}
	,tracker: null
	,telemetryService: null
	,accessProvider: null
	,locker: null
	,imagesCache: null
	,variablesCache: null
	,componentBuilder: null
	,__class__: com.wiris.quizzes.impl.QuizzesImpl
});
com.wiris.quizzes.JsQuizzes = $hxClasses["com.wiris.quizzes.JsQuizzes"] = function() {
	com.wiris.quizzes.impl.QuizzesImpl.call(this);
	var telemetryUrl = this.getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.TELEMETRY_URL);
	var telemetryToken = this.getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.TELEMETRY_TOKEN);
	var deploymentId = this.getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.DEPLOYMENT_ID);
	this.telemetryService = new com.wiris.util.telemetry.TelemetryServiceImpl(telemetryUrl,telemetryToken,deploymentId);
	this.telemetryService.getSender().setParameters(this.getTelemetryServerParameters());
	this.tracker = new com.wiris.quizzes.telemetry.QuizzesTracker(this.telemetryService);
};
com.wiris.quizzes.JsQuizzes.__name__ = ["com","wiris","quizzes","JsQuizzes"];
com.wiris.quizzes.JsQuizzes.singleton = null;
com.wiris.quizzes.JsQuizzes.getInstance = function() {
	if(com.wiris.quizzes.JsQuizzes.singleton == null) {
		com.wiris.quizzes.JsQuizzes.singleton = new com.wiris.quizzes.JsQuizzes();
		com.wiris.quizzes.impl.QuizzesImpl.singleton = com.wiris.quizzes.JsQuizzes.singleton;
	}
	return com.wiris.quizzes.JsQuizzes.singleton;
}
com.wiris.quizzes.JsQuizzes.__super__ = com.wiris.quizzes.impl.QuizzesImpl;
com.wiris.quizzes.JsQuizzes.prototype = $extend(com.wiris.quizzes.impl.QuizzesImpl.prototype,{
	getQuizzesService: function() {
		var config = com.wiris.quizzes.JsQuizzes.getInstance().getConfiguration();
		var offline = "true" == config.get(com.wiris.quizzes.api.ConfigurationKeys.SERVICE_OFFLINE);
		if(offline) return new com.wiris.quizzes.impl.OfflineQuizzesServiceImpl();
		return new com.wiris.quizzes.impl.QuizzesServiceImpl();
	}
	,canonicalURL: function(url) {
		var div = js.Lib.document.createElement("div");
		div.innerHTML = "<a></a>";
		div.firstChild.href = url;
		div.innerHTML = div.innerHTML;
		return div.firstChild.href;
	}
	,isHttps: function() {
		return js.Lib.window.location.protocol == "https:";
	}
	,isAbsolute: function(url) {
		return StringTools.startsWith(url,"http://") || StringTools.startsWith(url,"https://");
	}
	,getConfiguration: function() {
		if(this.config == null) {
			com.wiris.quizzes.impl.ConfigurationImpl.setIsHttps(this.isHttps());
			var c = com.wiris.quizzes.impl.ConfigurationImpl.getInstance();
			if(c.get(com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_STATIC) == "true") {
				var scriptPath = com.wiris.system.JsDOMUtils.findServicePath("quizzes.js");
				if(scriptPath != null) {
					c.set(com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_URL,scriptPath);
					com.wiris.system.JsDOMUtils.addEventListener(js.Lib.window,"beforeunload",function(e) {
						var data = com.wiris.quizzes.JsQuizzes.getInstance().getTelemetryService().getBatch();
						if(data != null) com.wiris.system.TelemetryUtils.sendBatch(data);
					});
				}
			}
			var urlconfigs = com.wiris.quizzes.impl.ConfigurationImpl.getUrlKeys();
			var _g = 0;
			while(_g < urlconfigs.length) {
				var key = urlconfigs[_g];
				++_g;
				var url = c.get(key);
				if(url != null) {
					if(!this.isAbsolute(url)) url = this.canonicalURL(url);
					c.set(key,url);
				}
			}
			this.config = c;
		}
		return this.config;
	}
	,getQuizzesComponentBuilder: function() {
		if(this.componentBuilder == null) this.componentBuilder = new com.wiris.quizzes.JsQuizzesApiComponentBuilder();
		return this.componentBuilder;
	}
	,getTelemetryServerParameters: function() {
		var h = com.wiris.system.TelemetryUtils.getSenderParameters();
		h.set(com.wiris.util.telemetry.Sender.PRODUCT_VERSION_KEY,this.getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.VERSION));
		return h;
	}
	,config: null
	,__class__: com.wiris.quizzes.JsQuizzes
});
com.wiris.quizzes.api.ui.QuizzesComponentBuilder = $hxClasses["com.wiris.quizzes.api.ui.QuizzesComponentBuilder"] = function() { }
com.wiris.quizzes.api.ui.QuizzesComponentBuilder.__name__ = ["com","wiris","quizzes","api","ui","QuizzesComponentBuilder"];
com.wiris.quizzes.api.ui.QuizzesComponentBuilder.prototype = {
	replaceFields: null
	,getMathViewer: null
	,newAuxiliaryCasField: null
	,newEmbeddedAnswersEditor: null
	,newAuthoringField: null
	,newAnswerField: null
	,newAnswerFeedback: null
	,setLanguage: null
	,__class__: com.wiris.quizzes.api.ui.QuizzesComponentBuilder
}
com.wiris.quizzes.impl.QuizzesComponentBuilderImpl = $hxClasses["com.wiris.quizzes.impl.QuizzesComponentBuilderImpl"] = function() {
};
com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.__name__ = ["com","wiris","quizzes","impl","QuizzesComponentBuilderImpl"];
com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.__interfaces__ = [com.wiris.quizzes.api.ui.QuizzesComponentBuilder];
com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology = function() {
	throw "Not implemented in server technology. This method should be called from client-side.";
}
com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.prototype = {
	replaceFields: function(question,instance,element) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,newAuxiliaryCasField: function(instance,slot) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
		return null;
	}
	,newEmbeddedAnswersEditor: function(question,instance) {
		return new com.wiris.quizzes.impl.EmbeddedAnswersEditorImpl(question,instance);
	}
	,newAuthoringField: function(question,slot,authorAnswer) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
		return null;
	}
	,newAnswerField: function(instance,slot) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
		return null;
	}
	,newAnswerFeedback: function(instance,slot,authorAnswer) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
		return null;
	}
	,getMathViewer: function() {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
		return null;
	}
	,setLanguage: function(lang) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,__class__: com.wiris.quizzes.impl.QuizzesComponentBuilderImpl
}
com.wiris.quizzes.JsQuizzesApiComponentBuilder = $hxClasses["com.wiris.quizzes.JsQuizzesApiComponentBuilder"] = function() {
	this.resourceLoader = com.wiris.quizzes.QuizzesResourceLoader.newInstance();
	var quizzesComponentBuilder = new com.wiris.quizzes.JsQuizzesComponentBuilder(this.resourceLoader);
	var jsComponentBuilder = new com.wiris.system.ui.JsComponentBuilder(this.resourceLoader);
	this.componentBuilder = new com.wiris.util.ui.component.CompoundComponentBuilder();
	this.componentBuilder.addComponentBuilder(quizzesComponentBuilder);
	this.componentBuilder.addComponentBuilder(jsComponentBuilder);
	com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.call(this);
};
com.wiris.quizzes.JsQuizzesApiComponentBuilder.__name__ = ["com","wiris","quizzes","JsQuizzesApiComponentBuilder"];
com.wiris.quizzes.JsQuizzesApiComponentBuilder.__super__ = com.wiris.quizzes.impl.QuizzesComponentBuilderImpl;
com.wiris.quizzes.JsQuizzesApiComponentBuilder.prototype = $extend(com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.prototype,{
	replaceFields: function(question,instance,element) {
		if(question == null) question = com.wiris.quizzes.api.Quizzes.getInstance().newQuestion();
		if(instance == null) instance = com.wiris.quizzes.api.Quizzes.getInstance().newQuestionInstance(question);
		var node = element;
		var filter = new com.wiris.quizzes.JsQuizzesFilter();
		filter.replaceFields(question,instance,node);
	}
	,getMathViewer: function() {
		return new com.wiris.quizzes.HxMathViewer();
	}
	,newAuxiliaryCasField: function(instance,slot) {
		if(instance == null) {
			var question = com.wiris.quizzes.api.Quizzes.getInstance().newQuestion();
			slot = question.addNewSlot();
			instance = com.wiris.quizzes.api.Quizzes.getInstance().newQuestionInstance(question);
		}
		return new com.wiris.quizzes.impl.ui.AuxiliaryCalcInputImpl(instance,slot,this.componentBuilder);
	}
	,newEmbeddedAnswersEditor: function(question,instance) {
		if(question == null) question = com.wiris.quizzes.api.Quizzes.getInstance().newQuestion();
		if(instance == null) instance = com.wiris.quizzes.api.Quizzes.getInstance().newQuestionInstance(question);
		return new com.wiris.quizzes.JsEmbeddedAnswersEditor(question,instance,this.componentBuilder);
	}
	,newAuthoringField: function(question,slot,authorAnswer) {
		if(question == null) question = com.wiris.quizzes.api.Quizzes.getInstance().newQuestion();
		if(slot == null) slot = question.addNewSlot();
		if(authorAnswer == null) authorAnswer = slot.addNewAuthorAnswer("");
		var studioContext = new com.wiris.quizzes.impl.ui.QuizzesStudioContext(question,slot,authorAnswer);
		return new com.wiris.quizzes.impl.ui.AuthoringFieldImpl(studioContext,this.componentBuilder);
	}
	,newAnswerField: function(instance,slot) {
		if(instance == null) {
			var question = com.wiris.quizzes.api.Quizzes.getInstance().newQuestion();
			slot = question.addNewSlot();
			instance = com.wiris.quizzes.api.Quizzes.getInstance().newQuestionInstance(question);
		}
		return new com.wiris.quizzes.impl.ui.AnswerFieldImpl(instance,slot,this.componentBuilder);
	}
	,newAnswerFeedback: function(instance,slot,authorAnswer) {
		var question = this.getQuestionFromInstance(instance);
		if(instance == null) {
			slot = question.addNewSlot();
			authorAnswer = slot.addNewAuthorAnswer("");
			instance = com.wiris.quizzes.api.Quizzes.getInstance().newQuestionInstance(question);
		}
		return new com.wiris.quizzes.impl.ui.AnswerFeedbackImpl(instance,slot,authorAnswer,this.componentBuilder);
	}
	,getQuestionFromInstance: function(instance) {
		var question;
		if(instance == null) question = com.wiris.quizzes.api.Quizzes.getInstance().newQuestion(); else {
			var instanceImpl = js.Boot.__cast(instance , com.wiris.quizzes.impl.QuestionInstanceImpl);
			if(instanceImpl == null) {
				question = com.wiris.quizzes.api.Quizzes.getInstance().newQuestion();
				instanceImpl.question = js.Boot.__cast(question , com.wiris.quizzes.impl.QuestionInternal);
			} else question = instanceImpl.question;
		}
		return question;
	}
	,setLanguage: function(lang) {
		com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().setLanguage(lang);
	}
	,componentBuilder: null
	,resourceLoader: null
	,__class__: com.wiris.quizzes.JsQuizzesApiComponentBuilder
});
com.wiris.quizzes.api.QuizzesBuilder = $hxClasses["com.wiris.quizzes.api.QuizzesBuilder"] = function() {
};
com.wiris.quizzes.api.QuizzesBuilder.__name__ = ["com","wiris","quizzes","api","QuizzesBuilder"];
com.wiris.quizzes.api.QuizzesBuilder.getInstance = function() {
	return com.wiris.quizzes.JsQuizzesBuilder.getInstance();
}
com.wiris.quizzes.api.QuizzesBuilder.prototype = {
	newFeaturedAssertionsRequest: function(question) {
		return null;
	}
	,newFeaturedSyntaxAssertionsRequest: function(question) {
		return null;
	}
	,getResourceUrl: function(name) {
		return null;
	}
	,getQuizzesUIBuilder: function() {
		return null;
	}
	,getConfiguration: function() {
		return null;
	}
	,getMathFilter: function() {
		return null;
	}
	,getQuizzesService: function() {
		return null;
	}
	,newGradeRequest: function(question,instance) {
		return null;
	}
	,newFeedbackRequest: function(html,question,instance) {
		return null;
	}
	,newEvalMultipleAnswersRequest: function(correctAnswer,studentAnswer,question,instance) {
		return null;
	}
	,newEvalRequest: function(correctAnswer,studentAnswer,question,instance) {
		return null;
	}
	,newVariablesRequest: function(html,question,instance) {
		return null;
	}
	,readQuestionInstance: function(xml) {
		return null;
	}
	,readQuestion: function(xml) {
		return null;
	}
	,newQuestionInstanceImpl: function(question) {
		return null;
	}
	,newQuestionInstance: function(question) {
		return this.newQuestionInstanceImpl(question);
	}
	,newQuestion: function() {
		return null;
	}
	,__class__: com.wiris.quizzes.api.QuizzesBuilder
}
com.wiris.quizzes.impl.QuizzesBuilderImpl = $hxClasses["com.wiris.quizzes.impl.QuizzesBuilderImpl"] = function() {
	this.uibuilder = null;
	com.wiris.quizzes.api.QuizzesBuilder.call(this);
};
com.wiris.quizzes.impl.QuizzesBuilderImpl.__name__ = ["com","wiris","quizzes","impl","QuizzesBuilderImpl"];
com.wiris.quizzes.impl.QuizzesBuilderImpl.getInstance = function() {
	if(com.wiris.quizzes.impl.QuizzesBuilderImpl.singleton == null) com.wiris.quizzes.impl.QuizzesBuilderImpl.singleton = new com.wiris.quizzes.impl.QuizzesBuilderImpl();
	return com.wiris.quizzes.impl.QuizzesBuilderImpl.singleton;
}
com.wiris.quizzes.impl.QuizzesBuilderImpl.__super__ = com.wiris.quizzes.api.QuizzesBuilder;
com.wiris.quizzes.impl.QuizzesBuilderImpl.prototype = $extend(com.wiris.quizzes.api.QuizzesBuilder.prototype,{
	setQuestionInInstance: function(question,questionInstance) {
		if(questionInstance == null) questionInstance = new com.wiris.quizzes.impl.QuestionInstanceImpl();
		questionInstance.question = question;
		return questionInstance;
	}
	,getAccessProvider: function() {
		return com.wiris.quizzes.impl.QuizzesImpl.getInstance().getAccessProvider();
	}
	,getLockProvider: function() {
		return com.wiris.quizzes.impl.QuizzesImpl.getInstance().getLockProvider();
	}
	,getVariablesCache: function() {
		return com.wiris.quizzes.impl.QuizzesImpl.getInstance().getVariablesCache();
	}
	,getImagesCache: function() {
		return com.wiris.quizzes.impl.QuizzesImpl.getInstance().getImagesCache();
	}
	,getResourceUrl: function(name) {
		return com.wiris.quizzes.impl.QuizzesImpl.getInstance().getResourceUrl(name);
	}
	,newTranslationRequest: function(q,lang) {
		return com.wiris.quizzes.impl.QuizzesImpl.getInstance().newTranslationRequest(q,lang);
	}
	,newFeedbackRequest: function(html,question,instance) {
		return com.wiris.quizzes.impl.QuizzesImpl.getInstance().newFeedbackRequest(html,this.setQuestionInInstance(question,instance));
	}
	,newEvalMultipleAnswersRequest: function(correctAnswers,userAnswers,question,instance) {
		return com.wiris.quizzes.impl.QuizzesImpl.getInstance().newEvalMultipleAnswersRequest(correctAnswers,userAnswers,question,instance);
	}
	,newEvalRequest: function(correctAnswer,userAnswer,q,qi) {
		var correctAnswers = correctAnswer == null?null:[correctAnswer];
		var userAnswers = userAnswer == null?null:[userAnswer];
		return this.newEvalMultipleAnswersRequest(correctAnswers,userAnswers,q,qi);
	}
	,getConfiguration: function() {
		return com.wiris.quizzes.impl.QuizzesImpl.getInstance().getConfiguration();
	}
	,newVariablesRequest: function(html,question,instance) {
		return com.wiris.quizzes.impl.QuizzesImpl.getInstance().newVariablesRequest(html,this.setQuestionInInstance(question,instance));
	}
	,readQuestionInstance: function(xml) {
		return com.wiris.quizzes.impl.QuizzesImpl.getInstance().readQuestionInstance(xml,this.newQuestion());
	}
	,readQuestion: function(xml) {
		return com.wiris.quizzes.impl.QuizzesImpl.getInstance().readQuestion(xml);
	}
	,getMathFilter: function() {
		return com.wiris.quizzes.impl.QuizzesImpl.getInstance().getMathFilter();
	}
	,getQuizzesService: function() {
		return com.wiris.quizzes.impl.QuizzesImpl.getInstance().getQuizzesService();
	}
	,newQuestionInstanceImpl: function(question) {
		return com.wiris.quizzes.impl.QuizzesImpl.getInstance().newQuestionInstance(question);
	}
	,newQuestion: function() {
		return com.wiris.quizzes.impl.QuizzesImpl.getInstance().newQuestion();
	}
	,getQuizzesUIBuilder: function() {
		if(this.uibuilder == null) this.uibuilder = new com.wiris.quizzes.impl.QuizzesUIBuilderImpl();
		return this.uibuilder;
	}
	,uibuilder: null
	,__class__: com.wiris.quizzes.impl.QuizzesBuilderImpl
});
com.wiris.quizzes.JsQuizzesBuilder = $hxClasses["com.wiris.quizzes.JsQuizzesBuilder"] = function() {
	com.wiris.quizzes.impl.QuizzesBuilderImpl.call(this);
};
com.wiris.quizzes.JsQuizzesBuilder.__name__ = ["com","wiris","quizzes","JsQuizzesBuilder"];
com.wiris.quizzes.JsQuizzesBuilder.singleton = null;
com.wiris.quizzes.JsQuizzesBuilder.getInstance = function() {
	if(com.wiris.quizzes.JsQuizzesBuilder.singleton == null) com.wiris.quizzes.JsQuizzesBuilder.singleton = new com.wiris.quizzes.JsQuizzesBuilder();
	return com.wiris.quizzes.JsQuizzesBuilder.singleton;
}
com.wiris.quizzes.JsQuizzesBuilder.__super__ = com.wiris.quizzes.impl.QuizzesBuilderImpl;
com.wiris.quizzes.JsQuizzesBuilder.prototype = $extend(com.wiris.quizzes.impl.QuizzesBuilderImpl.prototype,{
	getQuizzesService: function() {
		return com.wiris.quizzes.JsQuizzes.getInstance().getQuizzesService();
	}
	,getConfiguration: function() {
		return com.wiris.quizzes.JsQuizzes.getInstance().getConfiguration();
	}
	,__class__: com.wiris.quizzes.JsQuizzesBuilder
});
if(!com.wiris.util.ui) com.wiris.util.ui = {}
if(!com.wiris.util.ui.component) com.wiris.util.ui.component = {}
com.wiris.util.ui.component.ComponentBuilder = $hxClasses["com.wiris.util.ui.component.ComponentBuilder"] = function() { }
com.wiris.util.ui.component.ComponentBuilder.__name__ = ["com","wiris","util","ui","component","ComponentBuilder"];
com.wiris.util.ui.component.ComponentBuilder.prototype = {
	setMainComponentBuilder: null
	,buildComponent: null
	,__class__: com.wiris.util.ui.component.ComponentBuilder
}
if(!com.wiris.system) com.wiris.system = {}
if(!com.wiris.system.ui) com.wiris.system.ui = {}
com.wiris.system.ui.JsComponentBuilder = $hxClasses["com.wiris.system.ui.JsComponentBuilder"] = function(resourceLoader) {
	this.resourceLoader = resourceLoader;
	this.mainBuilder = this;
};
com.wiris.system.ui.JsComponentBuilder.__name__ = ["com","wiris","system","ui","JsComponentBuilder"];
com.wiris.system.ui.JsComponentBuilder.__interfaces__ = [com.wiris.util.ui.component.ComponentBuilder];
com.wiris.system.ui.JsComponentBuilder.prototype = {
	buildComponent: function(component,parent) {
		component.setComponentBuilder(this.mainBuilder);
		var jsComponent = null;
		if(js.Boot.__instanceof(component,com.wiris.util.ui.component.Panel)) {
			if(js.Boot.__instanceof(component,com.wiris.util.ui.component.ContextPanel)) jsComponent = new com.wiris.system.ui.JsContextPanel(js.Boot.__cast(component , com.wiris.util.ui.component.ContextPanel)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.ButtonPanel)) jsComponent = new com.wiris.system.ui.JsButtonPanel(js.Boot.__cast(component , com.wiris.util.ui.component.ButtonPanel)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.PlotterPanel)) jsComponent = new com.wiris.system.ui.JsPlotterPanel(js.Boot.__cast(component , com.wiris.util.ui.component.PlotterPanel),this.resourceLoader); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.OpenIdSignInPanel)) jsComponent = new com.wiris.system.ui.JsOpenIdSignInPanel(js.Boot.__cast(component , com.wiris.util.ui.component.OpenIdSignInPanel),this.resourceLoader); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.FloatingPanel)) jsComponent = new com.wiris.system.ui.JsFloatingPanel(js.Boot.__cast(component , com.wiris.util.ui.component.FloatingPanel)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.DrawingPanel)) jsComponent = new com.wiris.system.ui.JsDrawingPanel(js.Boot.__cast(component , com.wiris.util.ui.component.DrawingPanel)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.TabbedPanel)) jsComponent = new com.wiris.system.ui.JsTabbedPanel(js.Boot.__cast(component , com.wiris.util.ui.component.TabbedPanel),this.resourceLoader); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.OpenFileDialog)) jsComponent = new com.wiris.system.ui.JsOpenFileDialog(js.Boot.__cast(component , com.wiris.util.ui.component.OpenFileDialog)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.ExpansionPanel)) jsComponent = new com.wiris.system.ui.JsExpansionPanel(js.Boot.__cast(component , com.wiris.util.ui.component.ExpansionPanel)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.ResponsiveToolbar)) jsComponent = new com.wiris.system.ui.JsResponsiveToolbar(js.Boot.__cast(component , com.wiris.util.ui.component.ResponsiveToolbar)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.DrawerPanel)) jsComponent = new com.wiris.system.ui.JsDrawerPanel(js.Boot.__cast(component , com.wiris.util.ui.component.DrawerPanel)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.ActivityContainer)) jsComponent = new com.wiris.system.ui.JsActivityContainer(js.Boot.__cast(component , com.wiris.util.ui.component.ActivityContainer)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.DialogStack)) jsComponent = new com.wiris.system.ui.JsDialogStack(js.Boot.__cast(component , com.wiris.util.ui.component.DialogStack)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.Window)) jsComponent = new com.wiris.system.ui.JsWindow(js.Boot.__cast(component , com.wiris.util.ui.component.Window)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.CheckBox)) jsComponent = new com.wiris.system.ui.JsCheckBox(js.Boot.__cast(component , com.wiris.util.ui.component.CheckBox)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.RadioButton)) jsComponent = new com.wiris.system.ui.JsRadioButton(js.Boot.__cast(component , com.wiris.util.ui.component.RadioButton)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.BorderPanel)) jsComponent = new com.wiris.system.ui.JsBorderPanel(js.Boot.__cast(component , com.wiris.util.ui.component.BorderPanel)); else jsComponent = new com.wiris.system.ui.JsPanel(js.Boot.__cast(component , com.wiris.util.ui.component.Panel));
		} else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.Button)) {
			if(js.Boot.__instanceof(component,com.wiris.util.ui.component.Dropdown)) jsComponent = new com.wiris.system.ui.JsDropdown(js.Boot.__cast(component , com.wiris.util.ui.component.Dropdown),this.resourceLoader); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.SignInButton)) jsComponent = new com.wiris.system.ui.JsSignInButton(js.Boot.__cast(component , com.wiris.util.ui.component.SignInButton),this.resourceLoader); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.ContextPanelButton)) jsComponent = new com.wiris.system.ui.JsContextPanelButton(js.Boot.__cast(component , com.wiris.util.ui.component.ContextPanelButton),this.resourceLoader); else jsComponent = new com.wiris.system.ui.JsButton(js.Boot.__cast(component , com.wiris.util.ui.component.Button),this.resourceLoader);
		} else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.Chip)) jsComponent = new com.wiris.system.ui.JsChip(js.Boot.__cast(component , com.wiris.util.ui.component.Chip),this.resourceLoader); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.Switch)) jsComponent = new com.wiris.system.ui.JsSwitch(js.Boot.__cast(component , com.wiris.util.ui.component.Switch)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.TextComponent)) {
			if(js.Boot.__instanceof(component,com.wiris.util.ui.component.DropdownTextField)) jsComponent = new com.wiris.system.ui.JsDropdownTextField(js.Boot.__cast(component , com.wiris.util.ui.component.DropdownTextField)); else jsComponent = new com.wiris.system.ui.JsTextComponent(js.Boot.__cast(component , com.wiris.util.ui.component.TextComponent));
		} else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.Label)) {
			if(js.Boot.__instanceof(component,com.wiris.util.ui.component.CompositeLabel)) jsComponent = new com.wiris.system.ui.JsCompositeLabel(js.Boot.__cast(component , com.wiris.util.ui.component.CompositeLabel)); else jsComponent = new com.wiris.system.ui.JsLabel(js.Boot.__cast(component , com.wiris.util.ui.component.Label));
		} else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.ProgressBar)) jsComponent = new com.wiris.system.ui.JsProgressBar(js.Boot.__cast(component , com.wiris.util.ui.component.ProgressBar)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.ProgressCircle)) jsComponent = new com.wiris.system.ui.JsProgressCircle(js.Boot.__cast(component , com.wiris.util.ui.component.ProgressCircle)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.FormulaViewer)) jsComponent = new com.wiris.system.ui.JsFormulaViewer(js.Boot.__cast(component , com.wiris.util.ui.component.FormulaViewer)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.IconBox)) jsComponent = new com.wiris.system.ui.JsIconBox(js.Boot.__cast(component , com.wiris.util.ui.component.IconBox),this.resourceLoader); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.ImageContainer)) jsComponent = new com.wiris.system.ui.JsImageContainer(js.Boot.__cast(component , com.wiris.util.ui.component.ImageContainer)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.Slider)) jsComponent = new com.wiris.system.ui.JsSlider(js.Boot.__cast(component , com.wiris.util.ui.component.Slider)); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.ShadowComponent)) jsComponent = new com.wiris.system.ui.JsShadowComponent(js.Boot.__cast(component , com.wiris.util.ui.component.ShadowComponent));
		if(jsComponent != null) {
			if(parent != null) jsComponent.setParent(parent);
			jsComponent.getElement();
			return jsComponent;
		}
		return null;
	}
	,setMainComponentBuilder: function(builder) {
		this.mainBuilder = builder;
	}
	,mainBuilder: null
	,resourceLoader: null
	,__class__: com.wiris.system.ui.JsComponentBuilder
}
com.wiris.quizzes.JsQuizzesComponentBuilder = $hxClasses["com.wiris.quizzes.JsQuizzesComponentBuilder"] = function(resourceLoader) {
	com.wiris.system.ui.JsComponentBuilder.call(this,resourceLoader);
};
com.wiris.quizzes.JsQuizzesComponentBuilder.__name__ = ["com","wiris","quizzes","JsQuizzesComponentBuilder"];
com.wiris.quizzes.JsQuizzesComponentBuilder.__super__ = com.wiris.system.ui.JsComponentBuilder;
com.wiris.quizzes.JsQuizzesComponentBuilder.prototype = $extend(com.wiris.system.ui.JsComponentBuilder.prototype,{
	buildComponent: function(component,parent) {
		component.setComponentBuilder(this.mainBuilder);
		var jsComponent = null;
		if(js.Boot.__instanceof(component,com.wiris.quizzes.impl.ui.EmbeddedAuthoringField)) jsComponent = new com.wiris.quizzes.ui.JsEmbeddedAuthoringField(js.Boot.__cast(component , com.wiris.quizzes.impl.ui.EmbeddedAuthoringField)); else if(js.Boot.__instanceof(component,com.wiris.quizzes.impl.ui.component.MathTypeInputComponent)) jsComponent = new com.wiris.quizzes.ui.JsMathTypeInputComponent(js.Boot.__cast(component , com.wiris.quizzes.impl.ui.component.MathTypeInputComponent),this.resourceLoader); else if(js.Boot.__instanceof(component,com.wiris.quizzes.impl.ui.component.GraphInputComponent)) jsComponent = new com.wiris.quizzes.ui.JsGraphInputComponent(js.Boot.__cast(component , com.wiris.quizzes.impl.ui.component.GraphInputComponent),this.resourceLoader); else if(js.Boot.__instanceof(component,com.wiris.quizzes.impl.ui.component.CalcMeInputComponent)) jsComponent = new com.wiris.quizzes.ui.JsCalcMeInputComponent(js.Boot.__cast(component , com.wiris.quizzes.impl.ui.component.CalcMeInputComponent)); else if(js.Boot.__instanceof(component,com.wiris.quizzes.impl.ui.component.WirisCasInputComponent)) jsComponent = new com.wiris.quizzes.ui.JsWirisCasInputComponent(js.Boot.__cast(component , com.wiris.quizzes.impl.ui.component.WirisCasInputComponent)); else if(js.Boot.__instanceof(component,com.wiris.quizzes.impl.ui.component.MathTextField)) {
			if(js.Boot.__instanceof(component,com.wiris.quizzes.impl.ui.component.PopupTextField)) {
				if(js.Boot.__instanceof(component,com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField)) jsComponent = new com.wiris.quizzes.ui.JsQuizzesStudioPopupTextField(js.Boot.__cast(component , com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField)); else jsComponent = new com.wiris.quizzes.ui.JsPopupTextField(js.Boot.__cast(component , com.wiris.quizzes.impl.ui.component.PopupTextField));
			} else jsComponent = new com.wiris.quizzes.ui.JsMathTextField(js.Boot.__cast(component , com.wiris.quizzes.impl.ui.component.MathTextField));
		} else if(js.Boot.__instanceof(component,com.wiris.quizzes.impl.ui.component.MathLabel)) jsComponent = new com.wiris.quizzes.ui.JsMathLabel(js.Boot.__cast(component , com.wiris.quizzes.impl.ui.component.MathLabel)); else if(js.Boot.__instanceof(component,com.wiris.quizzes.impl.ui.AnswerFieldImpl)) jsComponent = new com.wiris.quizzes.ui.JsAnswerFieldComponent(js.Boot.__cast(component , com.wiris.quizzes.impl.ui.AnswerFieldImpl)); else if(js.Boot.__instanceof(component,com.wiris.quizzes.impl.ui.AuthoringFieldImpl)) jsComponent = new com.wiris.quizzes.ui.JsAuthoringFieldComponent(js.Boot.__cast(component , com.wiris.quizzes.impl.ui.AuthoringFieldImpl));
		if(jsComponent != null) {
			if(parent != null) jsComponent.setParent(parent);
			jsComponent.getElement();
			return jsComponent;
		}
		return null;
	}
	,__class__: com.wiris.quizzes.JsQuizzesComponentBuilder
});
com.wiris.quizzes.JsQuizzesFilter = $hxClasses["com.wiris.quizzes.JsQuizzesFilter"] = function() {
	this.defaultInstance = null;
	this.defaultQuestion = null;
	this.builder = com.wiris.quizzes.api.Quizzes.getInstance();
	this.uibuilder = this.builder.getQuizzesComponentBuilder();
};
com.wiris.quizzes.JsQuizzesFilter.__name__ = ["com","wiris","quizzes","JsQuizzesFilter"];
com.wiris.quizzes.JsQuizzesFilter.main = function() {
	if(js.Lib.document.readyState == "complete") com.wiris.quizzes.JsQuizzesFilter.init(); else com.wiris.quizzes.JsDomUtils.addEvent(js.Lib.window,"load",function(e) {
		com.wiris.quizzes.JsQuizzesFilter.init();
	});
	delete Array.prototype.__class__;
}
com.wiris.quizzes.JsQuizzesFilter.init = function() {
	new com.wiris.quizzes.JsQuizzesFilter().run();
}
com.wiris.quizzes.JsQuizzesFilter.prototype = {
	copyStyle: function(oldElement,newElement) {
		var doc = element.ownerDocument;
		var width = com.wiris.quizzes.JsDomUtils.getComputedStyle(doc,oldElement,"width");
		newElement.style.width = width;
	}
	,getSubmitElements: function(elem) {
		var submits = new Array();
		var form = elem.form;
		if(form != null) {
			var markedSubmits = com.wiris.quizzes.JsDomUtils.getElementsByClassName(com.wiris.quizzes.JsQuizzesFilter.CLASS_SUBMIT,null,form);
			if(markedSubmits.length > 0) {
				var submit;
				var _g = 0;
				while(_g < markedSubmits.length) {
					var submit1 = markedSubmits[_g];
					++_g;
					submits.push(submit1);
				}
			} else {
				var inputs = form.getElementsByTagName("input");
				var i;
				var _g1 = 0, _g = inputs.length;
				while(_g1 < _g) {
					var i1 = _g1++;
					if(inputs[i1].getAttribute("type") == "submit") submits.push(inputs[i1]);
				}
			}
		}
		return submits;
	}
	,getUniqueId: function(prefix) {
		var ident = prefix + Std.random(65536);
		while(js.Lib.document.getElementById(ident) != null) ident = prefix + Std.random(65536);
		return ident;
	}
	,getInstanceObject: function(instanceElement) {
		if(instanceElement == null) {
			if(this.defaultInstance == null) this.defaultInstance = com.wiris.quizzes.api.Quizzes.getInstance().newQuestionInstance(com.wiris.quizzes.api.Quizzes.getInstance().newQuestion());
			return this.defaultInstance;
		}
		if(instanceElement.id == null || instanceElement.id == "") instanceElement.id = this.getUniqueId("wirisquestioninstance");
		if(!this.instances.exists(instanceElement.id)) {
			var instance;
			var question;
			if(this.questions.exists(instanceElement.id)) question = this.questions.get(instanceElement.id); else question = com.wiris.quizzes.api.Quizzes.getInstance().newQuestion();
			if(instanceElement.value == "") instance = com.wiris.quizzes.api.Quizzes.getInstance().newQuestionInstance(question); else instance = com.wiris.quizzes.api.Quizzes.getInstance().readQuestionInstance(instanceElement.value,question);
			this.instances.set(instanceElement.id,instance);
		}
		return this.instances.get(instanceElement.id);
	}
	,getQuestionObject: function(questionElement) {
		if(questionElement == null) {
			if(this.defaultQuestion == null) this.defaultQuestion = com.wiris.quizzes.api.Quizzes.getInstance().newQuestion();
			return this.defaultQuestion;
		}
		if(questionElement.id == null || questionElement.id == "") questionElement.id = this.getUniqueId("wirisquestion");
		if(!this.questions.exists(questionElement.id)) {
			var question;
			if(questionElement.value == "") question = com.wiris.quizzes.api.Quizzes.getInstance().newQuestion(); else {
				question = com.wiris.quizzes.api.Quizzes.getInstance().readQuestion(questionElement.value);
				question.getImpl().forceSlotStructure();
			}
			this.questions.set(questionElement.id,question);
		}
		return this.questions.get(questionElement.id);
	}
	,filterAnswerFeedback: function(element,index,question,instance,options) {
		var component = this.createAnswerFeedback(index,question,instance,options,null,null);
		if(component != null) element.parentNode.insertBefore(component.getElement(),element);
	}
	,cloneLastSlotUntilIndexAchieved: function(question,slots,index) {
		if(index < 0 || index < slots.length) return;
		var model = slots.length > 0?slots[slots.length - 1]:null;
		while(slots.length <= index) slots.push(question.addNewSlotFromModel(model));
	}
	,createAnswerFeedback: function(index,question,instance,options,slot,authorAnswer) {
		var component = null;
		var ii = instance;
		var incorrectClass = com.wiris.quizzes.JsDomUtils.hasClassString(options,"wirisincorrect");
		var correctClass = com.wiris.quizzes.JsDomUtils.hasClassString(options,"wiriscorrect");
		var partiallyCorrectClass = com.wiris.quizzes.JsDomUtils.hasClassString(options,"wirispartiallycorrect");
		if(ii.hasEvaluation() || incorrectClass || correctClass || partiallyCorrectClass) {
			var cfg = new com.wiris.quizzes.impl.HtmlUiConfig(options);
			ii.cloneCheckStructureIntoQuestion(question);
			ii.question = question;
			if(slot == null) {
				var slots = question.getSlots();
				this.cloneLastSlotUntilIndexAchieved(question,slots,index);
				slot = slots[index];
			}
			if(authorAnswer == null) {
				var correctAnswer = ii.getMatchingCorrectAnswer(index,question);
				var authorAnswers = slot.getAuthorAnswers();
				var _g = 0;
				while(_g < authorAnswers.length) {
					var aa = authorAnswers[_g];
					++_g;
					var aai = aa;
					if(Std.parseInt(aai.id) == correctAnswer) {
						authorAnswer = aai;
						break;
					}
				}
			}
			component = this.uibuilder.newAnswerFeedback(instance,slot,authorAnswer);
			component.showCorrectAnswerFeedback(cfg.showCorrectAnswerFeedback);
			component.showAssertionsFeedback(cfg.showAssertionsFeedback);
			component.showFieldDecorationFeedback(cfg.showFieldDecorationFeedback);
			if(incorrectClass) component.setAnswerWeight(0.0); else if(partiallyCorrectClass) component.setAnswerWeight(0.5); else if(correctClass) component.setAnswerWeight(1);
		}
		return component;
	}
	,filterAuxiliarCasApplet: function(element,index,question,questionElement,instance,instanceElement,options) {
		var qq = question.getImpl();
		var instanceImpl = instance;
		instanceImpl.question = question;
		var slots = question.getSlots();
		this.cloneLastSlotUntilIndexAchieved(question,slots,index);
		var slot = slots[index];
		if(qq.getProperty(com.wiris.quizzes.api.PropertyName.SHOW_CAS) != com.wiris.quizzes.impl.LocalData.VALUE_SHOW_CAS_FALSE || slot.getProperty(com.wiris.quizzes.api.PropertyName.SHOW_CAS) != com.wiris.quizzes.impl.LocalData.VALUE_SHOW_CAS_FALSE) {
			var component = this.uibuilder.newAuxiliaryCasField(instance,slot);
			component.addQuizzesFieldListener(new com.wiris.quizzes.FieldSynchronizer(element,instanceElement,instance));
			element.parentNode.insertBefore(component.getElement(),element);
		}
	}
	,filterAnswerField: function(element,index,question,questionElement,instance,instanceElement,options,submitElements) {
		var cfg = new com.wiris.quizzes.impl.HtmlUiConfig(options);
		var embedded = com.wiris.quizzes.JsDomUtils.hasClassString(options,"wirisembedded");
		var readOnly = com.wiris.quizzes.JsDomUtils.hasClassString(options,"wirisreadonly");
		if(embedded) {
			var qq = question.getImpl();
			if(qq.getLocalData(com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_INPUT_FIELD) == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_INPUT_FIELD_INLINE_EDITOR) qq.setLocalData(com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_INPUT_FIELD,com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_INPUT_FIELD_PLAIN_TEXT);
		}
		var instanceImpl = instance;
		instanceImpl.question = question;
		var slots = question.getSlots();
		this.cloneLastSlotUntilIndexAchieved(question,slots,index);
		var slot = slots[index];
		var elemValue = element.value;
		if(elemValue != null || elemValue != "") {
			if(elemValue.indexOf("&lt;math") != -1) elemValue = com.wiris.util.xml.WXmlUtils.htmlUnescape(elemValue);
			instance.setSlotAnswer(slot,elemValue);
		}
		var component = this.uibuilder.newAnswerField(instance,slot);
		if(readOnly) component.setReadOnly(readOnly);
		component.addQuizzesFieldListener(new com.wiris.quizzes.FieldSynchronizer(element,instanceElement,instance,submitElements));
		var answerElement = component.getElement();
		if(embedded) component.setEmbeddedAnswerFieldStyle(true);
		if(com.wiris.quizzes.JsDomUtils.hasClassString(options,"wiriscopystyle")) {
			var width = element.clientWidth;
			var size = element.size;
			if(width > component.getComponent().getStyle().getMinWidth()) component.getComponent().getStyle().setMinWidth(width);
			component.setTextInputSize(size);
		}
		element.parentNode.insertBefore(answerElement,element);
		if(com.wiris.quizzes.JsDomUtils.hasClassString(options,"wirisembeddedfeedback")) {
			var authorAnswer = null;
			if(element.getAttribute("wirisauthoranswer") != null) {
				var authorAnswerId = Std.parseInt(element.getAttribute("wirisauthoranswer"));
				var authorAnswers = slot.getAuthorAnswers();
				var _g = 0;
				while(_g < authorAnswers.length) {
					var aa = authorAnswers[_g];
					++_g;
					var aai = aa;
					if(Std.parseInt(aai.id) == authorAnswerId) {
						authorAnswer = aai;
						break;
					}
				}
			}
			var feedback = this.createAnswerFeedback(index,question,instance,options,slot,authorAnswer);
			if(feedback != null) feedback.setEmbedded(component);
		}
		if(instanceElement != null) this.numUserAnswers.set(instanceElement.id,this.numUserAnswers.exists(instanceElement.id)?this.numUserAnswers.get(instanceElement.id) + 1:1);
	}
	,findAuthorAnswer: function(s,index) {
		var authorAnswers = s.getAuthorAnswers();
		var _g = 0;
		while(_g < authorAnswers.length) {
			var aa = authorAnswers[_g];
			++_g;
			var aai = aa;
			if(Std.parseInt(aai.id) == index) return aai;
		}
		return null;
	}
	,filterAuthoringField: function(element,index,question,questionElement,instance,instanceElement,options) {
		var cfg = new com.wiris.quizzes.impl.HtmlUiConfig(options);
		if(cfg.optOpenAnswer && element.value != null && element.value.length > 0) question.setCorrectAnswer(index,element.value);
		var slotId = -1;
		if(element.getAttribute("wirisslot") != null) slotId = Std.parseInt(element.getAttribute("wirisslot"));
		var slot = null;
		var authorAnswer = null;
		var slots = question.getSlots();
		if(slotId >= 0 && slots.length > slotId) {
			slot = slots[slotId];
			authorAnswer = this.findAuthorAnswer(slot,index);
		} else {
			var _g = 0;
			while(_g < slots.length) {
				var s = slots[_g];
				++_g;
				authorAnswer = this.findAuthorAnswer(s,index);
				if(authorAnswer != null) {
					slot = s;
					break;
				}
			}
		}
		if(slot == null) slot = question.addNewSlot();
		if(authorAnswer == null) while(authorAnswer == null || Std.parseInt(authorAnswer.id) < index) authorAnswer = slot.addNewAuthorAnswer("");
		var component = this.uibuilder.newAuthoringField(question,slot,authorAnswer);
		if(com.wiris.quizzes.JsDomUtils.hasClassString(options,"wirisstudio")) {
			component.setFieldType(com.wiris.quizzes.api.ui.AuthoringFieldType.STUDIO);
			component.showGradingCriteria(cfg.gradingCriteria);
			component.showVariablesDefinition(cfg.variablesDefinition);
			component.showCorrectAnswer(cfg.optOpenAnswer);
			component.showAuxiliaryCas(cfg.optAuxiliaryCas);
			component.showAuxiliaryCasReplaceEditor(cfg.optAuxiliaryCasReplaceEditor);
			component.showAuxiliaryTextInput(cfg.optAuxiliaryTextInput);
			component.showGradingFunction(cfg.optGradingFunction);
			component.showGraphicSyntax(cfg.optGraphicSyntax);
			component.showAnswerFieldPlainText(cfg.optAnswerFieldPlainText);
			component.showAnswerFieldPopupEditor(cfg.optAnswerFieldPopupEditor);
			component.showAnswerFieldInlineEditor(cfg.optAnswerFieldInlineEditor);
		}
		component.addQuizzesFieldListener(new com.wiris.quizzes.FieldSynchronizer(element,questionElement,question));
		element.parentNode.insertBefore(component.getElement(),element);
		if(questionElement != null) {
			if(cfg.optOpenAnswer) this.numCorrectAnswers.set(questionElement.id,this.numCorrectAnswers.exists(questionElement.id)?this.numCorrectAnswers.get(questionElement.id) + 1:1); else this.numCorrectAnswers.set(questionElement.id,1);
		}
	}
	,filterQuestion: function(element,index,question,instance,options) {
		var qq = question.getImpl();
		if(this.numCorrectAnswers.exists(element.id) && qq.correctAnswers != null && qq.correctAnswers.length > 0) {
			var i = qq.correctAnswers.length - 1;
			var n = this.numCorrectAnswers.get(element.id);
			while(i >= n) {
				qq.removeCorrectAnswer(i);
				i--;
			}
		}
		element.value = question.serialize();
	}
	,filterQuestionInstance: function(element,index,question,instance,options) {
		var ii = instance;
		if(this.numUserAnswers.exists(element.id)) {
			var i = ii.userData.answers.length - 1;
			var n = this.numUserAnswers.get(element.id);
			while(i >= n) {
				HxOverrides.remove(ii.userData.answers,ii.userData.answers[i]);
				i = ii.userData.answers.length - 1;
			}
		}
		element.value = instance.serialize();
	}
	,getFormElement: function(elem) {
		var nodeNames = ["input","textarea"];
		var _g = 0;
		while(_g < nodeNames.length) {
			var name = nodeNames[_g];
			++_g;
			if(elem.nodeName.toLowerCase() == name) return elem;
		}
		var _g = 0;
		while(_g < nodeNames.length) {
			var name = nodeNames[_g];
			++_g;
			var inputs = elem.getElementsByTagName(name);
			if(inputs.length > 0) return inputs[0];
		}
		return elem;
	}
	,filterFields: function(className,root) {
		var elementsLive = com.wiris.quizzes.JsDomUtils.getElementsByClassName(className,null,root);
		var i;
		var index = 0;
		var currentQuestionIndex = 0;
		var lastQuestionElement = null;
		var elements = new Array();
		var _g = 0;
		while(_g < elementsLive.length) {
			var element = elementsLive[_g];
			++_g;
			elements.push(element);
		}
		var embeddedAnswersEditor = null;
		var _g1 = 0, _g = elements.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			var options = elements[i1].className;
			var element = this.getFormElement(elements[i1]);
			if(!com.wiris.quizzes.JsDomUtils.hasClass(element,"wirisprocessed")) {
				var questionElement = null;
				if(this.defaultQuestion == null) questionElement = com.wiris.quizzes.JsDomUtils.getNearestElementByClassName(element,com.wiris.quizzes.JsQuizzesFilter.CLASS_QUESTION);
				var question = this.getQuestionObject(questionElement);
				var instanceElement = null;
				if(this.defaultInstance == null) instanceElement = com.wiris.quizzes.JsDomUtils.getNearestElementByClassName(element,com.wiris.quizzes.JsQuizzesFilter.CLASS_QUESTION_INSTANCE);
				var instance = this.getInstanceObject(instanceElement);
				var submitElements = this.getSubmitElements(element);
				if(lastQuestionElement != questionElement) {
					index = 0;
					currentQuestionIndex++;
				}
				lastQuestionElement = questionElement;
				try {
					switch(className) {
					case com.wiris.quizzes.JsQuizzesFilter.CLASS_LANG:
						this.uibuilder.setLanguage(element.value);
						break;
					case com.wiris.quizzes.JsQuizzesFilter.CLASS_AUTHOR_FIELD:
						this.filterAuthoringField(element,index,question,questionElement,instance,instanceElement,options);
						break;
					case com.wiris.quizzes.JsQuizzesFilter.CLASS_ANSWER_FIELD:
						this.filterAnswerField(element,index,question,questionElement,instance,instanceElement,options,submitElements);
						break;
					case com.wiris.quizzes.JsQuizzesFilter.CLASS_AUXILIAR_CAS_APPLET:
						this.filterAuxiliarCasApplet(element,index,question,questionElement,instance,instanceElement,options);
						break;
					case com.wiris.quizzes.JsQuizzesFilter.CLASS_ANSWER_FEEDBACK:
						this.filterAnswerFeedback(element,index,question,instance,options);
						break;
					case com.wiris.quizzes.JsQuizzesFilter.CLASS_QUESTION:
						this.filterQuestion(element,index,question,instance,options);
						break;
					case com.wiris.quizzes.JsQuizzesFilter.CLASS_QUESTION_INSTANCE:
						this.filterQuestionInstance(element,index,question,instance,options);
						break;
					}
				} catch( e ) {
					com.wiris.quizzes.JsDomUtils.addClass(element,"wiriserrorprocessing");
					haxe.Log.trace("An error occurred processing the field with class name " + className + " and index " + index + ".",{ fileName : "JsQuizzesFilter.hx", lineNumber : 253, className : "com.wiris.quizzes.JsQuizzesFilter", methodName : "filterFields"});
					haxe.Log.trace(e,{ fileName : "JsQuizzesFilter.hx", lineNumber : 254, className : "com.wiris.quizzes.JsQuizzesFilter", methodName : "filterFields"});
				}
				element.style.display = "none";
				com.wiris.quizzes.JsDomUtils.addClass(element,"wirisprocessed");
				index++;
			}
		}
	}
	,loadCSS: function() {
		if(!com.wiris.system.JsDOMUtils.existsCSS(js.Lib.document,"wirisquizzes.css")) {
			var quizzesStyles = js.Lib.document.createElement("link");
			quizzesStyles.setAttribute("type","text/css");
			quizzesStyles.setAttribute("rel","stylesheet");
			quizzesStyles.setAttribute("href",com.wiris.quizzes.api.Quizzes.getInstance().getResourceUrl("wirisquizzes.css"));
			js.Lib.document.getElementsByTagName("head")[0].appendChild(quizzesStyles);
			var serviceFonts = js.Lib.document.createElement("style");
			serviceFonts.setAttribute("type","text/css");
			serviceFonts.innerHTML = "@font-face { font-family: 'Material Icons'; font-weight: 400; font-style: normal; src: url('" + com.wiris.quizzes.api.Quizzes.getInstance().getResourceUrl("fonts/MaterialIcons-Regular.eot") + "'); src: url('" + com.wiris.quizzes.api.Quizzes.getInstance().getResourceUrl("fonts/MaterialIcons-Regular.eot#iefix") + "') format('eot'), url('" + com.wiris.quizzes.api.Quizzes.getInstance().getResourceUrl("fonts/MaterialIcons-Regular.woff") + "') format('woff'), url('" + com.wiris.quizzes.api.Quizzes.getInstance().getResourceUrl("fonts/MaterialIcons-Regular.ttf&v=4.0.0") + "') format('truetype'), url('" + com.wiris.quizzes.api.Quizzes.getInstance().getResourceUrl("fonts/MaterialIcons-Regular.svg&v=4.0.0") + "') format('svg'); }";
			js.Lib.document.getElementsByTagName("head")[0].appendChild(serviceFonts);
		}
		if(!com.wiris.system.JsDOMUtils.existsCSS(js.Lib.document,"util.css")) {
			var wirisStyles = js.Lib.document.createElement("link");
			wirisStyles.setAttribute("type","text/css");
			wirisStyles.setAttribute("rel","stylesheet");
			wirisStyles.setAttribute("href",com.wiris.quizzes.api.Quizzes.getInstance().getResourceUrl("util.css"));
			js.Lib.document.getElementsByTagName("head")[0].appendChild(wirisStyles);
		}
	}
	,replaceFields: function(question,instance,element) {
		this.defaultQuestion = question;
		this.defaultInstance = instance;
		this.questions = new Hash();
		this.instances = new Hash();
		this.numCorrectAnswers = new Hash();
		this.numUserAnswers = new Hash();
		this.filterFields(com.wiris.quizzes.JsQuizzesFilter.CLASS_LANG,element);
		this.filterFields(com.wiris.quizzes.JsQuizzesFilter.CLASS_AUTHOR_FIELD,element);
		this.filterFields(com.wiris.quizzes.JsQuizzesFilter.CLASS_ANSWER_FIELD,element);
		this.filterFields(com.wiris.quizzes.JsQuizzesFilter.CLASS_AUXILIAR_CAS_APPLET,element);
		this.filterFields(com.wiris.quizzes.JsQuizzesFilter.CLASS_QUESTION,element);
		this.filterFields(com.wiris.quizzes.JsQuizzesFilter.CLASS_QUESTION_INSTANCE,element);
		this.filterFields(com.wiris.quizzes.JsQuizzesFilter.CLASS_ANSWER_FEEDBACK,element);
	}
	,loadQuizzesFields: function() {
		var _g = this;
		if(com.wiris.system.ui.JsComponent.isCSSLoaded()) {
			this.replaceFields(this.defaultQuestion,this.defaultInstance,null);
			this.uibuilder.getMathViewer().filterConstructions(js.Lib.document);
		} else haxe.Timer.delay(function() {
			_g.loadQuizzesFields();
		},200);
	}
	,run: function() {
		this.loadCSS();
		this.loadQuizzesFields();
	}
	,uibuilder: null
	,builder: null
	,numUserAnswers: null
	,numCorrectAnswers: null
	,defaultInstance: null
	,defaultQuestion: null
	,instances: null
	,questions: null
	,__class__: com.wiris.quizzes.JsQuizzesFilter
}
com.wiris.quizzes.api.ui.QuizzesFieldListener = $hxClasses["com.wiris.quizzes.api.ui.QuizzesFieldListener"] = function() { }
com.wiris.quizzes.api.ui.QuizzesFieldListener.__name__ = ["com","wiris","quizzes","api","ui","QuizzesFieldListener"];
com.wiris.quizzes.api.ui.QuizzesFieldListener.prototype = {
	contentChangeStarted: null
	,contentChanged: null
	,__class__: com.wiris.quizzes.api.ui.QuizzesFieldListener
}
com.wiris.quizzes.FieldSynchronizer = $hxClasses["com.wiris.quizzes.FieldSynchronizer"] = function(element,questionElement,question,submitElements) {
	this.element = element;
	this.questionElement = questionElement;
	this.question = question;
	this.submitElements = submitElements;
};
com.wiris.quizzes.FieldSynchronizer.__name__ = ["com","wiris","quizzes","FieldSynchronizer"];
com.wiris.quizzes.FieldSynchronizer.__interfaces__ = [com.wiris.quizzes.api.ui.QuizzesFieldListener];
com.wiris.quizzes.FieldSynchronizer.prototype = {
	contentChangeStarted: function(source) {
		if(this.submitElements != null) {
			var elem;
			var _g = 0, _g1 = this.submitElements;
			while(_g < _g1.length) {
				var elem1 = _g1[_g];
				++_g;
				elem1.disabled = true;
			}
		}
	}
	,contentChanged: function(source) {
		this.element.value = source.getValue();
		if(this.questionElement != null && this.question != null) this.questionElement.value = this.question.serialize();
		if(this.submitElements != null) {
			var elem;
			var _g = 0, _g1 = this.submitElements;
			while(_g < _g1.length) {
				var elem1 = _g1[_g];
				++_g;
				elem1.disabled = false;
			}
		}
	}
	,submitElements: null
	,question: null
	,questionElement: null
	,element: null
	,__class__: com.wiris.quizzes.FieldSynchronizer
}
com.wiris.system.ResourceLoader = $hxClasses["com.wiris.system.ResourceLoader"] = function() {
	com.wiris.system.ResourceLoader.initialize();
	this.basePath = "";
};
com.wiris.system.ResourceLoader.__name__ = ["com","wiris","system","ResourceLoader"];
com.wiris.system.ResourceLoader.resourcesCache = null;
com.wiris.system.ResourceLoader.initialize = function() {
	if(com.wiris.system.ResourceLoader.resourcesCache == null) com.wiris.system.ResourceLoader.resourcesCache = new Hash();
}
com.wiris.system.ResourceLoader.newInstance = function(basePath) {
	var resourceLoader = new com.wiris.system.ResourceLoader();
	if(basePath.length > 0 && !StringTools.endsWith(basePath,"/")) basePath += "/";
	resourceLoader.basePath = basePath;
	return resourceLoader;
}
com.wiris.system.ResourceLoader.prototype = {
	getPath: function(path) {
		path += "?v=" + this.loadResource("version.txt");
		if(StringTools.startsWith(path,"http://") || StringTools.startsWith(path,"https://")) return path;
		return this.basePath + path;
	}
	,loadStaticResource: function(path) {
		if(path == "editor_definition.xml") return com.wiris.system.ResourceLoader.editorDefinition;
		if(path == "characters.xml") return com.wiris.system.ResourceLoader.charactersDefinition;
		if(path == "version.txt") {
			if(com.wiris.system.ResourceLoader.version == null) {
			}
			return com.wiris.system.ResourceLoader.version;
		}
		if(path == "font_adjust.xml") return com.wiris.system.ResourceLoader.fontAdjust;
		if(StringTools.startsWith(path,"lang/")) {
			var lang = HxOverrides.substr(path,5,path.lastIndexOf(".") - 5);
			if(com.wiris.system.ResourceLoader.translations[lang]) return com.wiris.system.ResourceLoader.translations[lang];
			lang = lang.toLowerCase();
			lang = lang.split("-").join("_");
			if(com.wiris.system.ResourceLoader.translations[lang]) return com.wiris.system.ResourceLoader.translations[lang];
			lang = HxOverrides.substr(lang,0,2);
			if(com.wiris.system.ResourceLoader.translations[lang]) return com.wiris.system.ResourceLoader.translations[lang];
		}
		return null;
	}
	,loadResource: function(path) {
		var staticResource = this.loadStaticResource(path);
		if(staticResource != null) return staticResource;
		staticResource = haxe.Resource.getString(path);
		if(staticResource != null) return staticResource;
		return null;
	}
	,basePath: null
	,__class__: com.wiris.system.ResourceLoader
}
com.wiris.quizzes.QuizzesResourceLoader = $hxClasses["com.wiris.quizzes.QuizzesResourceLoader"] = function() {
	com.wiris.system.ResourceLoader.call(this);
};
com.wiris.quizzes.QuizzesResourceLoader.__name__ = ["com","wiris","quizzes","QuizzesResourceLoader"];
com.wiris.quizzes.QuizzesResourceLoader.newInstance = function() {
	var resourceLoader = new com.wiris.quizzes.QuizzesResourceLoader();
	if(com.wiris.quizzes.impl.ConfigurationImpl.getInstance().get(com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_STATIC) == "true") resourceLoader.basePath = com.wiris.system.JsDOMUtils.findServicePath("quizzes.js") + "/"; else {
		var proxyUrl = com.wiris.quizzes.impl.ConfigurationImpl.getInstance().get(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL);
		if(StringTools.startsWith(proxyUrl,"http://") || StringTools.startsWith(proxyUrl,"https://")) resourceLoader.basePath = proxyUrl + "?service=resource&name="; else resourceLoader.basePath = com.wiris.system.JsDOMUtils.findServicePath(proxyUrl) + "/" + proxyUrl + "?service=resource&name=";
	}
	return resourceLoader;
}
com.wiris.quizzes.QuizzesResourceLoader.__super__ = com.wiris.system.ResourceLoader;
com.wiris.quizzes.QuizzesResourceLoader.prototype = $extend(com.wiris.system.ResourceLoader.prototype,{
	getPath: function(path) {
		path += (com.wiris.quizzes.impl.ConfigurationImpl.getInstance().get(com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_STATIC) == "true"?"?":"&") + "v=" + com.wiris.quizzes.impl.ConfigurationImpl.getInstance().get(com.wiris.quizzes.api.ConfigurationKeys.VERSION);
		if(StringTools.startsWith(path,"http://") || StringTools.startsWith(path,"https://")) return path;
		return this.basePath + path;
	}
	,__class__: com.wiris.quizzes.QuizzesResourceLoader
});
com.wiris.quizzes.api.AssertionCheck = $hxClasses["com.wiris.quizzes.api.AssertionCheck"] = function() { }
com.wiris.quizzes.api.AssertionCheck.__name__ = ["com","wiris","quizzes","api","AssertionCheck"];
com.wiris.quizzes.api.AssertionCheck.prototype = {
	getValue: null
	,getAssertionName: null
	,__class__: com.wiris.quizzes.api.AssertionCheck
}
com.wiris.quizzes.api.Serializable = $hxClasses["com.wiris.quizzes.api.Serializable"] = function() { }
com.wiris.quizzes.api.Serializable.__name__ = ["com","wiris","quizzes","api","Serializable"];
com.wiris.quizzes.api.Serializable.prototype = {
	serialize: null
	,__class__: com.wiris.quizzes.api.Serializable
}
com.wiris.quizzes.api.AuthorAnswer = $hxClasses["com.wiris.quizzes.api.AuthorAnswer"] = function() { }
com.wiris.quizzes.api.AuthorAnswer.__name__ = ["com","wiris","quizzes","api","AuthorAnswer"];
com.wiris.quizzes.api.AuthorAnswer.__interfaces__ = [com.wiris.quizzes.api.Serializable];
com.wiris.quizzes.api.AuthorAnswer.prototype = {
	getValueAsMathML: null
	,copy: null
	,setWeight: null
	,getWeight: null
	,removeValidation: null
	,getValidation: null
	,addNewValidation: null
	,getValidations: null
	,getComparison: null
	,setComparison: null
	,setValue: null
	,getFilterableValue: null
	,getValue: null
	,__class__: com.wiris.quizzes.api.AuthorAnswer
}
com.wiris.quizzes.api.Configuration = $hxClasses["com.wiris.quizzes.api.Configuration"] = function() { }
com.wiris.quizzes.api.Configuration.__name__ = ["com","wiris","quizzes","api","Configuration"];
com.wiris.quizzes.api.Configuration.prototype = {
	set: null
	,get: null
	,__class__: com.wiris.quizzes.api.Configuration
}
com.wiris.quizzes.api.ConfigurationKeys = $hxClasses["com.wiris.quizzes.api.ConfigurationKeys"] = function() { }
com.wiris.quizzes.api.ConfigurationKeys.__name__ = ["com","wiris","quizzes","api","ConfigurationKeys"];
com.wiris.quizzes.api.MathFilter = $hxClasses["com.wiris.quizzes.api.MathFilter"] = function() { }
com.wiris.quizzes.api.MathFilter.__name__ = ["com","wiris","quizzes","api","MathFilter"];
com.wiris.quizzes.api.MathFilter.prototype = {
	filter: null
	,__class__: com.wiris.quizzes.api.MathFilter
}
com.wiris.quizzes.api.PropertyName = $hxClasses["com.wiris.quizzes.api.PropertyName"] = { __ename__ : ["com","wiris","quizzes","api","PropertyName"], __constructs__ : ["STUDENT_ANSWER_PARAMETER","STUDENT_ANSWER_PARAMETER_NAME","ANSWER_FIELD_TYPE","COMPOUND_ANSWER","COMPOUND_ANSWER_GRADE","COMPOUND_ANSWER_GRADE_DISTRIBUTION","SHOW_CAS","CAS_SESSION","SHOW_AUXILIARY_TEXT_INPUT","AUXILIARY_TEXT","AUXILIARY_CAS_HIDE_FILE_MENU","USER_ID","GRAPH_TOOLBAR","HANDWRITING_CONSTRAINTS","ELEMENTS_TO_HANDWRITE","GRAPH_LOCK_INITIAL_CONTENT","GRAPH_SHOW_NAME_IN_LABEL","GRAPH_SHOW_VALUE_IN_LABEL","GRAPH_MAGNETIC_GRID"] }
com.wiris.quizzes.api.PropertyName.STUDENT_ANSWER_PARAMETER = ["STUDENT_ANSWER_PARAMETER",0];
com.wiris.quizzes.api.PropertyName.STUDENT_ANSWER_PARAMETER.toString = $estr;
com.wiris.quizzes.api.PropertyName.STUDENT_ANSWER_PARAMETER.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.PropertyName.STUDENT_ANSWER_PARAMETER_NAME = ["STUDENT_ANSWER_PARAMETER_NAME",1];
com.wiris.quizzes.api.PropertyName.STUDENT_ANSWER_PARAMETER_NAME.toString = $estr;
com.wiris.quizzes.api.PropertyName.STUDENT_ANSWER_PARAMETER_NAME.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.PropertyName.ANSWER_FIELD_TYPE = ["ANSWER_FIELD_TYPE",2];
com.wiris.quizzes.api.PropertyName.ANSWER_FIELD_TYPE.toString = $estr;
com.wiris.quizzes.api.PropertyName.ANSWER_FIELD_TYPE.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER = ["COMPOUND_ANSWER",3];
com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER.toString = $estr;
com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE = ["COMPOUND_ANSWER_GRADE",4];
com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE.toString = $estr;
com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE_DISTRIBUTION = ["COMPOUND_ANSWER_GRADE_DISTRIBUTION",5];
com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE_DISTRIBUTION.toString = $estr;
com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE_DISTRIBUTION.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.PropertyName.SHOW_CAS = ["SHOW_CAS",6];
com.wiris.quizzes.api.PropertyName.SHOW_CAS.toString = $estr;
com.wiris.quizzes.api.PropertyName.SHOW_CAS.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.PropertyName.CAS_SESSION = ["CAS_SESSION",7];
com.wiris.quizzes.api.PropertyName.CAS_SESSION.toString = $estr;
com.wiris.quizzes.api.PropertyName.CAS_SESSION.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.PropertyName.SHOW_AUXILIARY_TEXT_INPUT = ["SHOW_AUXILIARY_TEXT_INPUT",8];
com.wiris.quizzes.api.PropertyName.SHOW_AUXILIARY_TEXT_INPUT.toString = $estr;
com.wiris.quizzes.api.PropertyName.SHOW_AUXILIARY_TEXT_INPUT.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.PropertyName.AUXILIARY_TEXT = ["AUXILIARY_TEXT",9];
com.wiris.quizzes.api.PropertyName.AUXILIARY_TEXT.toString = $estr;
com.wiris.quizzes.api.PropertyName.AUXILIARY_TEXT.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.PropertyName.AUXILIARY_CAS_HIDE_FILE_MENU = ["AUXILIARY_CAS_HIDE_FILE_MENU",10];
com.wiris.quizzes.api.PropertyName.AUXILIARY_CAS_HIDE_FILE_MENU.toString = $estr;
com.wiris.quizzes.api.PropertyName.AUXILIARY_CAS_HIDE_FILE_MENU.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.PropertyName.USER_ID = ["USER_ID",11];
com.wiris.quizzes.api.PropertyName.USER_ID.toString = $estr;
com.wiris.quizzes.api.PropertyName.USER_ID.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.PropertyName.GRAPH_TOOLBAR = ["GRAPH_TOOLBAR",12];
com.wiris.quizzes.api.PropertyName.GRAPH_TOOLBAR.toString = $estr;
com.wiris.quizzes.api.PropertyName.GRAPH_TOOLBAR.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.PropertyName.HANDWRITING_CONSTRAINTS = ["HANDWRITING_CONSTRAINTS",13];
com.wiris.quizzes.api.PropertyName.HANDWRITING_CONSTRAINTS.toString = $estr;
com.wiris.quizzes.api.PropertyName.HANDWRITING_CONSTRAINTS.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.PropertyName.ELEMENTS_TO_HANDWRITE = ["ELEMENTS_TO_HANDWRITE",14];
com.wiris.quizzes.api.PropertyName.ELEMENTS_TO_HANDWRITE.toString = $estr;
com.wiris.quizzes.api.PropertyName.ELEMENTS_TO_HANDWRITE.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.PropertyName.GRAPH_LOCK_INITIAL_CONTENT = ["GRAPH_LOCK_INITIAL_CONTENT",15];
com.wiris.quizzes.api.PropertyName.GRAPH_LOCK_INITIAL_CONTENT.toString = $estr;
com.wiris.quizzes.api.PropertyName.GRAPH_LOCK_INITIAL_CONTENT.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.PropertyName.GRAPH_SHOW_NAME_IN_LABEL = ["GRAPH_SHOW_NAME_IN_LABEL",16];
com.wiris.quizzes.api.PropertyName.GRAPH_SHOW_NAME_IN_LABEL.toString = $estr;
com.wiris.quizzes.api.PropertyName.GRAPH_SHOW_NAME_IN_LABEL.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.PropertyName.GRAPH_SHOW_VALUE_IN_LABEL = ["GRAPH_SHOW_VALUE_IN_LABEL",17];
com.wiris.quizzes.api.PropertyName.GRAPH_SHOW_VALUE_IN_LABEL.toString = $estr;
com.wiris.quizzes.api.PropertyName.GRAPH_SHOW_VALUE_IN_LABEL.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.PropertyName.GRAPH_MAGNETIC_GRID = ["GRAPH_MAGNETIC_GRID",18];
com.wiris.quizzes.api.PropertyName.GRAPH_MAGNETIC_GRID.toString = $estr;
com.wiris.quizzes.api.PropertyName.GRAPH_MAGNETIC_GRID.__enum__ = com.wiris.quizzes.api.PropertyName;
com.wiris.quizzes.api.Question = $hxClasses["com.wiris.quizzes.api.Question"] = function() { }
com.wiris.quizzes.api.Question.__name__ = ["com","wiris","quizzes","api","Question"];
com.wiris.quizzes.api.Question.__interfaces__ = [com.wiris.quizzes.api.Serializable];
com.wiris.quizzes.api.Question.prototype = {
	getDeprecationWarnings: null
	,setOption: null
	,addAssertion: null
	,getCorrectAnswersLength: null
	,getCorrectAnswer: null
	,setCorrectAnswer: null
	,getStudentQuestion: null
	,getProperty: null
	,setProperty: null
	,getAlgorithm: null
	,setAlgorithm: null
	,getAnswerFieldType: null
	,setAnswerFieldType: null
	,removeSlot: null
	,addNewSlotFromModel: null
	,addNewSlot: null
	,getSlots: null
	,__class__: com.wiris.quizzes.api.Question
}
com.wiris.quizzes.api.QuestionInstance = $hxClasses["com.wiris.quizzes.api.QuestionInstance"] = function() { }
com.wiris.quizzes.api.QuestionInstance.__name__ = ["com","wiris","quizzes","api","QuestionInstance"];
com.wiris.quizzes.api.QuestionInstance.__interfaces__ = [com.wiris.quizzes.api.Serializable];
com.wiris.quizzes.api.QuestionInstance.prototype = {
	setParameter: null
	,getProperty: null
	,setProperty: null
	,areVariablesReady: null
	,getChecks: null
	,getAssertionChecks: null
	,getStudentAnswersLength: null
	,setSlotAnswer: null
	,getSlotAnswer: null
	,getStudentAnswer: null
	,setStudentAnswer: null
	,setAuxiliaryText: null
	,setAuxiliarText: null
	,setCasSession: null
	,setRandomSeed: null
	,getStudentQuestionInstance: null
	,getCompoundGrade: null
	,getCompoundAnswerGrade: null
	,getGrade: null
	,getAnswerGrade: null
	,expandVariablesText: null
	,expandVariablesMathML: null
	,expandVariables: null
	,isSlotAnswerCorrect: null
	,areAllAnswersCorrect: null
	,isAnswerCorrect: null
	,updateFromStudentQuestionInstance: null
	,update: null
	,__class__: com.wiris.quizzes.api.QuestionInstance
}
com.wiris.quizzes.api.QuestionRequest = $hxClasses["com.wiris.quizzes.api.QuestionRequest"] = function() { }
com.wiris.quizzes.api.QuestionRequest.__name__ = ["com","wiris","quizzes","api","QuestionRequest"];
com.wiris.quizzes.api.QuestionRequest.__interfaces__ = [com.wiris.quizzes.api.Serializable];
com.wiris.quizzes.api.QuestionRequest.prototype = {
	isEmpty: null
	,addMetaProperty: null
	,__class__: com.wiris.quizzes.api.QuestionRequest
}
com.wiris.quizzes.api.QuestionResponse = $hxClasses["com.wiris.quizzes.api.QuestionResponse"] = function() { }
com.wiris.quizzes.api.QuestionResponse.__name__ = ["com","wiris","quizzes","api","QuestionResponse"];
com.wiris.quizzes.api.QuestionResponse.__interfaces__ = [com.wiris.quizzes.api.Serializable];
com.wiris.quizzes.api.QuizzesConstants = $hxClasses["com.wiris.quizzes.api.QuizzesConstants"] = function() {
};
com.wiris.quizzes.api.QuizzesConstants.__name__ = ["com","wiris","quizzes","api","QuizzesConstants"];
com.wiris.quizzes.api.QuizzesConstants.prototype = {
	__class__: com.wiris.quizzes.api.QuizzesConstants
}
com.wiris.quizzes.api.QuizzesService = $hxClasses["com.wiris.quizzes.api.QuizzesService"] = function() { }
com.wiris.quizzes.api.QuizzesService.__name__ = ["com","wiris","quizzes","api","QuizzesService"];
com.wiris.quizzes.api.QuizzesService.prototype = {
	executeAsync: null
	,execute: null
	,__class__: com.wiris.quizzes.api.QuizzesService
}
com.wiris.quizzes.api.QuizzesServiceListener = $hxClasses["com.wiris.quizzes.api.QuizzesServiceListener"] = function() { }
com.wiris.quizzes.api.QuizzesServiceListener.__name__ = ["com","wiris","quizzes","api","QuizzesServiceListener"];
com.wiris.quizzes.api.QuizzesServiceListener.prototype = {
	onResponse: null
	,__class__: com.wiris.quizzes.api.QuizzesServiceListener
}
com.wiris.quizzes.api.Slot = $hxClasses["com.wiris.quizzes.api.Slot"] = function() { }
com.wiris.quizzes.api.Slot.__name__ = ["com","wiris","quizzes","api","Slot"];
com.wiris.quizzes.api.Slot.__interfaces__ = [com.wiris.quizzes.api.Serializable];
com.wiris.quizzes.api.Slot.prototype = {
	getGrammarUrl: null
	,copy: null
	,getAnswerFieldType: null
	,setAnswerFieldType: null
	,setInitialContent: null
	,getInitialContent: null
	,setSyntax: null
	,getSyntax: null
	,getProperty: null
	,setProperty: null
	,removeAuthorAnswer: null
	,addNewAuthorAnswer: null
	,getAuthorAnswers: null
	,__class__: com.wiris.quizzes.api.Slot
}
if(!com.wiris.quizzes.api.assertion) com.wiris.quizzes.api.assertion = {}
com.wiris.quizzes.api.assertion.Comparison = $hxClasses["com.wiris.quizzes.api.assertion.Comparison"] = function() { }
com.wiris.quizzes.api.assertion.Comparison.__name__ = ["com","wiris","quizzes","api","assertion","Comparison"];
com.wiris.quizzes.api.assertion.Comparison.__interfaces__ = [com.wiris.quizzes.api.Serializable];
com.wiris.quizzes.api.assertion.Comparison.prototype = {
	removeParameter: null
	,getParameter: null
	,setParameter: null
	,getName: null
	,__class__: com.wiris.quizzes.api.assertion.Comparison
}
com.wiris.quizzes.api.assertion.ComparisonName = $hxClasses["com.wiris.quizzes.api.assertion.ComparisonName"] = { __ename__ : ["com","wiris","quizzes","api","assertion","ComparisonName"], __constructs__ : ["MATHEMATICALLY_EQUAL","LITERALLY_EQUAL","EQUIVALENT_EQUATIONS","GRADING_FUNCTION","ANY_ANSWER","GRAPHICALLY_EQUAL","SKETCH_EQUAL"] }
com.wiris.quizzes.api.assertion.ComparisonName.MATHEMATICALLY_EQUAL = ["MATHEMATICALLY_EQUAL",0];
com.wiris.quizzes.api.assertion.ComparisonName.MATHEMATICALLY_EQUAL.toString = $estr;
com.wiris.quizzes.api.assertion.ComparisonName.MATHEMATICALLY_EQUAL.__enum__ = com.wiris.quizzes.api.assertion.ComparisonName;
com.wiris.quizzes.api.assertion.ComparisonName.LITERALLY_EQUAL = ["LITERALLY_EQUAL",1];
com.wiris.quizzes.api.assertion.ComparisonName.LITERALLY_EQUAL.toString = $estr;
com.wiris.quizzes.api.assertion.ComparisonName.LITERALLY_EQUAL.__enum__ = com.wiris.quizzes.api.assertion.ComparisonName;
com.wiris.quizzes.api.assertion.ComparisonName.EQUIVALENT_EQUATIONS = ["EQUIVALENT_EQUATIONS",2];
com.wiris.quizzes.api.assertion.ComparisonName.EQUIVALENT_EQUATIONS.toString = $estr;
com.wiris.quizzes.api.assertion.ComparisonName.EQUIVALENT_EQUATIONS.__enum__ = com.wiris.quizzes.api.assertion.ComparisonName;
com.wiris.quizzes.api.assertion.ComparisonName.GRADING_FUNCTION = ["GRADING_FUNCTION",3];
com.wiris.quizzes.api.assertion.ComparisonName.GRADING_FUNCTION.toString = $estr;
com.wiris.quizzes.api.assertion.ComparisonName.GRADING_FUNCTION.__enum__ = com.wiris.quizzes.api.assertion.ComparisonName;
com.wiris.quizzes.api.assertion.ComparisonName.ANY_ANSWER = ["ANY_ANSWER",4];
com.wiris.quizzes.api.assertion.ComparisonName.ANY_ANSWER.toString = $estr;
com.wiris.quizzes.api.assertion.ComparisonName.ANY_ANSWER.__enum__ = com.wiris.quizzes.api.assertion.ComparisonName;
com.wiris.quizzes.api.assertion.ComparisonName.GRAPHICALLY_EQUAL = ["GRAPHICALLY_EQUAL",5];
com.wiris.quizzes.api.assertion.ComparisonName.GRAPHICALLY_EQUAL.toString = $estr;
com.wiris.quizzes.api.assertion.ComparisonName.GRAPHICALLY_EQUAL.__enum__ = com.wiris.quizzes.api.assertion.ComparisonName;
com.wiris.quizzes.api.assertion.ComparisonName.SKETCH_EQUAL = ["SKETCH_EQUAL",6];
com.wiris.quizzes.api.assertion.ComparisonName.SKETCH_EQUAL.toString = $estr;
com.wiris.quizzes.api.assertion.ComparisonName.SKETCH_EQUAL.__enum__ = com.wiris.quizzes.api.assertion.ComparisonName;
com.wiris.quizzes.api.assertion.ComparisonParameterName = $hxClasses["com.wiris.quizzes.api.assertion.ComparisonParameterName"] = { __ename__ : ["com","wiris","quizzes","api","assertion","ComparisonParameterName"], __constructs__ : ["ORDER_MATTERS","REPETITION_MATTERS","TOLERANCE","TOLERANCE_DIGITS","RELATIVE_TOLERANCE","FUNCTION_NAME","MATCH_CASES","MATCH_SPACES","NOT_EVALUATE","FUNCTION_ARGUMENT_MODE","ELEMENTS_TO_GRADE"] }
com.wiris.quizzes.api.assertion.ComparisonParameterName.ORDER_MATTERS = ["ORDER_MATTERS",0];
com.wiris.quizzes.api.assertion.ComparisonParameterName.ORDER_MATTERS.toString = $estr;
com.wiris.quizzes.api.assertion.ComparisonParameterName.ORDER_MATTERS.__enum__ = com.wiris.quizzes.api.assertion.ComparisonParameterName;
com.wiris.quizzes.api.assertion.ComparisonParameterName.REPETITION_MATTERS = ["REPETITION_MATTERS",1];
com.wiris.quizzes.api.assertion.ComparisonParameterName.REPETITION_MATTERS.toString = $estr;
com.wiris.quizzes.api.assertion.ComparisonParameterName.REPETITION_MATTERS.__enum__ = com.wiris.quizzes.api.assertion.ComparisonParameterName;
com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE = ["TOLERANCE",2];
com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE.toString = $estr;
com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE.__enum__ = com.wiris.quizzes.api.assertion.ComparisonParameterName;
com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE_DIGITS = ["TOLERANCE_DIGITS",3];
com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE_DIGITS.toString = $estr;
com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE_DIGITS.__enum__ = com.wiris.quizzes.api.assertion.ComparisonParameterName;
com.wiris.quizzes.api.assertion.ComparisonParameterName.RELATIVE_TOLERANCE = ["RELATIVE_TOLERANCE",4];
com.wiris.quizzes.api.assertion.ComparisonParameterName.RELATIVE_TOLERANCE.toString = $estr;
com.wiris.quizzes.api.assertion.ComparisonParameterName.RELATIVE_TOLERANCE.__enum__ = com.wiris.quizzes.api.assertion.ComparisonParameterName;
com.wiris.quizzes.api.assertion.ComparisonParameterName.FUNCTION_NAME = ["FUNCTION_NAME",5];
com.wiris.quizzes.api.assertion.ComparisonParameterName.FUNCTION_NAME.toString = $estr;
com.wiris.quizzes.api.assertion.ComparisonParameterName.FUNCTION_NAME.__enum__ = com.wiris.quizzes.api.assertion.ComparisonParameterName;
com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_CASES = ["MATCH_CASES",6];
com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_CASES.toString = $estr;
com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_CASES.__enum__ = com.wiris.quizzes.api.assertion.ComparisonParameterName;
com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_SPACES = ["MATCH_SPACES",7];
com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_SPACES.toString = $estr;
com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_SPACES.__enum__ = com.wiris.quizzes.api.assertion.ComparisonParameterName;
com.wiris.quizzes.api.assertion.ComparisonParameterName.NOT_EVALUATE = ["NOT_EVALUATE",8];
com.wiris.quizzes.api.assertion.ComparisonParameterName.NOT_EVALUATE.toString = $estr;
com.wiris.quizzes.api.assertion.ComparisonParameterName.NOT_EVALUATE.__enum__ = com.wiris.quizzes.api.assertion.ComparisonParameterName;
com.wiris.quizzes.api.assertion.ComparisonParameterName.FUNCTION_ARGUMENT_MODE = ["FUNCTION_ARGUMENT_MODE",9];
com.wiris.quizzes.api.assertion.ComparisonParameterName.FUNCTION_ARGUMENT_MODE.toString = $estr;
com.wiris.quizzes.api.assertion.ComparisonParameterName.FUNCTION_ARGUMENT_MODE.__enum__ = com.wiris.quizzes.api.assertion.ComparisonParameterName;
com.wiris.quizzes.api.assertion.ComparisonParameterName.ELEMENTS_TO_GRADE = ["ELEMENTS_TO_GRADE",10];
com.wiris.quizzes.api.assertion.ComparisonParameterName.ELEMENTS_TO_GRADE.toString = $estr;
com.wiris.quizzes.api.assertion.ComparisonParameterName.ELEMENTS_TO_GRADE.__enum__ = com.wiris.quizzes.api.assertion.ComparisonParameterName;
com.wiris.quizzes.api.assertion.Syntax = $hxClasses["com.wiris.quizzes.api.assertion.Syntax"] = function() { }
com.wiris.quizzes.api.assertion.Syntax.__name__ = ["com","wiris","quizzes","api","assertion","Syntax"];
com.wiris.quizzes.api.assertion.Syntax.__interfaces__ = [com.wiris.quizzes.api.Serializable];
com.wiris.quizzes.api.assertion.Syntax.prototype = {
	removeParameter: null
	,getParameter: null
	,setParameter: null
	,getName: null
	,__class__: com.wiris.quizzes.api.assertion.Syntax
}
com.wiris.quizzes.api.assertion.SyntaxName = $hxClasses["com.wiris.quizzes.api.assertion.SyntaxName"] = { __ename__ : ["com","wiris","quizzes","api","assertion","SyntaxName"], __constructs__ : ["MATH","GRAPHIC","STRING"] }
com.wiris.quizzes.api.assertion.SyntaxName.MATH = ["MATH",0];
com.wiris.quizzes.api.assertion.SyntaxName.MATH.toString = $estr;
com.wiris.quizzes.api.assertion.SyntaxName.MATH.__enum__ = com.wiris.quizzes.api.assertion.SyntaxName;
com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC = ["GRAPHIC",1];
com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC.toString = $estr;
com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC.__enum__ = com.wiris.quizzes.api.assertion.SyntaxName;
com.wiris.quizzes.api.assertion.SyntaxName.STRING = ["STRING",2];
com.wiris.quizzes.api.assertion.SyntaxName.STRING.toString = $estr;
com.wiris.quizzes.api.assertion.SyntaxName.STRING.__enum__ = com.wiris.quizzes.api.assertion.SyntaxName;
com.wiris.quizzes.api.assertion.SyntaxParameterName = $hxClasses["com.wiris.quizzes.api.assertion.SyntaxParameterName"] = { __ename__ : ["com","wiris","quizzes","api","assertion","SyntaxParameterName"], __constructs__ : ["CONSTANTS","FUNCTIONS","GROUP_OPERATORS","LIST_OPERATORS","UNITS","UNIT_PREFIXES","MIXED_FRACTIONS","ITEM_SEPARATORS","DECIMAL_SEPARATORS","DIGIT_GROUP_SEPARATORS","NO_BRACKETS_LIST","INTERVALS","RATIO","SCIENTIFIC_NOTATION","GRAPH_MODE"] }
com.wiris.quizzes.api.assertion.SyntaxParameterName.CONSTANTS = ["CONSTANTS",0];
com.wiris.quizzes.api.assertion.SyntaxParameterName.CONSTANTS.toString = $estr;
com.wiris.quizzes.api.assertion.SyntaxParameterName.CONSTANTS.__enum__ = com.wiris.quizzes.api.assertion.SyntaxParameterName;
com.wiris.quizzes.api.assertion.SyntaxParameterName.FUNCTIONS = ["FUNCTIONS",1];
com.wiris.quizzes.api.assertion.SyntaxParameterName.FUNCTIONS.toString = $estr;
com.wiris.quizzes.api.assertion.SyntaxParameterName.FUNCTIONS.__enum__ = com.wiris.quizzes.api.assertion.SyntaxParameterName;
com.wiris.quizzes.api.assertion.SyntaxParameterName.GROUP_OPERATORS = ["GROUP_OPERATORS",2];
com.wiris.quizzes.api.assertion.SyntaxParameterName.GROUP_OPERATORS.toString = $estr;
com.wiris.quizzes.api.assertion.SyntaxParameterName.GROUP_OPERATORS.__enum__ = com.wiris.quizzes.api.assertion.SyntaxParameterName;
com.wiris.quizzes.api.assertion.SyntaxParameterName.LIST_OPERATORS = ["LIST_OPERATORS",3];
com.wiris.quizzes.api.assertion.SyntaxParameterName.LIST_OPERATORS.toString = $estr;
com.wiris.quizzes.api.assertion.SyntaxParameterName.LIST_OPERATORS.__enum__ = com.wiris.quizzes.api.assertion.SyntaxParameterName;
com.wiris.quizzes.api.assertion.SyntaxParameterName.UNITS = ["UNITS",4];
com.wiris.quizzes.api.assertion.SyntaxParameterName.UNITS.toString = $estr;
com.wiris.quizzes.api.assertion.SyntaxParameterName.UNITS.__enum__ = com.wiris.quizzes.api.assertion.SyntaxParameterName;
com.wiris.quizzes.api.assertion.SyntaxParameterName.UNIT_PREFIXES = ["UNIT_PREFIXES",5];
com.wiris.quizzes.api.assertion.SyntaxParameterName.UNIT_PREFIXES.toString = $estr;
com.wiris.quizzes.api.assertion.SyntaxParameterName.UNIT_PREFIXES.__enum__ = com.wiris.quizzes.api.assertion.SyntaxParameterName;
com.wiris.quizzes.api.assertion.SyntaxParameterName.MIXED_FRACTIONS = ["MIXED_FRACTIONS",6];
com.wiris.quizzes.api.assertion.SyntaxParameterName.MIXED_FRACTIONS.toString = $estr;
com.wiris.quizzes.api.assertion.SyntaxParameterName.MIXED_FRACTIONS.__enum__ = com.wiris.quizzes.api.assertion.SyntaxParameterName;
com.wiris.quizzes.api.assertion.SyntaxParameterName.ITEM_SEPARATORS = ["ITEM_SEPARATORS",7];
com.wiris.quizzes.api.assertion.SyntaxParameterName.ITEM_SEPARATORS.toString = $estr;
com.wiris.quizzes.api.assertion.SyntaxParameterName.ITEM_SEPARATORS.__enum__ = com.wiris.quizzes.api.assertion.SyntaxParameterName;
com.wiris.quizzes.api.assertion.SyntaxParameterName.DECIMAL_SEPARATORS = ["DECIMAL_SEPARATORS",8];
com.wiris.quizzes.api.assertion.SyntaxParameterName.DECIMAL_SEPARATORS.toString = $estr;
com.wiris.quizzes.api.assertion.SyntaxParameterName.DECIMAL_SEPARATORS.__enum__ = com.wiris.quizzes.api.assertion.SyntaxParameterName;
com.wiris.quizzes.api.assertion.SyntaxParameterName.DIGIT_GROUP_SEPARATORS = ["DIGIT_GROUP_SEPARATORS",9];
com.wiris.quizzes.api.assertion.SyntaxParameterName.DIGIT_GROUP_SEPARATORS.toString = $estr;
com.wiris.quizzes.api.assertion.SyntaxParameterName.DIGIT_GROUP_SEPARATORS.__enum__ = com.wiris.quizzes.api.assertion.SyntaxParameterName;
com.wiris.quizzes.api.assertion.SyntaxParameterName.NO_BRACKETS_LIST = ["NO_BRACKETS_LIST",10];
com.wiris.quizzes.api.assertion.SyntaxParameterName.NO_BRACKETS_LIST.toString = $estr;
com.wiris.quizzes.api.assertion.SyntaxParameterName.NO_BRACKETS_LIST.__enum__ = com.wiris.quizzes.api.assertion.SyntaxParameterName;
com.wiris.quizzes.api.assertion.SyntaxParameterName.INTERVALS = ["INTERVALS",11];
com.wiris.quizzes.api.assertion.SyntaxParameterName.INTERVALS.toString = $estr;
com.wiris.quizzes.api.assertion.SyntaxParameterName.INTERVALS.__enum__ = com.wiris.quizzes.api.assertion.SyntaxParameterName;
com.wiris.quizzes.api.assertion.SyntaxParameterName.RATIO = ["RATIO",12];
com.wiris.quizzes.api.assertion.SyntaxParameterName.RATIO.toString = $estr;
com.wiris.quizzes.api.assertion.SyntaxParameterName.RATIO.__enum__ = com.wiris.quizzes.api.assertion.SyntaxParameterName;
com.wiris.quizzes.api.assertion.SyntaxParameterName.SCIENTIFIC_NOTATION = ["SCIENTIFIC_NOTATION",13];
com.wiris.quizzes.api.assertion.SyntaxParameterName.SCIENTIFIC_NOTATION.toString = $estr;
com.wiris.quizzes.api.assertion.SyntaxParameterName.SCIENTIFIC_NOTATION.__enum__ = com.wiris.quizzes.api.assertion.SyntaxParameterName;
com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE = ["GRAPH_MODE",14];
com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE.toString = $estr;
com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE.__enum__ = com.wiris.quizzes.api.assertion.SyntaxParameterName;
com.wiris.quizzes.api.assertion.Validation = $hxClasses["com.wiris.quizzes.api.assertion.Validation"] = function() { }
com.wiris.quizzes.api.assertion.Validation.__name__ = ["com","wiris","quizzes","api","assertion","Validation"];
com.wiris.quizzes.api.assertion.Validation.__interfaces__ = [com.wiris.quizzes.api.Serializable];
com.wiris.quizzes.api.assertion.Validation.prototype = {
	removeParameter: null
	,getParameter: null
	,setParameter: null
	,getName: null
	,__class__: com.wiris.quizzes.api.assertion.Validation
}
com.wiris.quizzes.api.assertion.ValidationName = $hxClasses["com.wiris.quizzes.api.assertion.ValidationName"] = { __ename__ : ["com","wiris","quizzes","api","assertion","ValidationName"], __constructs__ : ["CHECK_SYMBOLIC","CHECK_SCIENTIFIC_NOTATION","CHECK_DECIMAL_NOTATION","CHECK_SIMPLIFIED","CHECK_EXPANDED","CHECK_FACTORIZED","CHECK_NO_COMMON_FACTOR","CHECK_COMMON_DENOMINATOR","CHECK_RATIONALIZED","CHECK_MINIMAL_RADICANDS","CHECK_EQUIVALENT_UNITS","CHECK_PRECISION","CHECK_COLOR","CHECK_NO_SUPERFLUOUS","CHECK_LINE_STYLE"] }
com.wiris.quizzes.api.assertion.ValidationName.CHECK_SYMBOLIC = ["CHECK_SYMBOLIC",0];
com.wiris.quizzes.api.assertion.ValidationName.CHECK_SYMBOLIC.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_SYMBOLIC.__enum__ = com.wiris.quizzes.api.assertion.ValidationName;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_SCIENTIFIC_NOTATION = ["CHECK_SCIENTIFIC_NOTATION",1];
com.wiris.quizzes.api.assertion.ValidationName.CHECK_SCIENTIFIC_NOTATION.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_SCIENTIFIC_NOTATION.__enum__ = com.wiris.quizzes.api.assertion.ValidationName;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_DECIMAL_NOTATION = ["CHECK_DECIMAL_NOTATION",2];
com.wiris.quizzes.api.assertion.ValidationName.CHECK_DECIMAL_NOTATION.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_DECIMAL_NOTATION.__enum__ = com.wiris.quizzes.api.assertion.ValidationName;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_SIMPLIFIED = ["CHECK_SIMPLIFIED",3];
com.wiris.quizzes.api.assertion.ValidationName.CHECK_SIMPLIFIED.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_SIMPLIFIED.__enum__ = com.wiris.quizzes.api.assertion.ValidationName;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_EXPANDED = ["CHECK_EXPANDED",4];
com.wiris.quizzes.api.assertion.ValidationName.CHECK_EXPANDED.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_EXPANDED.__enum__ = com.wiris.quizzes.api.assertion.ValidationName;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_FACTORIZED = ["CHECK_FACTORIZED",5];
com.wiris.quizzes.api.assertion.ValidationName.CHECK_FACTORIZED.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_FACTORIZED.__enum__ = com.wiris.quizzes.api.assertion.ValidationName;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_NO_COMMON_FACTOR = ["CHECK_NO_COMMON_FACTOR",6];
com.wiris.quizzes.api.assertion.ValidationName.CHECK_NO_COMMON_FACTOR.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_NO_COMMON_FACTOR.__enum__ = com.wiris.quizzes.api.assertion.ValidationName;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_COMMON_DENOMINATOR = ["CHECK_COMMON_DENOMINATOR",7];
com.wiris.quizzes.api.assertion.ValidationName.CHECK_COMMON_DENOMINATOR.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_COMMON_DENOMINATOR.__enum__ = com.wiris.quizzes.api.assertion.ValidationName;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_RATIONALIZED = ["CHECK_RATIONALIZED",8];
com.wiris.quizzes.api.assertion.ValidationName.CHECK_RATIONALIZED.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_RATIONALIZED.__enum__ = com.wiris.quizzes.api.assertion.ValidationName;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_MINIMAL_RADICANDS = ["CHECK_MINIMAL_RADICANDS",9];
com.wiris.quizzes.api.assertion.ValidationName.CHECK_MINIMAL_RADICANDS.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_MINIMAL_RADICANDS.__enum__ = com.wiris.quizzes.api.assertion.ValidationName;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_EQUIVALENT_UNITS = ["CHECK_EQUIVALENT_UNITS",10];
com.wiris.quizzes.api.assertion.ValidationName.CHECK_EQUIVALENT_UNITS.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_EQUIVALENT_UNITS.__enum__ = com.wiris.quizzes.api.assertion.ValidationName;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION = ["CHECK_PRECISION",11];
com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION.__enum__ = com.wiris.quizzes.api.assertion.ValidationName;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_COLOR = ["CHECK_COLOR",12];
com.wiris.quizzes.api.assertion.ValidationName.CHECK_COLOR.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_COLOR.__enum__ = com.wiris.quizzes.api.assertion.ValidationName;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_NO_SUPERFLUOUS = ["CHECK_NO_SUPERFLUOUS",13];
com.wiris.quizzes.api.assertion.ValidationName.CHECK_NO_SUPERFLUOUS.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_NO_SUPERFLUOUS.__enum__ = com.wiris.quizzes.api.assertion.ValidationName;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_LINE_STYLE = ["CHECK_LINE_STYLE",14];
com.wiris.quizzes.api.assertion.ValidationName.CHECK_LINE_STYLE.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationName.CHECK_LINE_STYLE.__enum__ = com.wiris.quizzes.api.assertion.ValidationName;
com.wiris.quizzes.api.assertion.ValidationParameterName = $hxClasses["com.wiris.quizzes.api.assertion.ValidationParameterName"] = { __ename__ : ["com","wiris","quizzes","api","assertion","ValidationParameterName"], __constructs__ : ["MIN","MAX","RELATIVE","ALLOW_PREFIXES","ELEMENTS_TO_GRADE"] }
com.wiris.quizzes.api.assertion.ValidationParameterName.MIN = ["MIN",0];
com.wiris.quizzes.api.assertion.ValidationParameterName.MIN.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationParameterName.MIN.__enum__ = com.wiris.quizzes.api.assertion.ValidationParameterName;
com.wiris.quizzes.api.assertion.ValidationParameterName.MAX = ["MAX",1];
com.wiris.quizzes.api.assertion.ValidationParameterName.MAX.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationParameterName.MAX.__enum__ = com.wiris.quizzes.api.assertion.ValidationParameterName;
com.wiris.quizzes.api.assertion.ValidationParameterName.RELATIVE = ["RELATIVE",2];
com.wiris.quizzes.api.assertion.ValidationParameterName.RELATIVE.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationParameterName.RELATIVE.__enum__ = com.wiris.quizzes.api.assertion.ValidationParameterName;
com.wiris.quizzes.api.assertion.ValidationParameterName.ALLOW_PREFIXES = ["ALLOW_PREFIXES",3];
com.wiris.quizzes.api.assertion.ValidationParameterName.ALLOW_PREFIXES.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationParameterName.ALLOW_PREFIXES.__enum__ = com.wiris.quizzes.api.assertion.ValidationParameterName;
com.wiris.quizzes.api.assertion.ValidationParameterName.ELEMENTS_TO_GRADE = ["ELEMENTS_TO_GRADE",4];
com.wiris.quizzes.api.assertion.ValidationParameterName.ELEMENTS_TO_GRADE.toString = $estr;
com.wiris.quizzes.api.assertion.ValidationParameterName.ELEMENTS_TO_GRADE.__enum__ = com.wiris.quizzes.api.assertion.ValidationParameterName;
com.wiris.quizzes.api.ui.AnswerFeedback = $hxClasses["com.wiris.quizzes.api.ui.AnswerFeedback"] = function() { }
com.wiris.quizzes.api.ui.AnswerFeedback.__name__ = ["com","wiris","quizzes","api","ui","AnswerFeedback"];
com.wiris.quizzes.api.ui.AnswerFeedback.__interfaces__ = [com.wiris.quizzes.api.ui.QuizzesComponent];
com.wiris.quizzes.api.ui.AnswerFeedback.prototype = {
	setAnswerWeight: null
	,showFieldDecorationFeedback: null
	,showAssertionsFeedback: null
	,showCorrectAnswerFeedback: null
	,removeEmbedded: null
	,setEmbedded: null
	,__class__: com.wiris.quizzes.api.ui.AnswerFeedback
}
com.wiris.quizzes.api.ui.AnswerField = $hxClasses["com.wiris.quizzes.api.ui.AnswerField"] = function() { }
com.wiris.quizzes.api.ui.AnswerField.__name__ = ["com","wiris","quizzes","api","ui","AnswerField"];
com.wiris.quizzes.api.ui.AnswerField.__interfaces__ = [com.wiris.quizzes.api.ui.QuizzesField];
com.wiris.quizzes.api.ui.AnswerField.prototype = {
	reuseComponent: null
	,getAnswerFieldComponent: null
	,setEditorInitialParams: null
	,getFieldType: null
	,__class__: com.wiris.quizzes.api.ui.AnswerField
}
com.wiris.quizzes.api.ui.AnswerFieldComponentListener = $hxClasses["com.wiris.quizzes.api.ui.AnswerFieldComponentListener"] = function() { }
com.wiris.quizzes.api.ui.AnswerFieldComponentListener.__name__ = ["com","wiris","quizzes","api","ui","AnswerFieldComponentListener"];
com.wiris.quizzes.api.ui.AnswerFieldComponentListener.prototype = {
	onGetAnswerFieldComponent: null
	,__class__: com.wiris.quizzes.api.ui.AnswerFieldComponentListener
}
com.wiris.quizzes.api.ui.AnswerFieldType = $hxClasses["com.wiris.quizzes.api.ui.AnswerFieldType"] = { __ename__ : ["com","wiris","quizzes","api","ui","AnswerFieldType"], __constructs__ : ["TEXT_FIELD","INLINE_MATH_EDITOR","POPUP_MATH_EDITOR","INLINE_GRAPH_EDITOR"] }
com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD = ["TEXT_FIELD",0];
com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD.toString = $estr;
com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD.__enum__ = com.wiris.quizzes.api.ui.AnswerFieldType;
com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR = ["INLINE_MATH_EDITOR",1];
com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR.toString = $estr;
com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR.__enum__ = com.wiris.quizzes.api.ui.AnswerFieldType;
com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR = ["POPUP_MATH_EDITOR",2];
com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR.toString = $estr;
com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR.__enum__ = com.wiris.quizzes.api.ui.AnswerFieldType;
com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR = ["INLINE_GRAPH_EDITOR",3];
com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR.toString = $estr;
com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR.__enum__ = com.wiris.quizzes.api.ui.AnswerFieldType;
com.wiris.quizzes.api.ui.AuthoringFieldType = $hxClasses["com.wiris.quizzes.api.ui.AuthoringFieldType"] = { __ename__ : ["com","wiris","quizzes","api","ui","AuthoringFieldType"], __constructs__ : ["STUDIO","INLINE_STUDIO","INLINE_MATH_EDITOR","EMBEDDED_ANSWERS_EDITOR"] }
com.wiris.quizzes.api.ui.AuthoringFieldType.STUDIO = ["STUDIO",0];
com.wiris.quizzes.api.ui.AuthoringFieldType.STUDIO.toString = $estr;
com.wiris.quizzes.api.ui.AuthoringFieldType.STUDIO.__enum__ = com.wiris.quizzes.api.ui.AuthoringFieldType;
com.wiris.quizzes.api.ui.AuthoringFieldType.INLINE_STUDIO = ["INLINE_STUDIO",1];
com.wiris.quizzes.api.ui.AuthoringFieldType.INLINE_STUDIO.toString = $estr;
com.wiris.quizzes.api.ui.AuthoringFieldType.INLINE_STUDIO.__enum__ = com.wiris.quizzes.api.ui.AuthoringFieldType;
com.wiris.quizzes.api.ui.AuthoringFieldType.INLINE_MATH_EDITOR = ["INLINE_MATH_EDITOR",2];
com.wiris.quizzes.api.ui.AuthoringFieldType.INLINE_MATH_EDITOR.toString = $estr;
com.wiris.quizzes.api.ui.AuthoringFieldType.INLINE_MATH_EDITOR.__enum__ = com.wiris.quizzes.api.ui.AuthoringFieldType;
com.wiris.quizzes.api.ui.AuthoringFieldType.EMBEDDED_ANSWERS_EDITOR = ["EMBEDDED_ANSWERS_EDITOR",3];
com.wiris.quizzes.api.ui.AuthoringFieldType.EMBEDDED_ANSWERS_EDITOR.toString = $estr;
com.wiris.quizzes.api.ui.AuthoringFieldType.EMBEDDED_ANSWERS_EDITOR.__enum__ = com.wiris.quizzes.api.ui.AuthoringFieldType;
com.wiris.quizzes.api.ui.AuxiliaryCasField = $hxClasses["com.wiris.quizzes.api.ui.AuxiliaryCasField"] = function() { }
com.wiris.quizzes.api.ui.AuxiliaryCasField.__name__ = ["com","wiris","quizzes","api","ui","AuxiliaryCasField"];
com.wiris.quizzes.api.ui.AuxiliaryCasField.__interfaces__ = [com.wiris.quizzes.api.ui.QuizzesField];
com.wiris.quizzes.api.ui.EmbeddedAnswersEditorMode = $hxClasses["com.wiris.quizzes.api.ui.EmbeddedAnswersEditorMode"] = { __ename__ : ["com","wiris","quizzes","api","ui","EmbeddedAnswersEditorMode"], __constructs__ : ["AUTHORING","DELIVERY","REVIEW"] }
com.wiris.quizzes.api.ui.EmbeddedAnswersEditorMode.AUTHORING = ["AUTHORING",0];
com.wiris.quizzes.api.ui.EmbeddedAnswersEditorMode.AUTHORING.toString = $estr;
com.wiris.quizzes.api.ui.EmbeddedAnswersEditorMode.AUTHORING.__enum__ = com.wiris.quizzes.api.ui.EmbeddedAnswersEditorMode;
com.wiris.quizzes.api.ui.EmbeddedAnswersEditorMode.DELIVERY = ["DELIVERY",1];
com.wiris.quizzes.api.ui.EmbeddedAnswersEditorMode.DELIVERY.toString = $estr;
com.wiris.quizzes.api.ui.EmbeddedAnswersEditorMode.DELIVERY.__enum__ = com.wiris.quizzes.api.ui.EmbeddedAnswersEditorMode;
com.wiris.quizzes.api.ui.EmbeddedAnswersEditorMode.REVIEW = ["REVIEW",2];
com.wiris.quizzes.api.ui.EmbeddedAnswersEditorMode.REVIEW.toString = $estr;
com.wiris.quizzes.api.ui.EmbeddedAnswersEditorMode.REVIEW.__enum__ = com.wiris.quizzes.api.ui.EmbeddedAnswersEditorMode;
com.wiris.quizzes.api.ui.QuizzesUIBuilder = $hxClasses["com.wiris.quizzes.api.ui.QuizzesUIBuilder"] = function() { }
com.wiris.quizzes.api.ui.QuizzesUIBuilder.__name__ = ["com","wiris","quizzes","api","ui","QuizzesUIBuilder"];
com.wiris.quizzes.api.ui.QuizzesUIBuilder.prototype = {
	replaceFields: null
	,getMathViewer: null
	,newAuxiliarCasField: null
	,newEmbeddedAnswersEditor: null
	,newAuthoringField: null
	,newAnswerField: null
	,newAnswerFeedback: null
	,setLanguage: null
	,__class__: com.wiris.quizzes.api.ui.QuizzesUIBuilder
}
com.wiris.quizzes.api.ui.QuizzesUIConstants = $hxClasses["com.wiris.quizzes.api.ui.QuizzesUIConstants"] = function() { }
com.wiris.quizzes.api.ui.QuizzesUIConstants.__name__ = ["com","wiris","quizzes","api","ui","QuizzesUIConstants"];
com.wiris.system.Utf8 = $hxClasses["com.wiris.system.Utf8"] = function() {
};
com.wiris.system.Utf8.__name__ = ["com","wiris","system","Utf8"];
com.wiris.system.Utf8.findUTF8Position = function(s,position,carry8,carry16) {
	if(carry16 == null) carry16 = 0;
	if(carry8 == null) carry8 = 0;
	var i8 = carry8;
	var i16 = carry16;
	var n8 = s.length;
	while(i8 < n8 && i16 < position) {
		var charCode = HxOverrides.cca(s,i8);
		if(charCode < 55296 || charCode > 56319) ++i16;
		++i8;
	}
	return i8;
}
com.wiris.system.Utf8.getLength = function(s) {
	var i8 = 0;
	var n8 = s.length;
	var counter16 = 0;
	while(i8 < n8) {
		var charCode = HxOverrides.cca(s,i8);
		if(charCode < 55296 || charCode > 56319) ++counter16;
		++i8;
	}
	return counter16;
}
com.wiris.system.Utf8.charCodeAt = function(s,i) {
	var i8 = com.wiris.system.Utf8.findUTF8Position(s,i,null,null);
	var charCode = HxOverrides.cca(s,i8);
	return charCode < 55296 || charCode > 56319?charCode:(charCode - 55296) * 1024 + HxOverrides.cca(s,i8 + 1) - 56320 + 65536;
}
com.wiris.system.Utf8.mbSubstring = function(s,i,len) {
	return HxOverrides.substr(s,i,len);
}
com.wiris.system.Utf8.charValueAt = function(s,i) {
	return HxOverrides.cca(s,i);
}
com.wiris.system.Utf8.charAt = function(s,i) {
	return com.wiris.system.Utf8.uchr(com.wiris.system.Utf8.charCodeAt(s,i));
}
com.wiris.system.Utf8.uchr = function(i) {
	var s = new haxe.Utf8();
	if(i < 65536) s.__b += String.fromCharCode(i); else if(i <= 1114111) {
		s.__b += String.fromCharCode((i >> 10) + 55232);
		s.__b += String.fromCharCode((i & 1023) + 56320);
	} else throw "Invalid code point.";
	return s.__b;
}
com.wiris.system.Utf8.sub = function(s,pos,len) {
	var start = com.wiris.system.Utf8.findUTF8Position(s,pos,null,null);
	var end = com.wiris.system.Utf8.findUTF8Position(s,pos + len,start,pos);
	return HxOverrides.substr(s,start,end - start);
}
com.wiris.system.Utf8.toBytes = function(s) {
	return haxe.io.Bytes.ofString(s).b;
}
com.wiris.system.Utf8.fromBytes = function(s) {
	var bs = haxe.io.Bytes.ofData(s);
	return bs.toString();
}
com.wiris.system.Utf8.getIterator = function(s) {
	return new com.wiris.system._Utf8.StringIterator(s);
}
com.wiris.system.Utf8.prototype = {
	__class__: com.wiris.system.Utf8
}
var haxe = haxe || {}
haxe.Utf8 = $hxClasses["haxe.Utf8"] = function(size) {
	this.__b = "";
};
haxe.Utf8.__name__ = ["haxe","Utf8"];
haxe.Utf8.iter = function(s,chars) {
	var _g1 = 0, _g = s.length;
	while(_g1 < _g) {
		var i = _g1++;
		chars(HxOverrides.cca(s,i));
	}
}
haxe.Utf8.encode = function(s) {
	throw "Not implemented";
	return s;
}
haxe.Utf8.decode = function(s) {
	throw "Not implemented";
	return s;
}
haxe.Utf8.charCodeAt = function(s,index) {
	return HxOverrides.cca(s,index);
}
haxe.Utf8.validate = function(s) {
	return true;
}
haxe.Utf8.compare = function(a,b) {
	return a > b?1:a == b?0:-1;
}
haxe.Utf8.sub = function(s,pos,len) {
	return HxOverrides.substr(s,pos,len);
}
haxe.Utf8.prototype = {
	toString: function() {
		return this.__b;
	}
	,addChar: function(c) {
		this.__b += String.fromCharCode(c);
	}
	,__b: null
	,__class__: haxe.Utf8
}
com.wiris.quizzes.impl.ActionCommands = $hxClasses["com.wiris.quizzes.impl.ActionCommands"] = function() { }
com.wiris.quizzes.impl.ActionCommands.__name__ = ["com","wiris","quizzes","impl","ActionCommands"];
if(!com.wiris.util.xml) com.wiris.util.xml = {}
com.wiris.util.xml.SerializableImpl = $hxClasses["com.wiris.util.xml.SerializableImpl"] = function() {
};
com.wiris.util.xml.SerializableImpl.__name__ = ["com","wiris","util","xml","SerializableImpl"];
com.wiris.util.xml.SerializableImpl.prototype = {
	serialize: function() {
		var s = new com.wiris.util.xml.XmlSerializer();
		return s.write(this);
	}
	,newInstance: function() {
		return new com.wiris.util.xml.SerializableImpl();
	}
	,onSerialize: function(s) {
	}
	,__class__: com.wiris.util.xml.SerializableImpl
}
com.wiris.quizzes.impl.MathContent = $hxClasses["com.wiris.quizzes.impl.MathContent"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
};
com.wiris.quizzes.impl.MathContent.__name__ = ["com","wiris","quizzes","impl","MathContent"];
com.wiris.quizzes.impl.MathContent.getMathType = function(content) {
	if(content == null || content == "") return com.wiris.quizzes.impl.MathContent.TYPE_TEXT;
	content = StringTools.trim(content);
	var i;
	if(StringTools.startsWith(content,"<") && StringTools.endsWith(content,">")) {
		var mathmltags = ["math","mn","mo","mi","mrow","mfrac","mtext","ms","mroot","msqrt","mfenced","msub","msup","msubsup","mover","munder","munderover"];
		var _g1 = 0, _g = mathmltags.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(StringTools.startsWith(content,"<" + mathmltags[i1])) return com.wiris.quizzes.impl.MathContent.TYPE_MATHML;
		}
	}
	if(com.wiris.util.geometry.GeometryFile.isGeometryFile(content)) return com.wiris.quizzes.impl.MathContent.TYPE_GEOMETRY_FILE;
	return com.wiris.quizzes.impl.MathContent.TYPE_TEXT;
}
com.wiris.quizzes.impl.MathContent.isEmpty = function(content) {
	content = StringTools.trim(content);
	if(StringTools.startsWith(content,"<math")) {
		content = HxOverrides.substr(content,content.indexOf(">") + 1,null);
		if(content.length > 0) content = HxOverrides.substr(content,0,content.lastIndexOf("<"));
	}
	while(StringTools.startsWith(content,"<mrow")) {
		content = HxOverrides.substr(content,content.indexOf(">") + 1,null);
		content = HxOverrides.substr(content,0,content.lastIndexOf("<"));
	}
	return content.length == 0;
}
com.wiris.quizzes.impl.MathContent.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.MathContent.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.MathContent();
	}
	,onSerializeInner: function(s) {
		this.type = s.attributeString("type",this.type,"text");
		this.content = s.textContent(this.content);
	}
	,onSerialize: function(s) {
		s.beginTag("math");
		this.onSerializeInner(s);
		s.endTag();
	}
	,set: function(content) {
		this.type = com.wiris.quizzes.impl.MathContent.getMathType(content);
		this.content = content;
	}
	,content: null
	,type: null
	,__class__: com.wiris.quizzes.impl.MathContent
});
com.wiris.quizzes.impl.Answer = $hxClasses["com.wiris.quizzes.impl.Answer"] = function() {
	com.wiris.quizzes.impl.MathContent.call(this);
	this.id = "0";
};
com.wiris.quizzes.impl.Answer.__name__ = ["com","wiris","quizzes","impl","Answer"];
com.wiris.quizzes.impl.Answer.__super__ = com.wiris.quizzes.impl.MathContent;
com.wiris.quizzes.impl.Answer.prototype = $extend(com.wiris.quizzes.impl.MathContent.prototype,{
	onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.Answer.tagName);
		this.id = s.attributeString("id",this.id,"0");
		com.wiris.quizzes.impl.MathContent.prototype.onSerializeInner.call(this,s);
		s.endTag();
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.Answer();
	}
	,id: null
	,__class__: com.wiris.quizzes.impl.Answer
});
com.wiris.quizzes.impl.Assertion = $hxClasses["com.wiris.quizzes.impl.Assertion"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
};
com.wiris.quizzes.impl.Assertion.__name__ = ["com","wiris","quizzes","impl","Assertion"];
com.wiris.quizzes.impl.Assertion.paramdefault = null;
com.wiris.quizzes.impl.Assertion.paramnames = null;
com.wiris.quizzes.impl.Assertion.initParams = function() {
	com.wiris.quizzes.impl.Assertion.paramnames = new Hash();
	com.wiris.quizzes.impl.Assertion.paramnames.set(com.wiris.quizzes.impl.Assertion.SYNTAX_EXPRESSION,[com.wiris.quizzes.impl.Assertion.PARAM_CONSTANTS,com.wiris.quizzes.impl.Assertion.PARAM_FUNCTIONS,com.wiris.quizzes.impl.Assertion.PARAM_LIST_OPERATORS,com.wiris.quizzes.impl.Assertion.PARAM_GROUP_OPERATORS,com.wiris.quizzes.impl.Assertion.PARAM_ITEM_SEPARATORS,com.wiris.quizzes.impl.Assertion.PARAM_DECIMAL_SEPARATORS,com.wiris.quizzes.impl.Assertion.PARAM_DIGIT_GROUP_SEPARATORS,com.wiris.quizzes.impl.Assertion.PARAM_NO_BRACKETS_LIST,com.wiris.quizzes.impl.Assertion.PARAM_INTERVALS,com.wiris.quizzes.impl.Assertion.PARAM_TEXT_LOGIC_OPERATORS]);
	com.wiris.quizzes.impl.Assertion.paramnames.set(com.wiris.quizzes.impl.Assertion.SYNTAX_LIST,[com.wiris.quizzes.impl.Assertion.PARAM_CONSTANTS,com.wiris.quizzes.impl.Assertion.PARAM_FUNCTIONS]);
	com.wiris.quizzes.impl.Assertion.paramnames.set(com.wiris.quizzes.impl.Assertion.SYNTAX_QUANTITY,[com.wiris.quizzes.impl.Assertion.PARAM_CONSTANTS,com.wiris.quizzes.impl.Assertion.PARAM_UNITS,com.wiris.quizzes.impl.Assertion.PARAM_UNIT_PREFIXES,com.wiris.quizzes.impl.Assertion.PARAM_GROUP_OPERATORS,com.wiris.quizzes.impl.Assertion.PARAM_MIXED_FRACTIONS,com.wiris.quizzes.impl.Assertion.PARAM_ITEM_SEPARATORS,com.wiris.quizzes.impl.Assertion.PARAM_DECIMAL_SEPARATORS,com.wiris.quizzes.impl.Assertion.PARAM_DIGIT_GROUP_SEPARATORS,com.wiris.quizzes.impl.Assertion.PARAM_NO_BRACKETS_LIST]);
	com.wiris.quizzes.impl.Assertion.paramnames.set(com.wiris.quizzes.impl.Assertion.CHECK_DIVISIBLE,[com.wiris.quizzes.impl.Assertion.PARAM_VALUE]);
	com.wiris.quizzes.impl.Assertion.paramnames.set(com.wiris.quizzes.impl.Assertion.CHECK_UNIT,[com.wiris.quizzes.impl.Assertion.PARAM_UNIT]);
	com.wiris.quizzes.impl.Assertion.paramnames.set(com.wiris.quizzes.impl.Assertion.CHECK_UNIT_LITERAL,[com.wiris.quizzes.impl.Assertion.PARAM_UNIT]);
	com.wiris.quizzes.impl.Assertion.paramnames.set(com.wiris.quizzes.impl.Assertion.CHECK_NO_MORE_DECIMALS,[com.wiris.quizzes.impl.Assertion.PARAM_DIGITS]);
	com.wiris.quizzes.impl.Assertion.paramnames.set(com.wiris.quizzes.impl.Assertion.CHECK_NO_MORE_DIGITS,[com.wiris.quizzes.impl.Assertion.PARAM_DIGITS]);
	com.wiris.quizzes.impl.Assertion.paramnames.set(com.wiris.quizzes.impl.Assertion.CHECK_PRECISION,[com.wiris.quizzes.impl.Assertion.PARAM_MIN,com.wiris.quizzes.impl.Assertion.PARAM_MAX,com.wiris.quizzes.impl.Assertion.PARAM_RELATIVE]);
	com.wiris.quizzes.impl.Assertion.paramnames.set(com.wiris.quizzes.impl.Assertion.EQUIVALENT_FUNCTION,[com.wiris.quizzes.impl.Assertion.PARAM_NAME,com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE,com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE_DIGITS,com.wiris.quizzes.impl.Assertion.PARAM_RELATIVE_TOLERANCE,com.wiris.quizzes.impl.Assertion.PARAM_NOT_EVALUATE,com.wiris.quizzes.impl.Assertion.PARAM_FUNCTION_ARGUMENT_MODE]);
	com.wiris.quizzes.impl.Assertion.paramnames.set(com.wiris.quizzes.impl.Assertion.EQUIVALENT_SYMBOLIC,[com.wiris.quizzes.impl.Assertion.PARAM_ORDER_MATTERS,com.wiris.quizzes.impl.Assertion.PARAM_REPETITION_MATTERS,com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE,com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE_DIGITS,com.wiris.quizzes.impl.Assertion.PARAM_RELATIVE_TOLERANCE]);
	com.wiris.quizzes.impl.Assertion.paramnames.set(com.wiris.quizzes.impl.Assertion.EQUIVALENT_LITERAL,[com.wiris.quizzes.impl.Assertion.PARAM_ORDER_MATTERS,com.wiris.quizzes.impl.Assertion.PARAM_REPETITION_MATTERS,com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE,com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE_DIGITS,com.wiris.quizzes.impl.Assertion.PARAM_RELATIVE_TOLERANCE,com.wiris.quizzes.impl.Assertion.PARAM_USE_CASE,com.wiris.quizzes.impl.Assertion.PARAM_USE_SPACES]);
	com.wiris.quizzes.impl.Assertion.paramnames.set(com.wiris.quizzes.impl.Assertion.EQUIVALENT_EQUATIONS,[com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE,com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE_DIGITS,com.wiris.quizzes.impl.Assertion.PARAM_RELATIVE_TOLERANCE]);
	com.wiris.quizzes.impl.Assertion.paramnames.set(com.wiris.quizzes.impl.Assertion.SYNTAX_MATH,[com.wiris.quizzes.impl.Assertion.PARAM_CONSTANTS,com.wiris.quizzes.impl.Assertion.PARAM_FUNCTIONS,com.wiris.quizzes.impl.Assertion.PARAM_LIST_OPERATORS,com.wiris.quizzes.impl.Assertion.PARAM_GROUP_OPERATORS,com.wiris.quizzes.impl.Assertion.PARAM_ITEM_SEPARATORS,com.wiris.quizzes.impl.Assertion.PARAM_DECIMAL_SEPARATORS,com.wiris.quizzes.impl.Assertion.PARAM_DIGIT_GROUP_SEPARATORS,com.wiris.quizzes.impl.Assertion.PARAM_NO_BRACKETS_LIST,com.wiris.quizzes.impl.Assertion.PARAM_INTERVALS,com.wiris.quizzes.impl.Assertion.PARAM_TEXT_LOGIC_OPERATORS,com.wiris.quizzes.impl.Assertion.PARAM_RATIO,com.wiris.quizzes.impl.Assertion.PARAM_SCIENTIFIC_NOTATION,com.wiris.quizzes.impl.Assertion.PARAM_UNITS,com.wiris.quizzes.impl.Assertion.PARAM_UNIT_PREFIXES,com.wiris.quizzes.impl.Assertion.PARAM_MIXED_FRACTIONS]);
	com.wiris.quizzes.impl.Assertion.paramnames.set(com.wiris.quizzes.impl.Assertion.SYNTAX_GRAPHIC,[com.wiris.quizzes.impl.Assertion.PARAM_GRAPH_MODE]);
	var paramvalues;
	com.wiris.quizzes.impl.Assertion.paramdefault = new Hash();
	var constantsExpression = com.wiris.system.Utf8.uchr(960) + ", e, i, j";
	var functions = "exp, log, ln, sin, cos, tan, asin, acos, atan, arcsin, arccos, arctan, cosec, csc, sec, cotan, cot, acosec, acsc, arccosec, arccsc, asec, arcsec, acotan, acot, arccotan, arccot, sen, asen, arcsen, sinh, cosh, tanh, asinh, acosh, atanh, arcsinh, arccosh, arctanh, arsinh, arcosh, artanh, cosech, csch, sech, cotanh, coth, acosech, acsch, arccosech, arccsch, arcosech, arcsch, asech, arcsech, arsech, acotanh, acoth, arccotanh, arccoth, arcotanh, arcoth, senh, asenh, arcsenh, arsenh, min, max, sign";
	var groupoperators = "(,[";
	var listoperators = "{";
	paramvalues = new Hash();
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_CONSTANTS,constantsExpression);
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_FUNCTIONS,functions);
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_GROUP_OPERATORS,groupoperators);
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_LIST_OPERATORS,listoperators);
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_ITEM_SEPARATORS,";, \\n, \\,");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_DECIMAL_SEPARATORS,".");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_DIGIT_GROUP_SEPARATORS,"");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_NO_BRACKETS_LIST,"false");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_INTERVALS,"false");
	com.wiris.quizzes.impl.Assertion.paramdefault.set(com.wiris.quizzes.impl.Assertion.SYNTAX_EXPRESSION,paramvalues);
	paramvalues = new Hash();
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_CONSTANTS,constantsExpression);
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_FUNCTIONS,functions);
	com.wiris.quizzes.impl.Assertion.paramdefault.set(com.wiris.quizzes.impl.Assertion.SYNTAX_LIST,paramvalues);
	var constantsQuantity = com.wiris.system.Utf8.uchr(960) + ", i, j";
	paramvalues = new Hash();
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_CONSTANTS,constantsQuantity);
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_GROUP_OPERATORS,groupoperators);
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_LIST_OPERATORS,listoperators);
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_UNITS,com.wiris.quizzes.impl.Assertion.ALL_UNITS_LIST);
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_UNIT_PREFIXES,"m, c, k, M");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_MIXED_FRACTIONS,"false");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_ITEM_SEPARATORS,";, \\n");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_DECIMAL_SEPARATORS,"', " + com.wiris.system.Utf8.uchr(180) + ", ., \\,");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_DIGIT_GROUP_SEPARATORS,"");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_NO_BRACKETS_LIST,"false");
	com.wiris.quizzes.impl.Assertion.paramdefault.set(com.wiris.quizzes.impl.Assertion.SYNTAX_QUANTITY,paramvalues);
	paramvalues = new Hash();
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_CONSTANTS,constantsExpression);
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_FUNCTIONS,functions);
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_GROUP_OPERATORS,groupoperators);
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_LIST_OPERATORS,listoperators);
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_UNITS,"");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_UNIT_PREFIXES,"");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_MIXED_FRACTIONS,"false");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_ITEM_SEPARATORS,";, \\n, \\,");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_DECIMAL_SEPARATORS,".");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_DIGIT_GROUP_SEPARATORS,"");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_NO_BRACKETS_LIST,"false");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_INTERVALS,"false");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_RATIO,"false");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_SCIENTIFIC_NOTATION,"false");
	com.wiris.quizzes.impl.Assertion.paramdefault.set(com.wiris.quizzes.impl.Assertion.SYNTAX_MATH,paramvalues);
	paramvalues = new Hash();
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_ORDER_MATTERS,"true");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_REPETITION_MATTERS,"true");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE,"");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE_DIGITS,"");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_RELATIVE_TOLERANCE,"");
	com.wiris.quizzes.impl.Assertion.paramdefault.set(com.wiris.quizzes.impl.Assertion.EQUIVALENT_SYMBOLIC,paramvalues);
	paramvalues = new Hash();
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_ORDER_MATTERS,"true");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_REPETITION_MATTERS,"true");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE,"");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE_DIGITS,"");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_RELATIVE_TOLERANCE,"");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_USE_CASE,"true");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_USE_SPACES,"true");
	com.wiris.quizzes.impl.Assertion.paramdefault.set(com.wiris.quizzes.impl.Assertion.EQUIVALENT_LITERAL,paramvalues);
	paramvalues = new Hash();
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_NAME,"");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE,"");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE_DIGITS,"");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_RELATIVE_TOLERANCE,"");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_FUNCTION_ARGUMENT_MODE,com.wiris.quizzes.impl.Assertion.PARAM_VALUE_FUNCTION_ARGUMENT_EVALUATED);
	com.wiris.quizzes.impl.Assertion.paramdefault.set(com.wiris.quizzes.impl.Assertion.EQUIVALENT_FUNCTION,paramvalues);
	paramvalues = new Hash();
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE,"");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE_DIGITS,"");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_RELATIVE_TOLERANCE,"");
	com.wiris.quizzes.impl.Assertion.paramdefault.set(com.wiris.quizzes.impl.Assertion.EQUIVALENT_EQUATIONS,paramvalues);
	paramvalues = new Hash();
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_VALUE,"");
	com.wiris.quizzes.impl.Assertion.paramdefault.set(com.wiris.quizzes.impl.Assertion.CHECK_DIVISIBLE,paramvalues);
	paramvalues = new Hash();
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_UNIT,"");
	com.wiris.quizzes.impl.Assertion.paramdefault.set(com.wiris.quizzes.impl.Assertion.CHECK_UNIT,paramvalues);
	paramvalues = new Hash();
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_UNIT,"");
	com.wiris.quizzes.impl.Assertion.paramdefault.set(com.wiris.quizzes.impl.Assertion.CHECK_UNIT_LITERAL,paramvalues);
	paramvalues = new Hash();
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_DIGITS,"");
	com.wiris.quizzes.impl.Assertion.paramdefault.set(com.wiris.quizzes.impl.Assertion.CHECK_NO_MORE_DECIMALS,paramvalues);
	paramvalues = new Hash();
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_DIGITS,"");
	com.wiris.quizzes.impl.Assertion.paramdefault.set(com.wiris.quizzes.impl.Assertion.CHECK_NO_MORE_DIGITS,paramvalues);
	paramvalues = new Hash();
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_MIN,"");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_MAX,"");
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_RELATIVE,"true");
	com.wiris.quizzes.impl.Assertion.paramdefault.set(com.wiris.quizzes.impl.Assertion.CHECK_PRECISION,paramvalues);
	paramvalues = new Hash();
	paramvalues.set(com.wiris.quizzes.impl.Assertion.PARAM_GRAPH_MODE,com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD);
	com.wiris.quizzes.impl.Assertion.paramdefault.set(com.wiris.quizzes.impl.Assertion.SYNTAX_GRAPHIC,paramvalues);
}
com.wiris.quizzes.impl.Assertion.getParameterNames = function(name) {
	if(com.wiris.quizzes.impl.Assertion.paramnames == null) com.wiris.quizzes.impl.Assertion.initParams();
	return com.wiris.quizzes.impl.Assertion.paramnames.get(name);
}
com.wiris.quizzes.impl.Assertion.getParameterDefaultValue = function(assertion,parameter) {
	var value;
	if(com.wiris.quizzes.impl.Assertion.paramdefault == null) com.wiris.quizzes.impl.Assertion.initParams();
	if(com.wiris.quizzes.impl.Assertion.paramdefault.exists(assertion) && com.wiris.quizzes.impl.Assertion.paramdefault.get(assertion).exists(parameter)) value = com.wiris.quizzes.impl.Assertion.paramdefault.get(assertion).get(parameter); else value = "";
	return value;
}
com.wiris.quizzes.impl.Assertion.isSyntacticName = function(name) {
	return com.wiris.util.type.Arrays.containsArray(com.wiris.quizzes.impl.Assertion.syntactic,name);
}
com.wiris.quizzes.impl.Assertion.isEquivalenceName = function(name) {
	return com.wiris.util.type.Arrays.containsArray(com.wiris.quizzes.impl.Assertion.equivalent,name);
}
com.wiris.quizzes.impl.Assertion.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.Assertion.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	isEquivalent: function(a) {
		if(!(a.name == this.name)) return false;
		if(this.correctAnswer.length != a.correctAnswer.length) return false;
		var i;
		var _g1 = 0, _g = this.correctAnswer.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(!(this.correctAnswer[i1] == a.correctAnswer[i1])) return false;
		}
		if(this.answer.length != a.answer.length) return false;
		var _g1 = 0, _g = this.answer.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(!(this.answer[i1] == a.answer[i1])) return false;
		}
		if(this.parameters != null && a.parameters != null) {
			var _g1 = 0, _g = this.parameters.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var p = this.parameters[i1];
				var q = a.parameters[i1];
				if(!(p.name == q.name)) return false;
				if(!(p.type == q.type)) return false;
				if(!(p.content == q.content)) return false;
			}
			return true;
		}
		return this.parameters == null && a.parameters == null;
	}
	,copyArrayString: function(a) {
		var b = new Array();
		var i;
		var _g1 = 0, _g = a.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			b[i1] = a[i1];
		}
		return b;
	}
	,importAssertionNameAndParams: function(a) {
		this.name = a.name;
		this.parameters = a.parameters;
	}
	,copy: function() {
		var a = new com.wiris.quizzes.impl.Assertion();
		a.name = this.name;
		if(this.correctAnswer != null) a.correctAnswer = this.copyArrayString(this.correctAnswer);
		if(this.answer != null) a.answer = this.copyArrayString(this.answer);
		if(this.parameters != null) {
			a.parameters = new Array();
			var i;
			var _g1 = 0, _g = this.parameters.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var p = this.parameters[i1];
				var q = new com.wiris.quizzes.impl.AssertionParam();
				q.name = p.name;
				q.type = p.type;
				q.content = p.content;
				a.parameters.push(q);
			}
		}
		return a;
	}
	,isStructure: function() {
		return com.wiris.util.type.Arrays.containsArray(com.wiris.quizzes.impl.Assertion.structure,this.name);
	}
	,isCheck: function() {
		return com.wiris.util.type.Arrays.containsArray(com.wiris.quizzes.impl.Assertion.checks,this.name) || com.wiris.quizzes.impl.Assertion.CHECK_NO_MORE_DIGITS == this.name || com.wiris.quizzes.impl.Assertion.CHECK_NO_MORE_DECIMALS == this.name;
	}
	,isEquivalence: function() {
		return com.wiris.quizzes.impl.Assertion.isEquivalenceName(this.name) || com.wiris.quizzes.impl.Assertion.EQUIVALENT_SET == this.name;
	}
	,isSyntactic: function() {
		return com.wiris.quizzes.impl.Assertion.isSyntacticName(this.name) || com.wiris.quizzes.impl.Assertion.SYNTAX_EXPRESSION == this.name || com.wiris.quizzes.impl.Assertion.SYNTAX_QUANTITY == this.name;
	}
	,equalLists: function(a,b) {
		if(a == null || b == null) return a == null && b == null;
		var aa = a.split(",");
		var bb = b.split(",");
		if(aa.length != bb.length) return false;
		var i;
		var _g1 = 0, _g = aa.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(!com.wiris.util.type.Arrays.containsArray(bb,aa[i1])) return false;
		}
		return true;
	}
	,isDefaultParameterValue: function(name,value) {
		var defValue = com.wiris.quizzes.impl.Assertion.getParameterDefaultValue(this.name,name);
		return this.equalLists(defValue,value);
	}
	,hasParam: function(name) {
		if(this.parameters != null) {
			var i;
			var _g1 = 0, _g = this.parameters.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				if(this.parameters[i1].name == name) return true;
			}
		}
		return false;
	}
	,getParam: function(name) {
		if(this.parameters != null) {
			var i;
			var _g1 = 0, _g = this.parameters.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				if(this.parameters[i1].name == name) return this.parameters[i1].content;
			}
		}
		if(com.wiris.quizzes.impl.Assertion.paramdefault == null) com.wiris.quizzes.impl.Assertion.initParams();
		if(com.wiris.quizzes.impl.Assertion.paramdefault.exists(this.name)) {
			var values = com.wiris.quizzes.impl.Assertion.paramdefault.get(this.name);
			if(values.exists(name)) return values.get(name);
		}
		return null;
	}
	,setParam: function(name,value) {
		if(this.parameters == null) this.parameters = new Array();
		if(this.isDefaultParameterValue(name,value)) this.removeParam(name); else {
			var found = false;
			var i;
			var _g1 = 0, _g = this.parameters.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var p = this.parameters[i1];
				if(p.name == name) {
					p.content = value;
					found = true;
				}
			}
			if(!found) {
				var q = new com.wiris.quizzes.impl.AssertionParam();
				q.name = name;
				q.content = value;
				q.type = com.wiris.quizzes.impl.MathContent.TYPE_TEXT;
				this.parameters.push(q);
			}
		}
	}
	,removeParam: function(name) {
		if(this.parameters != null) {
			var j = this.parameters.length - 1;
			while(j >= 0) {
				if(this.parameters[j].name == name) HxOverrides.remove(this.parameters,this.parameters[j]);
				j--;
			}
		}
	}
	,getAnswers: function() {
		if(this.answer != null) return this.answer; else return new Array();
	}
	,getAnswer: function() {
		if(this.answer != null && this.answer.length > 0) return this.answer[0]; else return "-1";
	}
	,addAnswer: function(a) {
		var current = this.getAnswers();
		if(!com.wiris.util.type.Arrays.containsArray(current,a)) {
			var newa = new Array();
			var i;
			var _g1 = 0, _g = current.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				newa[i1] = current[i1];
			}
			newa[current.length] = a;
			this.setAnswers(newa);
		}
	}
	,setAnswers: function(a) {
		this.answer = a;
	}
	,setAnswer: function(a) {
		this.setAnswers([a]);
	}
	,getCorrectAnswers: function() {
		if(this.correctAnswer != null) return this.correctAnswer; else return new Array();
	}
	,getCorrectAnswer: function() {
		if(this.correctAnswer != null && this.correctAnswer.length > 0) return this.correctAnswer[0]; else return "-1";
	}
	,removeCorrectAnswer: function(ca) {
		if(this.hasCorrectAnswer(ca)) {
			var current = this.getCorrectAnswers();
			var newca = new Array();
			var i;
			var j = 0;
			var _g1 = 0, _g = current.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				if(!(current[i1] == ca)) {
					newca[j] = current[i1];
					j++;
				}
			}
			this.setCorrectAnswers(newca);
		}
	}
	,hasAnswer: function(a) {
		return com.wiris.util.type.Arrays.containsArray(this.getAnswers(),a);
	}
	,hasCorrectAnswer: function(ca) {
		return com.wiris.util.type.Arrays.containsArray(this.getCorrectAnswers(),ca);
	}
	,addCorrectAnswer: function(ca) {
		var current = this.getCorrectAnswers();
		if(!com.wiris.util.type.Arrays.containsArray(current,ca)) {
			var newca = new Array();
			var i;
			var _g1 = 0, _g = current.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				newca[i1] = current[i1];
			}
			newca[current.length] = ca;
			this.setCorrectAnswers(newca);
		}
	}
	,setCorrectAnswers: function(ca) {
		this.correctAnswer = ca;
	}
	,setCorrectAnswer: function(ca) {
		this.setCorrectAnswers([ca]);
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.Assertion();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.Assertion.tagName);
		this.name = s.attributeString(com.wiris.quizzes.impl.Assertion.PARAM_NAME,this.name,null);
		this.correctAnswer = s.attributeStringArray("correctAnswer",this.correctAnswer,["0"]);
		this.answer = s.attributeStringArray("answer",this.answer,["0"]);
		this.parameters = s.serializeArray(this.parameters,com.wiris.quizzes.impl.AssertionParam.TAGNAME);
		s.endTag();
	}
	,parameters: null
	,answer: null
	,correctAnswer: null
	,name: null
	,__class__: com.wiris.quizzes.impl.Assertion
});
com.wiris.quizzes.impl.AssertionCheckImpl = $hxClasses["com.wiris.quizzes.impl.AssertionCheckImpl"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
};
com.wiris.quizzes.impl.AssertionCheckImpl.__name__ = ["com","wiris","quizzes","impl","AssertionCheckImpl"];
com.wiris.quizzes.impl.AssertionCheckImpl.__interfaces__ = [com.wiris.quizzes.api.AssertionCheck];
com.wiris.quizzes.impl.AssertionCheckImpl.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.AssertionCheckImpl.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	getValue: function() {
		return this.value;
	}
	,getAssertionName: function() {
		return this.assertion;
	}
	,getAnswers: function() {
		return this.answer;
	}
	,getAnswer: function() {
		return this.answer[0];
	}
	,setAnswers: function(a) {
		this.answer = a;
	}
	,setAnswer: function(a) {
		this.setAnswers([a]);
	}
	,getCorrectAnswers: function() {
		return this.correctAnswer;
	}
	,getCorrectAnswer: function() {
		return this.correctAnswer[0];
	}
	,setCorrectAnswers: function(ca) {
		this.correctAnswer = ca;
	}
	,setCorrectAnswer: function(ca) {
		this.setCorrectAnswers([ca]);
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.AssertionCheckImpl();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.AssertionCheckImpl.tagName);
		this.assertion = s.attributeString("assertion",this.assertion,null);
		this.answer = s.attributeStringArray("answer",this.answer,["0"]);
		this.correctAnswer = s.attributeStringArray("correctAnswer",this.correctAnswer,["0"]);
		this.value = s.floatContent(this.value);
		s.endTag();
	}
	,correctAnswer: null
	,answer: null
	,assertion: null
	,value: null
	,__class__: com.wiris.quizzes.impl.AssertionCheckImpl
});
com.wiris.quizzes.impl.AssertionParam = $hxClasses["com.wiris.quizzes.impl.AssertionParam"] = function() {
	com.wiris.quizzes.impl.MathContent.call(this);
};
com.wiris.quizzes.impl.AssertionParam.__name__ = ["com","wiris","quizzes","impl","AssertionParam"];
com.wiris.quizzes.impl.AssertionParam.__super__ = com.wiris.quizzes.impl.MathContent;
com.wiris.quizzes.impl.AssertionParam.prototype = $extend(com.wiris.quizzes.impl.MathContent.prototype,{
	normalizeContent: function() {
		if(this.name == "name") {
			if(StringTools.startsWith(this.content,"#")) this.content = HxOverrides.substr(this.content,1,null);
		}
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.AssertionParam.TAGNAME);
		this.name = s.attributeString("name",this.name,null);
		com.wiris.quizzes.impl.MathContent.prototype.onSerializeInner.call(this,s);
		s.endTag();
		if(s.getMode() == com.wiris.util.xml.XmlSerializer.MODE_WRITE) this.normalizeContent();
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.AssertionParam();
	}
	,name: null
	,__class__: com.wiris.quizzes.impl.AssertionParam
});
com.wiris.quizzes.impl.AuthorAnswerImpl = $hxClasses["com.wiris.quizzes.impl.AuthorAnswerImpl"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
	this.value = new com.wiris.quizzes.impl.CorrectAnswer();
	this.validations = new Array();
};
com.wiris.quizzes.impl.AuthorAnswerImpl.__name__ = ["com","wiris","quizzes","impl","AuthorAnswerImpl"];
com.wiris.quizzes.impl.AuthorAnswerImpl.__interfaces__ = [com.wiris.quizzes.api.AuthorAnswer];
com.wiris.quizzes.impl.AuthorAnswerImpl.newWithQuestionCallback = function(question,slot) {
	var aa = new com.wiris.quizzes.impl.AuthorAnswerImpl();
	aa.question = question;
	aa.slot = slot;
	aa.comparison = com.wiris.quizzes.impl.ComparisonAssertion.getDefaultComparison(slot.getSyntax().getName());
	return aa;
}
com.wiris.quizzes.impl.AuthorAnswerImpl.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.AuthorAnswerImpl.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	importAuthorAnswer: function(authorAnswer) {
		this.id = authorAnswer.id;
		this.value = authorAnswer.value;
		this.comparison = authorAnswer.comparison;
		this.validations = authorAnswer.validations;
		this.question = authorAnswer.question;
		this.slot = authorAnswer.slot;
	}
	,removeValidation: function(validation) {
		if(HxOverrides.remove(this.validations,validation) && this.question != null) this.question.assertionRemoved(validation);
	}
	,getValidation: function(name) {
		var _g = 0, _g1 = this.validations;
		while(_g < _g1.length) {
			var validation = _g1[_g];
			++_g;
			if(validation.getName() == name) return validation;
		}
		return null;
	}
	,addNewValidation: function(name) {
		if(name == null) return null;
		var prev = this.getValidation(name);
		if(prev != null) return prev;
		var v = new com.wiris.quizzes.impl.ValidationAssertion();
		v.setName(name);
		this.validations.push(v);
		if(this.question != null && this.slot != null) this.question.assertionAdded(v,this.id,this.slot.id);
		return v;
	}
	,getValidations: function() {
		var vv = new Array();
		vv = this.validations.slice();
		return vv;
	}
	,getComparison: function() {
		return this.comparison;
	}
	,setComparison: function(name) {
		if(name == null || name == this.comparison.getName()) return this.comparison;
		this.question.id = null;
		this.comparison.setName(name);
		this.comparison.parameters = new Array();
		return this.comparison;
	}
	,setWeight: function(weight) {
		this.value.weight = weight;
	}
	,getWeight: function() {
		return this.value.weight;
	}
	,setValue: function(value) {
		if(value == null || value == this.getValue()) return;
		this.value.set(value);
		this.question.id = null;
	}
	,getFilterableValue: function() {
		return com.wiris.quizzes.impl.QuizzesImpl.getInstance().mathContentToFilterableValue(this.value,this.slot.getInitialContent());
	}
	,getValueAsMathML: function() {
		if(this.value.type == com.wiris.quizzes.impl.MathContent.TYPE_MATHML) return this.value.content; else if(this.value.type == com.wiris.quizzes.impl.MathContent.TYPE_TEXT) {
			var html = new com.wiris.quizzes.impl.HTMLTools();
			return html.textToMathML(this.value.content);
		}
		throw "Type not compatible with MathML";
	}
	,getValue: function() {
		return this.value.content;
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.AuthorAnswerImpl();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.AuthorAnswerImpl.TAGNAME);
		s.attributeString(com.wiris.quizzes.impl.AuthorAnswerImpl.ATTRIBUTE_ID,this.id,"0");
		s.serializeChildName(this.value,com.wiris.quizzes.impl.CorrectAnswer.TAGNAME);
		s.serializeChildName(this.comparison,com.wiris.quizzes.impl.ComparisonAssertion.TAGNAME);
		s.serializeArrayName(this.validations,com.wiris.quizzes.impl.AuthorAnswerImpl.VALIDATIONS_TAGNAME);
		s.endTag();
	}
	,copy: function(model) {
		var aa = model;
		this.setValue(aa.getValue());
		this.comparison.importAssertionNameAndParams(aa.comparison.copy());
		if(this.validations == null) this.validations = new Array();
		while(this.validations.length > 0) this.removeValidation(this.validations[this.validations.length - 1]);
		if(aa.validations != null) {
			var vals = aa.validations;
			var _g = 0;
			while(_g < vals.length) {
				var val = vals[_g];
				++_g;
				var val2 = com.wiris.quizzes.impl.ValidationAssertion.fromAssertion(val);
				this.validations.push(val2);
			}
		}
		return this;
	}
	,slot: null
	,question: null
	,validations: null
	,comparison: null
	,value: null
	,id: null
	,__class__: com.wiris.quizzes.impl.AuthorAnswerImpl
});
haxe.BaseCode = $hxClasses["haxe.BaseCode"] = function(base) {
	var len = base.length;
	var nbits = 1;
	while(len > 1 << nbits) nbits++;
	if(nbits > 8 || len != 1 << nbits) throw "BaseCode : base length must be a power of two.";
	this.base = base;
	this.nbits = nbits;
};
haxe.BaseCode.__name__ = ["haxe","BaseCode"];
haxe.BaseCode.encode = function(s,base) {
	var b = new haxe.BaseCode(haxe.io.Bytes.ofString(base));
	return b.encodeString(s);
}
haxe.BaseCode.decode = function(s,base) {
	var b = new haxe.BaseCode(haxe.io.Bytes.ofString(base));
	return b.decodeString(s);
}
haxe.BaseCode.prototype = {
	decodeString: function(s) {
		return this.decodeBytes(haxe.io.Bytes.ofString(s)).toString();
	}
	,encodeString: function(s) {
		return this.encodeBytes(haxe.io.Bytes.ofString(s)).toString();
	}
	,decodeBytes: function(b) {
		var nbits = this.nbits;
		var base = this.base;
		if(this.tbl == null) this.initTable();
		var tbl = this.tbl;
		var size = b.length * nbits >> 3;
		var out = haxe.io.Bytes.alloc(size);
		var buf = 0;
		var curbits = 0;
		var pin = 0;
		var pout = 0;
		while(pout < size) {
			while(curbits < 8) {
				curbits += nbits;
				buf <<= nbits;
				var i = tbl[b.b[pin++]];
				if(i == -1) throw "BaseCode : invalid encoded char";
				buf |= i;
			}
			curbits -= 8;
			out.b[pout++] = buf >> curbits & 255 & 255;
		}
		return out;
	}
	,initTable: function() {
		var tbl = new Array();
		var _g = 0;
		while(_g < 256) {
			var i = _g++;
			tbl[i] = -1;
		}
		var _g1 = 0, _g = this.base.length;
		while(_g1 < _g) {
			var i = _g1++;
			tbl[this.base.b[i]] = i;
		}
		this.tbl = tbl;
	}
	,encodeBytes: function(b) {
		var nbits = this.nbits;
		var base = this.base;
		var size = b.length * 8 / nbits | 0;
		var out = haxe.io.Bytes.alloc(size + (b.length * 8 % nbits == 0?0:1));
		var buf = 0;
		var curbits = 0;
		var mask = (1 << nbits) - 1;
		var pin = 0;
		var pout = 0;
		while(pout < size) {
			while(curbits < nbits) {
				curbits += 8;
				buf <<= 8;
				buf |= b.b[pin++];
			}
			curbits -= nbits;
			out.b[pout++] = base.b[buf >> curbits & mask] & 255;
		}
		if(curbits > 0) out.b[pout++] = base.b[buf << nbits - curbits & mask] & 255;
		return out;
	}
	,tbl: null
	,nbits: null
	,base: null
	,__class__: haxe.BaseCode
}
com.wiris.quizzes.impl.Base64 = $hxClasses["com.wiris.quizzes.impl.Base64"] = function() {
	haxe.BaseCode.call(this,haxe.io.Bytes.ofString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"));
};
com.wiris.quizzes.impl.Base64.__name__ = ["com","wiris","quizzes","impl","Base64"];
com.wiris.quizzes.impl.Base64.__super__ = haxe.BaseCode;
com.wiris.quizzes.impl.Base64.prototype = $extend(haxe.BaseCode.prototype,{
	__class__: com.wiris.quizzes.impl.Base64
});
com.wiris.quizzes.impl.CalcDocumentTools = $hxClasses["com.wiris.quizzes.impl.CalcDocumentTools"] = function(calcDocument) {
	if(calcDocument != null) {
		this.calcDocument = com.wiris.util.xml.WXmlUtils.parseXML(calcDocument);
		this.stringCalcDocument = calcDocument;
	}
};
com.wiris.quizzes.impl.CalcDocumentTools.__name__ = ["com","wiris","quizzes","impl","CalcDocumentTools"];
com.wiris.quizzes.impl.CalcDocumentTools.calcSessionLang = function(value) {
	var lang = com.wiris.quizzes.impl.CalcDocumentTools.casSessionLang(value);
	if(lang == null) {
		var start = value.indexOf("<properties");
		var end = value.indexOf("</properties>",start);
		start = value.indexOf("<property name=\"lang\"",start);
		if(end >= start) return null;
		start = value.indexOf(">",start) + 1;
		end = value.indexOf("</property>",start);
		lang = HxOverrides.substr(value,start,end - start);
	}
	return lang;
}
com.wiris.quizzes.impl.CalcDocumentTools.casSessionLang = function(value) {
	var start = value.indexOf("<session");
	if(start == -1) return null;
	var end = value.indexOf(">",start + 1);
	start = value.indexOf("lang",start);
	if(start == -1 || start > end) return null;
	start = value.indexOf("\"",start) + 1;
	return HxOverrides.substr(value,start,2);
}
com.wiris.quizzes.impl.CalcDocumentTools.isCalc = function(session) {
	if(session == null) return false;
	var i = session.indexOf("<wiriscalc");
	if(i > -1) return true;
	var start = session.indexOf("<session");
	if(start == -1) return false;
	var end = session.indexOf(">",start);
	start = session.indexOf("version",start);
	if(start > end) return false;
	start = session.indexOf("\"",start);
	end = session.indexOf("\"",start + 1);
	var version = HxOverrides.substr(session,start + 1,end - start - 1);
	version = HxOverrides.substr(version,0,version.indexOf("."));
	var num = Std.parseInt(version);
	return num >= 3;
}
com.wiris.quizzes.impl.CalcDocumentTools.getCalcSessionTitle = function(calcSession) {
	if(com.wiris.quizzes.impl.CalcDocumentTools.isCalc(calcSession)) {
		var start = calcSession.indexOf("<wiriscalc");
		var end = calcSession.indexOf("</wiriscalc>",start + 1);
		start = calcSession.indexOf("<title",start + 1);
		if(start > -1 && start < end) {
			end = calcSession.indexOf("</title>",start + 1);
			start = calcSession.indexOf("<math",start + 1);
			if(start > -1 && start < end) {
				start = calcSession.indexOf("<mtext",start + 1);
				end = calcSession.indexOf("</mtext>",start + 1);
				if(start > -1 && start < end) {
					start = calcSession.indexOf(">",start + 1) + 1;
					if(start > -1 && start < end) {
						var title = HxOverrides.substr(calcSession,start,end - start);
						return title;
					}
				}
			}
		}
	}
	return null;
}
com.wiris.quizzes.impl.CalcDocumentTools.setCalcSessionTitle = function(calcSession,title) {
	if(com.wiris.quizzes.impl.CalcDocumentTools.isCalc(calcSession)) {
		var start = calcSession.indexOf("<wiriscalc");
		var end = calcSession.indexOf("</wiriscalc>",start + 1);
		start = calcSession.indexOf("<title",start + 1);
		if(start > -1 && start < end) {
			end = calcSession.indexOf("</title>",start + 1);
			start = calcSession.indexOf("<math",start + 1);
			if(start > -1 && start < end) {
				start = calcSession.indexOf("<mtext",start + 1);
				end = calcSession.indexOf("</mtext>",start + 1);
				if(start > -1 && start < end) {
					start = calcSession.indexOf(">",start + 1) + 1;
					if(start > -1 && start < end) {
						var s1 = HxOverrides.substr(calcSession,0,start);
						var s2 = HxOverrides.substr(calcSession,end,null);
						return s1 + title + s2;
					}
				}
			}
		}
	}
	return calcSession;
}
com.wiris.quizzes.impl.CalcDocumentTools.prototype = {
	getPropertiesElement: function() {
		var it = this.getCalcDocumentElement().elements();
		while(it.hasNext()) {
			var elem = it.next();
			if(elem.getNodeName() == "properties") return elem;
		}
		return null;
	}
	,getCalcDocumentElement: function() {
		if(this.calcDocument.nodeType == Xml.Document) {
			this.calcDocument = this.calcDocument.firstElement();
			return this.getCalcDocumentElement();
		}
		if(this.calcDocument.nodeType != Xml.Element || !(this.calcDocument.getNodeName() == "wiriscalc")) throw "This is not a well-formed Calc document!";
		return this.calcDocument;
	}
	,getOption: function(name) {
		var props = this.getPropertiesElement();
		if(props == null) return null;
		var it = props.elements();
		while(it.hasNext()) {
			var prop = it.next();
			if(name == com.wiris.util.xml.WXmlUtils.getAttribute(prop,"name")) return com.wiris.util.xml.WXmlUtils.getInnerText(prop);
		}
		return null;
	}
	,removeOption: function(name) {
		var props = this.getPropertiesElement();
		if(props == null) return this.stringCalcDocument;
		var it = props.elements();
		while(it.hasNext()) {
			var prop = it.next();
			if(name == com.wiris.util.xml.WXmlUtils.getAttribute(prop,"name")) {
				props.removeChild(prop);
				this.stringCalcDocument = com.wiris.util.xml.WXmlUtils.serializeXML(this.calcDocument);
				return this.stringCalcDocument;
			}
		}
		return this.stringCalcDocument;
	}
	,setOption: function(name,value) {
		var props = this.getPropertiesElement();
		if(props == null) {
			var documentElement = this.getCalcDocumentElement();
			props = Xml.createElement("properties");
			documentElement.addChild(props);
		}
		var it = props.elements();
		while(it.hasNext()) {
			var prop = it.next();
			if(name == com.wiris.util.xml.WXmlUtils.getAttribute(prop,"name")) {
				if(value == com.wiris.util.xml.WXmlUtils.getInnerText(prop)) return this.stringCalcDocument;
				prop.removeChild(prop.firstChild());
				prop.addChild(Xml.createPCData(value));
				this.stringCalcDocument = com.wiris.util.xml.WXmlUtils.serializeXML(this.calcDocument);
				return this.stringCalcDocument;
			}
		}
		var prop2 = Xml.createElement("property");
		com.wiris.util.xml.WXmlUtils.setAttribute(prop2,"name",name);
		props.addChild(prop2);
		prop2.addChild(Xml.createPCData(value));
		this.stringCalcDocument = com.wiris.util.xml.WXmlUtils.serializeXML(this.calcDocument);
		return this.stringCalcDocument;
	}
	,getVersion: function() {
		return com.wiris.util.xml.WXmlUtils.getAttribute(this.getCalcDocumentElement(),"version");
	}
	,hasQuizzesQuestionOptions: function() {
		return this.calcDocument != null && com.wiris.util.type.StringUtils.compareVersions(this.getVersion(),"3.2") >= 0 && this.getOption(com.wiris.quizzes.impl.CalcDocumentTools.QUIZZES_QUESTION_OPTIONS) != null && this.getOption(com.wiris.quizzes.impl.CalcDocumentTools.QUIZZES_QUESTION_OPTIONS) == "true";
	}
	,stringCalcDocument: null
	,calcDocument: null
	,__class__: com.wiris.quizzes.impl.CalcDocumentTools
}
com.wiris.quizzes.impl.ClasspathLoader = $hxClasses["com.wiris.quizzes.impl.ClasspathLoader"] = function() { }
com.wiris.quizzes.impl.ClasspathLoader.__name__ = ["com","wiris","quizzes","impl","ClasspathLoader"];
com.wiris.quizzes.impl.ClasspathLoader.load = function(classpath) {
}
com.wiris.quizzes.impl.ClasspathLoader.loadImpl = function(classpath) {
}
com.wiris.quizzes.impl.ClasspathLoader.registerClass = function(path,file) {
}
com.wiris.quizzes.impl.ComparisonAssertion = $hxClasses["com.wiris.quizzes.impl.ComparisonAssertion"] = function() {
	com.wiris.quizzes.impl.Assertion.call(this);
};
com.wiris.quizzes.impl.ComparisonAssertion.__name__ = ["com","wiris","quizzes","impl","ComparisonAssertion"];
com.wiris.quizzes.impl.ComparisonAssertion.__interfaces__ = [com.wiris.quizzes.api.assertion.Comparison];
com.wiris.quizzes.impl.ComparisonAssertion.fromAssertion = function(a) {
	var c = new com.wiris.quizzes.impl.ComparisonAssertion();
	c.correctAnswer = a.correctAnswer;
	c.answer = a.answer;
	c.parameters = a.parameters;
	c.name = com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonName2String(com.wiris.quizzes.impl.QuizzesEnumUtils.string2ComparisonName(a.name));
	return c;
}
com.wiris.quizzes.impl.ComparisonAssertion.getDefaultComparison = function(syntaxName) {
	var c = new com.wiris.quizzes.impl.ComparisonAssertion();
	var name;
	if(syntaxName == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC) name = com.wiris.quizzes.impl.ComparisonAssertion.DEFAULT_COMPARISON_GRAPHIC; else if(syntaxName == com.wiris.quizzes.api.assertion.SyntaxName.STRING) name = com.wiris.quizzes.impl.ComparisonAssertion.DEFAULT_COMPARISON_STRING; else name = com.wiris.quizzes.impl.ComparisonAssertion.DEFAULT_COMPARISON_MATH;
	c.setName(name);
	return c;
}
com.wiris.quizzes.impl.ComparisonAssertion.__super__ = com.wiris.quizzes.impl.Assertion;
com.wiris.quizzes.impl.ComparisonAssertion.prototype = $extend(com.wiris.quizzes.impl.Assertion.prototype,{
	removeParameter: function(name) {
		var value = this.getParameter(name);
		this.removeParam(com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterName2String(name));
		return value;
	}
	,getParameter: function(name) {
		return this.getParam(com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterName2String(name));
	}
	,setParameter: function(name,value) {
		this.setParam(com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterName2String(name),value);
	}
	,getName: function() {
		return com.wiris.quizzes.impl.QuizzesEnumUtils.string2ComparisonName(this.name);
	}
	,setName: function(name) {
		this.name = com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonName2String(name);
	}
	,__class__: com.wiris.quizzes.impl.ComparisonAssertion
});
com.wiris.quizzes.impl.CompoundAnswerParser = $hxClasses["com.wiris.quizzes.impl.CompoundAnswerParser"] = function() { }
com.wiris.quizzes.impl.CompoundAnswerParser.__name__ = ["com","wiris","quizzes","impl","CompoundAnswerParser"];
com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswer = function(math) {
	if(math == null || math.content == null) return new Array();
	if("text" == math.type) return com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswerText(math.content); else if("mathml" == math.type) return com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswerMathML(math.content); else return new Array();
}
com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswerText = function(correctAnswer) {
	var answers = new Array();
	var lines = correctAnswer.split("\n");
	var i;
	var _g1 = 0, _g = lines.length;
	while(_g1 < _g) {
		var i1 = _g1++;
		var line = lines[i1];
		var p = line.indexOf("=");
		if(p != -1) {
			var label = HxOverrides.substr(line,0,p + 1);
			var value = StringTools.trim(HxOverrides.substr(line,p + 1,null));
			answers.push([label,value]);
		}
	}
	return answers;
}
com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswerMathML = function(correctAnswer) {
	var answers = new Array();
	var newline = "<mspace linebreak=\"newline\"/>";
	var equal = "<mo>=</mo>";
	var mml = com.wiris.util.xml.MathMLUtils.convertEditor2Newlines(correctAnswer);
	var s = com.wiris.util.xml.MathMLUtils.splitRootTag(mml,"math");
	mml = com.wiris.util.xml.MathMLUtils.stripRootTag(s[1],"mrow");
	var lines = new Array();
	var start = 0;
	var end = 0;
	do {
		end = mml.indexOf(newline,start);
		var line = end > -1?HxOverrides.substr(mml,start,end - start):HxOverrides.substr(mml,start,null);
		if(lines.length > 0 && line.indexOf("<mo>=</mo>") == -1) {
			var lastElem = lines[lines.length - 1] + newline + line;
			lines[lines.length - 1] = lastElem;
		} else lines.push(line);
		start = end + newline.length;
	} while(end != -1);
	var i;
	var _g1 = 0, _g = lines.length;
	while(_g1 < _g) {
		var i1 = _g1++;
		var line = com.wiris.util.xml.MathMLUtils.stripRootTag(lines[i1],"mrow");
		var equalIndex = line.indexOf(equal);
		if(equalIndex != -1) {
			equalIndex += equal.length;
			var label = s[0] + HxOverrides.substr(line,0,equalIndex) + s[2];
			var value = HxOverrides.substr(line,equalIndex,null);
			var a = value.indexOf("<annotation encoding=\"text/plain\">");
			if(a != -1) {
				a = value.indexOf(">",a) + 1;
				var b = value.indexOf("</annotation>",a);
				value = HxOverrides.substr(value,a,b - a);
			} else value = s[0] + value + s[2];
			var answer = [label,value];
			answers.push(answer);
		}
	}
	return answers;
}
com.wiris.quizzes.impl.CompoundAnswerParser.compoundAnswerIsEquality = function(compoundAnswer) {
	if(compoundAnswer.length == 1) {
		var lhs = com.wiris.util.xml.MathMLUtils.mathMLToText(compoundAnswer[0][0]);
		return com.wiris.util.type.StringUtils.contains(lhs,"+") || com.wiris.util.type.StringUtils.contains(lhs,"*") || com.wiris.util.type.StringUtils.contains(lhs,"/") || lhs.indexOf("-") != lhs.lastIndexOf("-") || lhs == "y=" || lhs == "x=";
	} else return false;
}
com.wiris.quizzes.impl.CompoundAnswerParser.joinCompoundAnswer = function(answers) {
	var sb = new StringBuf();
	var m = new com.wiris.quizzes.impl.MathContent();
	if(answers.length > 0) {
		var mml = com.wiris.quizzes.impl.MathContent.getMathType(answers[0][0]) == com.wiris.quizzes.impl.MathContent.TYPE_MATHML;
		m.type = mml?com.wiris.quizzes.impl.MathContent.TYPE_MATHML:com.wiris.quizzes.impl.MathContent.TYPE_TEXT;
		var root = "<math>";
		var i;
		var _g1 = 0, _g = answers.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(i1 != 0) sb.b += Std.string(mml?"<mspace linebreak=\"newline\"/>":"\n");
			var ans = answers[i1];
			var s = com.wiris.util.xml.MathMLUtils.splitRootTag(ans[0],"math");
			sb.b += Std.string(s[1]);
			root = com.wiris.quizzes.impl.CompoundAnswerParser.combineTagAtts(root,s[0]);
			s = com.wiris.util.xml.MathMLUtils.splitRootTag(ans[1],"math");
			sb.b += Std.string(s[1]);
			root = com.wiris.quizzes.impl.CompoundAnswerParser.combineTagAtts(root,s[0]);
		}
		m.content = sb.b;
		if(mml) m.content = root + m.content + "</math>";
	} else m.set("");
	return m;
}
com.wiris.quizzes.impl.CompoundAnswerParser.combineTagAtts = function(t1,t2) {
	var p1 = t1.indexOf(" ");
	var p2 = t2.indexOf(" ");
	if(p1 == -1) return t2;
	if(p2 == -1) return t1;
	t1 = HxOverrides.substr(t1,0,t1.length - 1);
	t2 = HxOverrides.substr(t2,0,t2.length - 1);
	t2 = HxOverrides.substr(t2,p2 + 1,null);
	var atts = t2.split(" ");
	var i = 0;
	var _g1 = 0, _g = atts.length;
	while(_g1 < _g) {
		var i1 = _g1++;
		if(t1.indexOf(atts[i1]) == -1) t1 = t1 + " " + atts[i1];
	}
	t1 = t1 + ">";
	return t1;
}
com.wiris.quizzes.impl.CompoundAnswerParser.getCompoundInitialContent = function(correctAnswer,previousInitialContent,mathml) {
	var content = new com.wiris.quizzes.impl.MathContent();
	content.set(correctAnswer);
	var compoundModel = com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswer(content);
	content.set(previousInitialContent);
	var compoundInitialContent = com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswer(content);
	var i = 0;
	while(i < compoundModel.length) {
		if(i >= compoundInitialContent.length) {
			var part = new Array();
			part[0] = compoundModel[i][0];
			part[1] = "";
			compoundInitialContent.push(part);
		} else {
			compoundInitialContent[i][0] = compoundModel[i][0];
			if(mathml && com.wiris.quizzes.impl.MathContent.getMathType(compoundInitialContent[i][1]) == com.wiris.quizzes.impl.MathContent.TYPE_TEXT) {
				var tools = new com.wiris.quizzes.impl.HTMLTools();
				compoundInitialContent[i][1] = tools.textToMathML(compoundInitialContent[i][1]);
			}
		}
		i++;
	}
	while(i < compoundInitialContent.length) compoundInitialContent.pop();
	return com.wiris.quizzes.impl.CompoundAnswerParser.joinCompoundAnswer(compoundInitialContent).content;
}
com.wiris.quizzes.impl.ConfigurationImpl = $hxClasses["com.wiris.quizzes.impl.ConfigurationImpl"] = function() {
	this.properties = new Hash();
	this.set(com.wiris.quizzes.api.ConfigurationKeys.WIRIS_URL,com.wiris.quizzes.impl.ConfigurationImpl.DEF_WIRIS_URL);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.CALC_URL,com.wiris.quizzes.impl.ConfigurationImpl.DEF_CALC_URL);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.EDITOR_URL,com.wiris.quizzes.impl.ConfigurationImpl.DEF_EDITOR_URL);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.HAND_URL,com.wiris.quizzes.impl.ConfigurationImpl.DEF_HAND_URL);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.SERVICE_URL,com.wiris.quizzes.impl.ConfigurationImpl.DEF_SERVICE_URL);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL,com.wiris.quizzes.impl.ConfigurationImpl.DEF_PROXY_URL);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.CACHE_DIR,com.wiris.quizzes.impl.ConfigurationImpl.DEF_CACHE_DIR);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.MAXCONNECTIONS,com.wiris.quizzes.impl.ConfigurationImpl.DEF_MAXCONNECTIONS);
	this.set(com.wiris.quizzes.impl.ConfigurationImpl.CONFIG_FILE,com.wiris.quizzes.impl.ConfigurationImpl.DEF_CONFIG_FILE);
	this.set(com.wiris.quizzes.impl.ConfigurationImpl.CONFIG_CLASS,com.wiris.quizzes.impl.ConfigurationImpl.DEF_CONFIG_CLASS);
	this.set(com.wiris.quizzes.impl.ConfigurationImpl.CONFIG_CLASSPATH,com.wiris.quizzes.impl.ConfigurationImpl.DEF_CONFIG_CLASSPATH);
	this.set(com.wiris.quizzes.impl.ConfigurationImpl.IMAGESCACHE_CLASS,com.wiris.quizzes.impl.ConfigurationImpl.DEF_IMAGESCACHE_CLASS);
	this.set(com.wiris.quizzes.impl.ConfigurationImpl.VARIABLESCACHE_CLASS,com.wiris.quizzes.impl.ConfigurationImpl.DEF_VARIABLESCACHE_CLASS);
	this.set(com.wiris.quizzes.impl.ConfigurationImpl.LOCKPROVIDER_CLASS,com.wiris.quizzes.impl.ConfigurationImpl.DEF_LOCKPROVIDER_CLASS);
	this.set(com.wiris.quizzes.impl.ConfigurationImpl.ACCESSPROVIDER_CLASS,com.wiris.quizzes.impl.ConfigurationImpl.DEF_ACCESSPROVIDER_CLASS);
	this.set(com.wiris.quizzes.impl.ConfigurationImpl.ACCESSPROVIDER_CLASSPATH,com.wiris.quizzes.impl.ConfigurationImpl.DEF_ACCESSPROVIDER_CLASSPATH);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.HTTPPROXY_HOST,com.wiris.quizzes.impl.ConfigurationImpl.DEF_HTTPPROXY_HOST);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.HTTPPROXY_PORT,com.wiris.quizzes.impl.ConfigurationImpl.DEF_HTTPPROXY_PORT);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.HTTPPROXY_USER,com.wiris.quizzes.impl.ConfigurationImpl.DEF_HTTPPROXY_USER);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.HTTPPROXY_PASS,com.wiris.quizzes.impl.ConfigurationImpl.DEF_HTTPPROXY_PASS);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.REFERER_URL,com.wiris.quizzes.impl.ConfigurationImpl.DEF_REFERER_URL);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.HAND_ENABLED,com.wiris.quizzes.impl.ConfigurationImpl.DEF_HAND_ENABLED);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.CALC_ENABLED,com.wiris.quizzes.impl.ConfigurationImpl.DEF_CALC_ENABLED);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.SERVICE_OFFLINE,com.wiris.quizzes.impl.ConfigurationImpl.DEF_SERVICE_OFFLINE);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.HAND_LOGTRACES,com.wiris.quizzes.impl.ConfigurationImpl.DEF_HAND_LOGTRACES);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.WIRISLAUNCHER_URL,com.wiris.quizzes.impl.ConfigurationImpl.DEF_WIRISLAUNCHER_URL);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.CROSSORIGINCALLS_ENABLED,com.wiris.quizzes.impl.ConfigurationImpl.DEF_CROSSORIGINCALLS_ENABLED);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_STATIC,com.wiris.quizzes.impl.ConfigurationImpl.DEF_RESOURCES_STATIC);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.GRAPH_URL,com.wiris.quizzes.impl.ConfigurationImpl.DEF_GRAPH_URL);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.VERSION,com.wiris.quizzes.impl.ConfigurationImpl.DEF_VERSION);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.DEPLOYMENT_ID,com.wiris.quizzes.impl.ConfigurationImpl.DEF_DEPLOYMENT_ID);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.LICENSE_ID,com.wiris.quizzes.impl.ConfigurationImpl.DEF_LICENSE_ID);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.TELEMETRY_URL,com.wiris.quizzes.impl.ConfigurationImpl.DEF_TELEMETRY_URL);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.TELEMETRY_TOKEN,com.wiris.quizzes.impl.ConfigurationImpl.DEF_TELEMETRY_TOKEN);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.QUIZZES_LOGGING_LEVEL,com.wiris.quizzes.impl.ConfigurationImpl.DEF_QUIZZES_LOGGING_LEVEL);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.QUIZZES_TRACKING_ENABLED,com.wiris.quizzes.impl.ConfigurationImpl.DEF_QUIZZES_TRACKING_ENABLED);
	this.set(com.wiris.quizzes.api.ConfigurationKeys.GRAPH_TRACK_INSTANCES,com.wiris.quizzes.impl.ConfigurationImpl.DEF_GRAPH_TRACK_INSTANCES);
	if(!com.wiris.settings.PlatformSettings.IS_JAVASCRIPT) {
		try {
			var s = com.wiris.system.Storage.newStorage(com.wiris.quizzes.impl.ConfigurationImpl.DEF_DIST_CONFIG_FILE);
			if(!s.exists()) s = com.wiris.system.Storage.newResourceStorage(com.wiris.quizzes.impl.ConfigurationImpl.DEF_DIST_CONFIG_FILE);
			var content = s.read();
			var ini = com.wiris.util.sys.IniFile.newIniFileFromString(content);
			this.setAll(ini.getProperties());
		} catch( e ) {
			throw "Could not read the configuration file \"" + com.wiris.quizzes.impl.ConfigurationImpl.DEF_DIST_CONFIG_FILE + "\".";
		}
		var classpath = this.get(com.wiris.quizzes.impl.ConfigurationImpl.CONFIG_CLASSPATH);
		if(!(classpath == "")) com.wiris.quizzes.impl.ClasspathLoader.load(classpath);
		var className = this.get(com.wiris.quizzes.impl.ConfigurationImpl.CONFIG_CLASS);
		if(!(className == "")) try {
			var config = Type.createInstance(Type.resolveClass(className),new Array());
			var keys = [com.wiris.quizzes.api.ConfigurationKeys.WIRIS_URL,com.wiris.quizzes.api.ConfigurationKeys.WIRISLAUNCHER_URL,com.wiris.quizzes.api.ConfigurationKeys.CALC_URL,com.wiris.quizzes.api.ConfigurationKeys.EDITOR_URL,com.wiris.quizzes.api.ConfigurationKeys.HAND_URL,com.wiris.quizzes.api.ConfigurationKeys.SERVICE_URL,com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL,com.wiris.quizzes.api.ConfigurationKeys.CACHE_DIR,com.wiris.quizzes.api.ConfigurationKeys.MAXCONNECTIONS,com.wiris.quizzes.api.ConfigurationKeys.HTTPPROXY_HOST,com.wiris.quizzes.api.ConfigurationKeys.HTTPPROXY_PORT,com.wiris.quizzes.api.ConfigurationKeys.HTTPPROXY_USER,com.wiris.quizzes.api.ConfigurationKeys.HTTPPROXY_PASS,com.wiris.quizzes.api.ConfigurationKeys.REFERER_URL,com.wiris.quizzes.api.ConfigurationKeys.HAND_ENABLED,com.wiris.quizzes.api.ConfigurationKeys.CALC_ENABLED,com.wiris.quizzes.api.ConfigurationKeys.HAND_LOGTRACES,com.wiris.quizzes.api.ConfigurationKeys.SERVICE_OFFLINE,com.wiris.quizzes.api.ConfigurationKeys.CROSSORIGINCALLS_ENABLED,com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_STATIC,com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_URL,com.wiris.quizzes.api.ConfigurationKeys.GRAPH_URL,com.wiris.quizzes.api.ConfigurationKeys.DEPLOYMENT_ID,com.wiris.quizzes.api.ConfigurationKeys.LICENSE_ID,com.wiris.quizzes.impl.ConfigurationImpl.IMAGESCACHE_CLASS,com.wiris.quizzes.impl.ConfigurationImpl.VARIABLESCACHE_CLASS,com.wiris.quizzes.impl.ConfigurationImpl.LOCKPROVIDER_CLASS,com.wiris.quizzes.impl.ConfigurationImpl.ACCESSPROVIDER_CLASS];
			var i;
			var _g1 = 0, _g = keys.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var value = config.get(keys[i1]);
				if(value != null) this.set(keys[i1],value);
			}
		} catch( e ) {
			throw "Could not find the Configuration class \"" + className + "\".";
		}
		var file = this.properties.get(com.wiris.quizzes.impl.ConfigurationImpl.CONFIG_FILE);
		if(com.wiris.system.Storage.newStorage(file).exists() || com.wiris.system.Storage.newResourceStorage(file).exists()) try {
			var ini = com.wiris.util.sys.IniFile.newIniFileFromFilename(file);
			this.setAll(ini.getProperties());
		} catch( e ) {
			throw "Could not read configuration file \"" + file + "\".";
		}
		var vs = com.wiris.system.Storage.newResourceStorage(com.wiris.quizzes.impl.ConfigurationImpl.DEF_VERSION_FILE);
		if(vs.exists()) {
			var version = vs.read();
			this.set(com.wiris.quizzes.api.ConfigurationKeys.VERSION,version);
		}
	}
};
com.wiris.quizzes.impl.ConfigurationImpl.__name__ = ["com","wiris","quizzes","impl","ConfigurationImpl"];
com.wiris.quizzes.impl.ConfigurationImpl.__interfaces__ = [com.wiris.quizzes.api.Configuration];
com.wiris.quizzes.impl.ConfigurationImpl.getInstance = function() {
	if(com.wiris.quizzes.impl.ConfigurationImpl.config == null) com.wiris.quizzes.impl.ConfigurationImpl.config = new com.wiris.quizzes.impl.ConfigurationImpl();
	return com.wiris.quizzes.impl.ConfigurationImpl.config;
}
com.wiris.quizzes.impl.ConfigurationImpl.getUrlKeys = function() {
	var urls = [com.wiris.quizzes.api.ConfigurationKeys.WIRIS_URL,com.wiris.quizzes.api.ConfigurationKeys.EDITOR_URL,com.wiris.quizzes.api.ConfigurationKeys.SERVICE_URL,com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL,com.wiris.quizzes.api.ConfigurationKeys.HAND_URL,com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_URL,com.wiris.quizzes.api.ConfigurationKeys.WIRISLAUNCHER_URL,com.wiris.quizzes.api.ConfigurationKeys.CALC_URL,com.wiris.quizzes.api.ConfigurationKeys.GRAPH_URL];
	return urls;
}
com.wiris.quizzes.impl.ConfigurationImpl.setIsHttps = function(https) {
	com.wiris.quizzes.impl.ConfigurationImpl.isHttps = https;
}
com.wiris.quizzes.impl.ConfigurationImpl.prototype = {
	setHttps: function(url) {
		var newUrl = url;
		if(StringTools.startsWith(url,"http://")) newUrl = "https://" + HxOverrides.substr(url,7,null);
		return newUrl;
	}
	,jsEscape: function(text) {
		text = StringTools.replace(text,"\\","\\\\");
		text = StringTools.replace(text,"\"","\\\"");
		text = StringTools.replace(text,"\n","\\n");
		text = StringTools.replace(text,"\r","\\r");
		text = StringTools.replace(text,"\t","\\t");
		return text;
	}
	,getJSConfig: function() {
		var sb = new StringBuf();
		var prefix = "com.wiris.quizzes.impl.ConfigurationImpl.";
		sb.b += Std.string(prefix + "DEF_WIRIS_URL" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.WIRIS_URL)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_CALC_URL" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.CALC_URL)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_EDITOR_URL" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.EDITOR_URL)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_HAND_URL" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.HAND_URL)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_SERVICE_URL" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.SERVICE_URL)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_PROXY_URL" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_CACHE_DIR" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.CACHE_DIR)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_MAXCONNECTIONS" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.MAXCONNECTIONS)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_HAND_ENABLED" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.HAND_ENABLED)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_CALC_ENABLED" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.CALC_ENABLED)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_SERVICE_OFFLINE" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.SERVICE_OFFLINE)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_WIRISLAUNCHER_URL" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.WIRISLAUNCHER_URL)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_CROSSORIGINCALLS_ENABLED" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.CROSSORIGINCALLS_ENABLED)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_RESOURCES_STATIC" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_STATIC)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_HAND_LOGTRACES" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.HAND_LOGTRACES)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_GRAPH_URL" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.GRAPH_URL)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_VERSION" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.VERSION)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_DEPLOYMENT_ID" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.DEPLOYMENT_ID)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_LICENSE_ID" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.LICENSE_ID)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_TELEMETRY_URL" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.TELEMETRY_URL)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_TELEMETRY_TOKEN" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.TELEMETRY_TOKEN)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_QUIZZES_LOGGING_LEVEL" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.QUIZZES_LOGGING_LEVEL)) + "\";\n");
		sb.b += Std.string(prefix + "DEF_QUIZZES_TRACKING_ENABLED" + " = \"" + this.jsEscape(this.get(com.wiris.quizzes.api.ConfigurationKeys.QUIZZES_TRACKING_ENABLED)) + "\";\n");
		return sb.b;
	}
	,set: function(key,value) {
		if(com.wiris.quizzes.impl.ConfigurationImpl.isHttps) {
			var urls = com.wiris.quizzes.impl.ConfigurationImpl.getUrlKeys();
			if(com.wiris.util.type.Arrays.containsArray(urls,key)) value = this.setHttps(value);
		}
		this.properties.set(key,value);
	}
	,get: function(key) {
		return this.properties.get(key);
	}
	,setAll: function(props) {
		var it = props.keys();
		while(it.hasNext()) {
			var key = it.next();
			this.set(key,props.get(key));
		}
	}
	,loadFile: function(file) {
		var ini = com.wiris.util.sys.IniFile.newIniFileFromFilename(file);
		this.setAll(ini.getProperties());
	}
	,load: function(text) {
		var ini = com.wiris.util.sys.IniFile.newIniFileFromString(text);
		this.setAll(ini.getProperties());
	}
	,properties: null
	,__class__: com.wiris.quizzes.impl.ConfigurationImpl
}
com.wiris.quizzes.impl.CorrectAnswer = $hxClasses["com.wiris.quizzes.impl.CorrectAnswer"] = function() {
	com.wiris.quizzes.impl.MathContent.call(this);
	this.weight = 1.0;
	this.id = "0";
};
com.wiris.quizzes.impl.CorrectAnswer.__name__ = ["com","wiris","quizzes","impl","CorrectAnswer"];
com.wiris.quizzes.impl.CorrectAnswer.__super__ = com.wiris.quizzes.impl.MathContent;
com.wiris.quizzes.impl.CorrectAnswer.prototype = $extend(com.wiris.quizzes.impl.MathContent.prototype,{
	onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.CorrectAnswer.TAGNAME);
		this.id = s.attributeString("id",this.id,"0");
		this.weight = s.attributeFloat("weight",this.weight,1.0);
		this.reference = s.attributeString("ref",this.reference,null);
		com.wiris.quizzes.impl.MathContent.prototype.onSerializeInner.call(this,s);
		s.endTag();
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.CorrectAnswer();
	}
	,reference: null
	,id: null
	,weight: null
	,__class__: com.wiris.quizzes.impl.CorrectAnswer
});
com.wiris.quizzes.impl.EmbeddedAnswerFilter = $hxClasses["com.wiris.quizzes.impl.EmbeddedAnswerFilter"] = function() { }
com.wiris.quizzes.impl.EmbeddedAnswerFilter.__name__ = ["com","wiris","quizzes","impl","EmbeddedAnswerFilter"];
com.wiris.quizzes.impl.EmbeddedAnswerFilter.filterHTML = function(html,mode,q,qi) {
	if(html == null || html == "") return "";
	var regexp = new EReg("<(input|img|span)[^>]*(wrsUI_quizzesEmbeddedAuthoringField|wirisauthoringfield|wirisembeddedauthoringfield|wirisanswerfield)[^>]*(\\/>|>[^<]*<\\/(input|img|span)>)","gm");
	html = regexp.replace(html,"<<wirisembeddedanswerfield>>");
	var i = 0;
	var start = 0;
	var pos;
	var sb = new StringBuf();
	while((pos = html.indexOf("<<wirisembeddedanswerfield>>",start)) != -1) {
		sb.b += Std.string(HxOverrides.substr(html,start,pos - start));
		if(mode == com.wiris.quizzes.api.ui.EmbeddedAnswersEditorMode.AUTHORING) {
			var value = q.getCorrectAnswer(i);
			sb.b += Std.string("<input type=\"hidden\" class=\"wirisembeddedauthoringfield\" value=\"" + com.wiris.util.xml.WXmlUtils.htmlEscape(value) + "\" data-answer-index=\"" + i + "\" />");
		} else if(mode == com.wiris.quizzes.api.ui.EmbeddedAnswersEditorMode.DELIVERY) sb.b += Std.string("<input type=\"hidden\" class=\"wirisanswerfield wirisembedded\" value=\"\" />"); else if(mode == com.wiris.quizzes.api.ui.EmbeddedAnswersEditorMode.REVIEW) {
			var value = qi.getStudentAnswer(i);
			if(value == null) value = "";
			sb.b += Std.string("<input type=\"hidden\" class=\"wirisanswerfield wirisembedded wirisembeddedfeedback wirisassertionsfeedback wiriscorrectfeedback\" value=\"" + com.wiris.util.xml.WXmlUtils.htmlEscape(value) + "\" />");
		}
		i++;
		start = pos + 28;
	}
	sb.b += Std.string(HxOverrides.substr(html,start,null));
	return sb.b;
}
com.wiris.quizzes.impl.EmbeddedAnswersEditorImpl = $hxClasses["com.wiris.quizzes.impl.EmbeddedAnswersEditorImpl"] = function(question,instance) {
	this.question = question;
	this.instance = instance;
};
com.wiris.quizzes.impl.EmbeddedAnswersEditorImpl.__name__ = ["com","wiris","quizzes","impl","EmbeddedAnswersEditorImpl"];
com.wiris.quizzes.impl.EmbeddedAnswersEditorImpl.__interfaces__ = [com.wiris.quizzes.api.ui.EmbeddedAnswersEditor];
com.wiris.quizzes.impl.EmbeddedAnswersEditorImpl.prototype = {
	setReadOnly: function(readOnly) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,setStyle: function(key,value) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,showAnswerFieldPlainText: function(visible) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,showAnswerFieldPopupEditor: function(visible) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,showAnswerFieldInlineEditor: function(visible) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,getElement: function() {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
		return null;
	}
	,addQuizzesFieldListener: function(listener) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,setValue: function(value) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,getValue: function() {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
		return null;
	}
	,showGraphicSyntax: function(visible) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,showGradingFunction: function(visible) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,showAuxiliaryTextInput: function(visible) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,showAuxiliaryCasReplaceEditor: function(visible) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,showAuxiliaryCas: function(visible) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,showAuxiliarTextInput: function(visible) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,showAuxiliarCasReplaceEditor: function(visible) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,showAuxiliarCas: function(visible) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,showCorrectAnswer: function(visible) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,showGradingCriteria: function(visible) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,showVariablesDefinition: function(visible) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,showPreviewTab: function(visible) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,showVariablesTab: function(visible) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,showValidationTab: function(visible) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,showCorrectAnswerTab: function(visible) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,setConfiguration: function(configuration) {
	}
	,getFieldType: function() {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
		return com.wiris.quizzes.api.ui.AuthoringFieldType.EMBEDDED_ANSWERS_EDITOR;
	}
	,setFieldType: function(type) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,setEditableElement: function(element) {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,newEmbeddedAuthoringElement: function() {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
		return null;
	}
	,filterHTML: function(questionText,mode) {
		var q = this.question.getImpl();
		var qi = this.instance;
		return com.wiris.quizzes.impl.EmbeddedAnswerFilter.filterHTML(questionText,mode,q,qi);
	}
	,analyzeHTML: function() {
		com.wiris.quizzes.impl.QuizzesComponentBuilderImpl.throwNotImplementedInServerTechnology();
	}
	,instance: null
	,question: null
	,__class__: com.wiris.quizzes.impl.EmbeddedAnswersEditorImpl
}
if(!com.wiris.util.sys) com.wiris.util.sys = {}
com.wiris.util.sys.LockProvider = $hxClasses["com.wiris.util.sys.LockProvider"] = function() { }
com.wiris.util.sys.LockProvider.__name__ = ["com","wiris","util","sys","LockProvider"];
com.wiris.util.sys.LockProvider.prototype = {
	getLock: null
	,__class__: com.wiris.util.sys.LockProvider
}
com.wiris.quizzes.impl.FileLockProvider = $hxClasses["com.wiris.quizzes.impl.FileLockProvider"] = function(basedir) {
	this.basedir = com.wiris.system.Storage.newStorage(basedir);
};
com.wiris.quizzes.impl.FileLockProvider.__name__ = ["com","wiris","quizzes","impl","FileLockProvider"];
com.wiris.quizzes.impl.FileLockProvider.__interfaces__ = [com.wiris.util.sys.LockProvider];
com.wiris.quizzes.impl.FileLockProvider.prototype = {
	getLock: function(id) {
		var filename = com.wiris.system.Storage.newStorageWithParent(this.basedir,id).toString();
		return new com.wiris.quizzes.impl.FileLockWrapper(com.wiris.system.FileLock.getLock(filename,com.wiris.quizzes.impl.FileLockProvider.WAIT,com.wiris.quizzes.impl.FileLockProvider.TIMEOUT));
	}
	,basedir: null
	,__class__: com.wiris.quizzes.impl.FileLockProvider
}
com.wiris.util.sys.Lock = $hxClasses["com.wiris.util.sys.Lock"] = function() { }
com.wiris.util.sys.Lock.__name__ = ["com","wiris","util","sys","Lock"];
com.wiris.util.sys.Lock.prototype = {
	release: null
	,__class__: com.wiris.util.sys.Lock
}
com.wiris.quizzes.impl.FileLockWrapper = $hxClasses["com.wiris.quizzes.impl.FileLockWrapper"] = function(fl) {
	this.fl = fl;
};
com.wiris.quizzes.impl.FileLockWrapper.__name__ = ["com","wiris","quizzes","impl","FileLockWrapper"];
com.wiris.quizzes.impl.FileLockWrapper.__interfaces__ = [com.wiris.util.sys.Lock];
com.wiris.quizzes.impl.FileLockWrapper.prototype = {
	release: function() {
		this.fl.release();
	}
	,fl: null
	,__class__: com.wiris.quizzes.impl.FileLockWrapper
}
com.wiris.quizzes.impl.HTML = $hxClasses["com.wiris.quizzes.impl.HTML"] = function() {
	this.s = new StringBuf();
	this.tags = new Array();
};
com.wiris.quizzes.impl.HTML.__name__ = ["com","wiris","quizzes","impl","HTML"];
com.wiris.quizzes.impl.HTML.prototype = {
	openTd: function(className) {
		this.open("td",[["class",className]]);
	}
	,openTr: function(className) {
		this.open("tr",[["class",className]]);
	}
	,openTable: function(id,className) {
		this.open("table",[["id",id],["class",className]]);
	}
	,jsComponent: function(id,className,arg) {
		this.input("hidden",id,null,arg,null,"wirisjscomponent " + className);
	}
	,dd: function(text) {
		this.open("dd",null);
		this.text(text);
		this.close();
	}
	,dt: function(text) {
		this.open("dt",null);
		this.text(text);
		this.close();
	}
	,openDl: function(id,classes) {
		this.open("dl",[["id",id],["class",classes]]);
	}
	,formatText: function(text) {
		var ps = text.split("\n");
		var i;
		var _g1 = 0, _g = ps.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			this.openP();
			this.text(ps[i1]);
			this.close();
		}
	}
	,openPWithClass: function(className) {
		this.open("p",[["class",className]]);
	}
	,openP: function() {
		this.open("p",null);
	}
	,help: function(id,href,title) {
		this.openSpan(id + "span","wirishelp");
		this.open("a",[["id",id],["href",href],["class","wirishelp"],["title",title],["target","_blank"]]);
		this.close();
		this.close();
	}
	,openStrong: function() {
		this.open("strong",null);
	}
	,openA: function(id,href,className,target) {
		this.open("a",[["id",id],["href",href],["class",className],["target",target]]);
	}
	,select: function(id,name,options) {
		this.open("select",[["id",id],["name",name]]);
		var i;
		var _g1 = 0, _g = options.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			this.open("option",[["value",options[i1][0]]]);
			this.text(options[i1][1]);
			this.close();
		}
		this.close();
	}
	,openFieldset: function(id,legend,classes) {
		this.openCollapsibleFieldset(id,legend,classes,false,false);
	}
	,openCollapsibleFieldset: function(id,legend,classes,collapsible,collapsed) {
		var className = "wirisfieldset";
		if(classes != null && classes.length > 0) className += " " + classes;
		if(collapsible) {
			className += " wiriscollapsible";
			className += collapsed?" wiriscollapsed":" wirisexpanded";
		}
		this.open("fieldset",[["id",id],["class",className]]);
		this.open("legend",[["class",classes]]);
		if(collapsible) {
			className = "wiriscollapsiblea " + (collapsed?" wiriscollapsed":" wirisexpanded");
			this.open("a",[["href","#"],["class",className]]);
		}
		this.text(legend);
		if(collapsible) this.close();
		this.close();
		if(collapsible) {
			className = "wirisfieldsetwrapper " + (collapsed?" wiriscollapsed":" wirisexpanded");
			this.openDivClass(id + "-wrapper",className);
		}
	}
	,labelTitle: function(text,id,className,title) {
		this.open("label",[["for",id],["class",className],["title",title]]);
		this.text(text);
		this.close();
	}
	,label: function(text,id,className) {
		this.labelTitle(text,id,className,null);
	}
	,openLiClass: function(className) {
		this.open("li",[["class",className]]);
	}
	,openLi: function() {
		this.open("li",[]);
	}
	,li: function(content) {
		this.open("li",[]);
		this.text(content);
		this.close();
	}
	,openUl: function(id,className) {
		this.open("ul",[["id",id],["class",className]]);
	}
	,imageClass: function(src,title,className) {
		this.openclose("img",[["src",src],["alt",title],["title",title],["class",className]]);
	}
	,image: function(id,src,title,style) {
		this.openclose("img",[["id",id],["src",src],["alt",title],["title",title],["style",style]]);
	}
	,textarea: function(id,name,value,className,lang) {
		this.open("textarea",[["id",id],["name",name],["class",className],["lang",lang]]);
		this.text(value);
		this.close();
	}
	,input: function(type,id,name,value,title,className) {
		this.openclose("input",[["type",type],["id",id],["name",name],["value",value],["title",title],["class",className]]);
	}
	,js: function(code) {
		this.open("script",[["type","text/javascript"]]);
		this.text(code);
		this.close();
	}
	,openSpan: function(id,className) {
		this.open("span",[["id",id],["class",className]]);
	}
	,openDivClass: function(id,className) {
		this.open("div",[["id",id],["class",className]]);
	}
	,openDiv: function(id) {
		this.open("div",[["id",id]]);
	}
	,raw: function(raw) {
		this.s.b += Std.string(raw);
	}
	,getString: function() {
		if(this.tags.length > 0) throw "Malformed XML: tag " + this.tags.pop() + " is not closed.";
		return this.s.b;
	}
	,close: function() {
		if(this.tags.length == 0) throw "Malformed XML. No tag to close!";
		this.s.b += Std.string("</");
		this.s.b += Std.string(this.tags.pop());
		this.s.b += Std.string(">");
	}
	,text: function(text) {
		if(text != null) this.s.b += Std.string(com.wiris.util.xml.WXmlUtils.htmlEscape(text));
	}
	,textEm: function(text) {
		this.open("em",null);
		this.text(text);
		this.close();
	}
	,openclose: function(name,attributes) {
		this.start(name,attributes);
		this.s.b += Std.string("/>");
	}
	,open: function(name,attributes) {
		this.tags.push(name);
		this.start(name,attributes);
		this.s.b += Std.string(">");
	}
	,start: function(name,attributes) {
		this.s.b += Std.string("<");
		this.s.b += Std.string(name);
		if(attributes != null) {
			var i;
			var _g1 = 0, _g = attributes.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				if(attributes[i1].length == 2 && attributes[i1][0] != null && attributes[i1][1] != null) {
					this.s.b += Std.string(" ");
					this.s.b += Std.string(attributes[i1][0]);
					this.s.b += Std.string("=\"");
					this.s.b += Std.string(com.wiris.util.xml.WXmlUtils.htmlEscape(attributes[i1][1]));
					this.s.b += Std.string("\"");
				}
			}
		}
	}
	,tags: null
	,s: null
	,__class__: com.wiris.quizzes.impl.HTML
}
com.wiris.quizzes.impl.HTMLTableTools = $hxClasses["com.wiris.quizzes.impl.HTMLTableTools"] = function(separator) {
	this.separator = separator;
};
com.wiris.quizzes.impl.HTMLTableTools.__name__ = ["com","wiris","quizzes","impl","HTMLTableTools"];
com.wiris.quizzes.impl.HTMLTableTools.stripTags = function(html) {
	var e = new EReg("<[^>]*>","g");
	return e.replace(html,"");
}
com.wiris.quizzes.impl.HTMLTableTools.prototype = {
	removeRootTag: function(xml,name) {
		if(StringTools.startsWith(xml,"<" + name) && StringTools.endsWith(xml,"</" + name + ">")) {
			xml = HxOverrides.substr(xml,xml.indexOf(">") + 1,null);
			xml = HxOverrides.substr(xml,0,xml.length - (name.length + 3));
		}
		return xml;
	}
	,parseTabularVariableMathML: function(value) {
		var parts = new Array();
		value = this.removeRootTag(value,"math");
		value = this.removeRootTag(value,"mrow");
		value = this.removeRootTag(value,"mfenced");
		value = this.removeRootTag(value,"mrow");
		var level = 0;
		var end = 0;
		var start;
		var lastindex = 0;
		while((start = value.indexOf("<",end)) != -1) {
			var closing = false;
			end = value.indexOf(">",start);
			if(HxOverrides.cca(value,start + 1) == HxOverrides.cca("/",0)) {
				start++;
				closing = true;
			}
			var name = HxOverrides.substr(value,start + 1,end - start - 1);
			if(!closing) {
				var aux = name.indexOf(" ");
				if(aux != -1) name = HxOverrides.substr(name,0,aux);
				if(name == "mo" && !closing) {
					var op = HxOverrides.substr(value,end + 1,1);
					if(op == "{" || op == "[" || op == "(") level++; else if(op == "}" || op == "]" || op == ")") level--; else if(op == this.separator && level == 0) {
						parts.push(com.wiris.quizzes.impl.HTMLTools.addMathTag(HxOverrides.substr(value,lastindex,start - lastindex)));
						lastindex = end + 7;
					}
				}
			}
			if(name == "mfenced") level += closing?-1:1;
		}
		parts.push(com.wiris.quizzes.impl.HTMLTools.addMathTag(HxOverrides.substr(value,lastindex,null)));
		return parts;
	}
	,parseTabularVariableText: function(value) {
		var parts = new Array();
		value = HxOverrides.substr(value,1,value.length - 2);
		var s = this.separator != null?HxOverrides.cca(this.separator,0):HxOverrides.cca(",",0);
		var i;
		var level = 0;
		var token = new StringBuf();
		var open = [HxOverrides.cca("{",0),HxOverrides.cca("[",0),HxOverrides.cca("(",0)];
		var close = [HxOverrides.cca("}",0),HxOverrides.cca("]",0),HxOverrides.cca(")",0)];
		var _g1 = 0, _g = value.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			var c = HxOverrides.cca(value,i1);
			if(c == s && level == 0) {
				parts.push(token.b);
				token = new StringBuf();
			} else {
				token.b += String.fromCharCode(c);
				if(c == open[0] || c == open[1] || c == open[2]) level++; else if(c == close[0] || c == close[1] || c == close[2]) level--;
			}
		}
		parts.push(token.b);
		return parts;
	}
	,parseTabularVariable: function(name,variables) {
		var v = variables.get(com.wiris.quizzes.impl.MathContent.TYPE_MATHML);
		if(v != null && v.exists(name)) return this.parseTabularVariableMathML(v.get(name));
		v = variables.get(com.wiris.quizzes.impl.MathContent.TYPE_TEXT);
		if(v != null && v.exists(name)) return this.parseTabularVariableText(v.get(name));
		return null;
	}
	,parseMathMLMatrix: function(mathml) {
		var res = new Array();
		var start;
		var end = 0;
		while((start = mathml.indexOf("<mtr",end)) != -1) {
			start = mathml.indexOf(">",start) + 1;
			end = mathml.indexOf("</mtr>",start);
			var row = HxOverrides.substr(mathml,start,end - start);
			var a = new Array();
			var rstart;
			var rend = 0;
			while((rstart = row.indexOf("<mtd",rend)) != -1) {
				rstart = row.indexOf(">",rstart) + 1;
				rend = row.indexOf("</mtd>",rstart);
				var cell = com.wiris.quizzes.impl.HTMLTools.addMathTag(HxOverrides.substr(row,rstart,rend - rstart));
				a.push(cell);
			}
			res.push(a);
		}
		return res;
	}
	,parseTabularVariable2d: function(name,variables) {
		var v = variables.get(com.wiris.quizzes.impl.MathContent.TYPE_MATHML);
		if(v != null && v.exists(name)) {
			var mathml = v.get(name);
			if(mathml.indexOf("<mtable") != -1) return this.parseMathMLMatrix(mathml); else {
				var res = new Array();
				var rows = this.parseTabularVariableMathML(mathml);
				var i;
				var _g1 = 0, _g = rows.length;
				while(_g1 < _g) {
					var i1 = _g1++;
					res.push(this.parseTabularVariableMathML(rows[i1]));
				}
				return res;
			}
		}
		v = variables.get(com.wiris.quizzes.impl.MathContent.TYPE_TEXT);
		if(v != null && v.exists(name)) {
			var res = new Array();
			var rows = this.parseTabularVariableText(v.get(name));
			var i;
			var _g1 = 0, _g = rows.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				res.push(this.parseTabularVariableText(rows[i1]));
			}
			return res;
		}
		return null;
	}
	,isTabularMathMLVariable2d: function(value) {
		this.initTabularERegs();
		return this.mathmllist2d.match(value) || this.mathmlmatrix.match(value);
	}
	,isTabularTextVariable2d: function(value) {
		this.initTabularERegs();
		return this.textlist2d.match(value);
	}
	,isTabularTextVariable: function(value) {
		this.initTabularERegs();
		return this.textlist.match(value);
	}
	,isTabularMathMLVariable: function(value) {
		this.initTabularERegs();
		return this.mathmllist.match(value);
	}
	,initMathMLTabularERegs: function() {
		var om = "(<math[^>]*>)?(<mrow[^>]*>)?";
		var cm = "(</mrow>)?(</math>)?";
		var ol = "<mfenced(\\s+open\\s*=\\s*\"[\\[\\{]\"|\\s+close\\s*=\\s*\"[\\]\\}]\"){2}\\s*><mrow>";
		var cl = "</mrow></mfenced>";
		var s = "<mo>\\" + this.separator + "</mo>";
		var x = "[^\\" + this.separator + "]*";
		var list = ol + "(" + x + s + ")*" + x + cl;
		var list2d = ol + "(" + list + s + ")*" + list + cl;
		this.mathmllist = new EReg(om + list + cm,"m");
		this.mathmllist2d = new EReg(om + list2d + cm,"m");
		var ot = "<mfenced><mtable>";
		var ct = "</mtable></mfenced>";
		var cell = "<mtd>.*?</mtd>";
		var row = "<mtr>" + "(" + cell + ")+" + "</mtr>";
		var matrix = ot + "(" + row + ")+" + ct;
		this.mathmlmatrix = new EReg(om + matrix + cm,"g");
	}
	,initTextTabularERegs: function() {
		var s = "\\" + this.separator;
		var o = "[\\[\\{]";
		var c = "[\\}\\]]";
		var x = "[^\\[\\{\\}\\]" + s + "]*";
		var list = o + "(" + x + s + ")*" + x + c;
		var list2d = o + "(" + list + s + ")*" + list + c;
		this.textlist = new EReg(list,"g");
		this.textlist2d = new EReg(list2d,"g");
	}
	,initTabularERegs: function() {
		if(this.textlist == null) {
			this.initTextTabularERegs();
			this.initMathMLTabularERegs();
		}
	}
	,isCellExpandableImpl: function(cell,variables,is2d) {
		if(cell.indexOf("<input") != -1) return false;
		var h = new com.wiris.quizzes.impl.HTMLTools();
		var start;
		var end = 0;
		while((start = cell.indexOf("<math",end)) != -1) {
			end = cell.indexOf("</math>",start) + 7;
			if(!h.isTokensMathML(HxOverrides.substr(cell,start,end - start))) return false;
		}
		var content = StringTools.trim(com.wiris.quizzes.impl.HTMLTableTools.stripTags(cell));
		if(StringTools.startsWith(content,"#")) {
			content = HxOverrides.substr(content,1,null);
			if(cell.indexOf("#" + content) != -1) {
				var v = variables.get(com.wiris.quizzes.impl.MathContent.TYPE_MATHML);
				if(v != null && v.exists(content)) {
					if(is2d && this.isTabularMathMLVariable2d(v.get(content)) || !is2d && this.isTabularMathMLVariable(v.get(content))) return true;
				}
				v = variables.get(com.wiris.quizzes.impl.MathContent.TYPE_TEXT);
				if(v != null && v.exists(content)) {
					if(is2d && this.isTabularTextVariable2d(v.get(content)) || !is2d && this.isTabularTextVariable(v.get(content))) return true;
				}
			}
		}
		return false;
	}
	,isCellExpandable: function(cell,variables) {
		return this.isCellExpandableImpl(cell,variables,false);
	}
	,isCellExpandable2d: function(cell,variables) {
		return this.isCellExpandableImpl(cell,variables,true);
	}
	,setClass: function(element,name) {
		var end = element.indexOf(">");
		if(end != -1) {
			var tag = HxOverrides.substr(element,0,end + 1);
			var e = new EReg("<\\w+[^>]*\\s+class\\s*=\\s*\"[^\"]*\"[^>]*>","g");
			if(!e.match(tag)) {
				tag = HxOverrides.substr(tag,0,end) + " class=\"" + name + "\">";
				element = tag + HxOverrides.substr(element,end + 1,null);
			}
		}
		return element;
	}
	,expandVertical: function(rows,grid,variables) {
		var i;
		var _g1 = 0, _g = grid.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			var thisrow = true;
			var j = 0;
			while(thisrow && j < grid[i1].length) {
				thisrow = this.isCellExpandable(grid[i1][j],variables);
				j++;
			}
			if(thisrow && j > 0) {
				var opentds = new Array();
				var closetds = new Array();
				var vars = new Array();
				var n = -1;
				var _g3 = 0, _g2 = grid[i1].length;
				while(_g3 < _g2) {
					var j1 = _g3++;
					var model = this.getModel(grid[i1][j1]);
					var placeholder = StringTools.trim(com.wiris.quizzes.impl.HTMLTableTools.stripTags(model));
					var pos = model.indexOf(placeholder);
					opentds[j1] = HxOverrides.substr(model,0,pos);
					closetds[j1] = HxOverrides.substr(model,pos + placeholder.length,null);
					var parsed = this.parseTabularVariable(HxOverrides.substr(placeholder,1,null),variables);
					vars.push(parsed);
					if(parsed.length > n) n = parsed.length;
				}
				var original = rows[2 * i1 + 1];
				var bounds = this.rowBounds(original);
				var row = new StringBuf();
				var k;
				var _g2 = 0;
				while(_g2 < n) {
					var k1 = _g2++;
					row.b += Std.string(bounds[0]);
					var _g4 = 0, _g3 = opentds.length;
					while(_g4 < _g3) {
						var j1 = _g4++;
						row.b += Std.string(opentds[j1]);
						if(k1 < vars[j1].length) row.b += Std.string(vars[j1][k1]);
						row.b += Std.string(closetds[j1]);
					}
					row.b += Std.string(bounds[1]);
				}
				rows[2 * i1 + 1] = row.b;
				return rows.join("");
			}
		}
		return null;
	}
	,reconstructHorizontalExpand: function(rows,grid) {
		var newTable = new StringBuf();
		var i;
		var _g1 = 0, _g = grid.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			newTable.b += Std.string(rows[2 * i1]);
			var row = rows[2 * i1 + 1];
			var bounds = this.rowBounds(row);
			newTable.b += Std.string(bounds[0]);
			var j;
			var _g3 = 0, _g2 = grid[i1].length;
			while(_g3 < _g2) {
				var j1 = _g3++;
				newTable.b += Std.string(grid[i1][j1]);
			}
			newTable.b += Std.string(bounds[1]);
		}
		newTable.b += Std.string(rows[2 * grid.length]);
		return newTable.b;
	}
	,joinTds: function(model,values) {
		var placeholder = StringTools.trim(com.wiris.quizzes.impl.HTMLTableTools.stripTags(model));
		var pos = model.indexOf(placeholder);
		var prefix = HxOverrides.substr(model,0,pos);
		var suffix = HxOverrides.substr(model,pos + placeholder.length,null);
		var sb = new StringBuf();
		var k;
		var _g1 = 0, _g = values.length;
		while(_g1 < _g) {
			var k1 = _g1++;
			sb.b += Std.string(prefix);
			sb.b += Std.string(values[k1]);
			sb.b += Std.string(suffix);
		}
		return sb.b;
	}
	,getModel: function(cell) {
		if(cell.indexOf("<math") == -1) return cell;
		var placeholder = StringTools.trim(com.wiris.quizzes.impl.HTMLTableTools.stripTags(cell));
		var pos = cell.indexOf(placeholder);
		var prefix = HxOverrides.substr(cell,0,pos);
		var suffix = HxOverrides.substr(cell,pos + placeholder.length,null);
		if((pos = prefix.indexOf("<math")) != -1) prefix = HxOverrides.substr(prefix,0,pos);
		if((pos = suffix.indexOf("</math>")) != -1) suffix = HxOverrides.substr(suffix,pos + 7,null);
		return prefix + placeholder + suffix;
	}
	,expandHorizontal: function(rows,grid,variables) {
		var j = 0;
		var end = false;
		while(!end) {
			var thiscolumn = true;
			var i = 0;
			while(i < grid.length && thiscolumn && !end) {
				var thiscell = false;
				if(j < grid[i].length) thiscell = this.isCellExpandable(grid[i][j],variables); else end = true;
				thiscolumn = thiscolumn && thiscell;
				i++;
			}
			end = end || i == 0;
			if(thiscolumn && !end) {
				end = true;
				var _g1 = 0, _g = grid.length;
				while(_g1 < _g) {
					var i1 = _g1++;
					var model = this.getModel(grid[i1][j]);
					var parsed = this.parseTabularVariable(HxOverrides.substr(StringTools.trim(com.wiris.quizzes.impl.HTMLTableTools.stripTags(model)),1,null),variables);
					var tds = this.joinTds(model,parsed);
					grid[i1][j] = tds;
				}
				return this.reconstructHorizontalExpand(rows,grid);
			}
			j++;
		}
		return null;
	}
	,expand2d: function(rows,grid,variables) {
		var expand = this.expandVertical2d(rows,grid,variables);
		if(expand == null) expand = this.expandHorizontal2d(rows,grid,variables);
		if(expand == null) expand = this.expandBoth(rows,grid,variables);
		return expand;
	}
	,expandBoth: function(rows,grid,variables) {
		var i;
		var j;
		var vars = new Array();
		var expand = true;
		i = 0;
		while(expand && i < grid.length) {
			var nrows = -1;
			var row = grid[i];
			vars.push(new Array());
			j = 0;
			while(expand && j < row.length) {
				var cell = row[j];
				if(this.isCellExpandable2d(cell,variables)) {
					var name = HxOverrides.substr(StringTools.trim(com.wiris.quizzes.impl.HTMLTableTools.stripTags(cell)),1,null);
					var p = this.parseTabularVariable2d(name,variables);
					vars[i].push(p);
					if(nrows == -1) nrows = p.length; else if(nrows != p.length) expand = false;
				} else if(this.isCellExpandable(cell,variables)) {
					var name = HxOverrides.substr(StringTools.trim(com.wiris.quizzes.impl.HTMLTableTools.stripTags(cell)),1,null);
					var p = this.parseTabularVariable(name,variables);
					if(nrows == -1) {
						if(row.length == 1) nrows = 1; else nrows = p.length;
					}
					var pp;
					if(nrows == 1) {
						pp = new Array();
						pp.push(p);
						vars[i].push(pp);
					} else if(nrows == p.length) {
						pp = this.transposeColumn(p);
						vars[i].push(pp);
					} else expand = false;
				} else expand = false;
				j++;
			}
			expand = expand && j > 0;
			i++;
		}
		if(expand && i > 0) {
			var _g1 = 0, _g = grid.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var original = rows[2 * i1 + 1];
				var bounds = this.rowBounds(original);
				var sb = new StringBuf();
				var k;
				var first = vars[i1][0];
				var _g3 = 0, _g2 = first.length;
				while(_g3 < _g2) {
					var k1 = _g3++;
					sb.b += Std.string(bounds[0]);
					var _g5 = 0, _g4 = grid[i1].length;
					while(_g5 < _g4) {
						var j1 = _g5++;
						var model = this.getModel(grid[i1][j1]);
						var x = vars[i1][j1];
						var tds = this.joinTds(model,x[k1]);
						sb.b += Std.string(tds);
					}
					sb.b += Std.string(bounds[1]);
				}
				rows[2 * i1 + 1] = sb.b;
			}
			return rows.join("");
		}
		return null;
	}
	,expandHorizontal2d: function(rows,grid,variables) {
		var i;
		var j = 0;
		var end = grid.length == 0;
		while(!end) {
			var thiscolumn = true;
			i = 0;
			while(i < grid.length && thiscolumn && !end) {
				var thiscell = false;
				if(j < grid[i].length) {
					var cell = grid[i][j];
					thiscell = this.isCellExpandable2d(cell,variables);
					if(thiscell) {
						var name = HxOverrides.substr(StringTools.trim(com.wiris.quizzes.impl.HTMLTableTools.stripTags(cell)),1,null);
						var p = this.parseTabularVariable2d(name,variables);
						thiscell = this.isSubgridEmpty(grid,i,j,p.length,1);
						i += p.length;
					}
				} else end = true;
				thiscolumn = thiscolumn && thiscell;
			}
			if(thiscolumn && !end) {
				end = true;
				i = 0;
				while(i < grid.length) {
					var model = grid[i][j];
					var name = HxOverrides.substr(StringTools.trim(com.wiris.quizzes.impl.HTMLTableTools.stripTags(model)),1,null);
					var p = this.parseTabularVariable2d(name,variables);
					var k;
					var _g1 = 0, _g = p.length;
					while(_g1 < _g) {
						var k1 = _g1++;
						var tds = this.joinTds(model,p[k1]);
						grid[i + k1][j] = tds;
					}
					i += p.length;
				}
				return this.reconstructHorizontalExpand(rows,grid);
			}
			j++;
		}
		return null;
	}
	,expandVertical2d: function(rows,grid,variables) {
		var i;
		var _g1 = 0, _g = grid.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			var row = grid[i1];
			var thisrow = true;
			var n = -1;
			var j = 0;
			while(thisrow && j < row.length) {
				var cell = row[j];
				if(this.isCellExpandable2d(cell,variables)) {
					var name = HxOverrides.substr(StringTools.trim(com.wiris.quizzes.impl.HTMLTableTools.stripTags(cell)),1,null);
					var p = this.parseTabularVariable2d(name,variables);
					if(p.length > n) n = p.length;
					if(this.isSubgridEmpty(grid,i1,j,1,p[0].length)) j += p[0].length; else thisrow = false;
				} else thisrow = false;
			}
			if(thisrow && j > 0) {
				var opentds = new Array();
				var closetds = new Array();
				var vars = new Array();
				var k;
				var _g2 = 0;
				while(_g2 < n) {
					var k1 = _g2++;
					vars[k1] = new Array();
				}
				j = 0;
				while(j < row.length) {
					var model = grid[i1][j];
					var placeholder = StringTools.trim(com.wiris.quizzes.impl.HTMLTableTools.stripTags(model));
					var pos = model.indexOf(placeholder);
					opentds[j] = HxOverrides.substr(model,0,pos);
					closetds[j] = HxOverrides.substr(model,pos + placeholder.length,null);
					var name = HxOverrides.substr(placeholder,1,null);
					var p = this.parseTabularVariable2d(name,variables);
					var _g3 = 0, _g2 = p[0].length;
					while(_g3 < _g2) {
						var k1 = _g3++;
						opentds[j + k1] = opentds[j];
						closetds[j + k1] = closetds[j];
						var l;
						var _g5 = 0, _g4 = p.length;
						while(_g5 < _g4) {
							var l1 = _g5++;
							vars[l1][j + k1] = p[l1][k1];
						}
					}
					j += p[0].length;
				}
				var original = rows[2 * i1 + 1];
				var bounds = this.rowBounds(original);
				var s = new StringBuf();
				var _g2 = 0;
				while(_g2 < n) {
					var k1 = _g2++;
					s.b += Std.string(bounds[0]);
					var _g4 = 0, _g3 = row.length;
					while(_g4 < _g3) {
						var j1 = _g4++;
						s.b += Std.string(opentds[j1]);
						s.b += Std.string(vars[k1][j1]);
						s.b += Std.string(closetds[j1]);
					}
					s.b += Std.string(bounds[1]);
				}
				rows[2 * i1 + 1] = s.b;
				return rows.join("");
			}
		}
		return null;
	}
	,expandNoGrow: function(rows,grid,variables) {
		var expanded = false;
		var i;
		var _g1 = 0, _g = grid.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			var j;
			var _g3 = 0, _g2 = grid[i1].length;
			while(_g3 < _g2) {
				var j1 = _g3++;
				var cell = grid[i1][j1];
				if(this.isCellExpandable2d(cell,variables)) {
					var name = HxOverrides.substr(StringTools.trim(com.wiris.quizzes.impl.HTMLTableTools.stripTags(cell)),1,null);
					var p = this.parseTabularVariable2d(name,variables);
					if(this.isSubgridEmpty(grid,i1,j1,p.length,p[0].length)) {
						this.expandOnEmptySubgrid(grid,i1,j1,p);
						expanded = true;
					}
				} else if(this.isCellExpandable(cell,variables)) {
					var name = HxOverrides.substr(StringTools.trim(com.wiris.quizzes.impl.HTMLTableTools.stripTags(cell)),1,null);
					var p = this.parseTabularVariable(name,variables);
					if(this.isSubgridEmpty(grid,i1,j1,1,p.length)) {
						var row = new Array();
						row.push(p);
						this.expandOnEmptySubgrid(grid,i1,j1,row);
						expanded = true;
					} else if(this.isSubgridEmpty(grid,i1,j1,p.length,1)) {
						var column = this.transposeColumn(p);
						this.expandOnEmptySubgrid(grid,i1,j1,column);
						expanded = true;
					}
				}
			}
		}
		if(expanded) return this.reconstructHorizontalExpand(rows,grid);
		return null;
	}
	,transposeColumn: function(p) {
		var column = new Array();
		var k;
		var _g1 = 0, _g = p.length;
		while(_g1 < _g) {
			var k1 = _g1++;
			var a = new Array();
			a.push(p[k1]);
			column.push(a);
		}
		return column;
	}
	,expandOnEmptySubgrid: function(grid,i,j,p) {
		var k;
		var _g1 = 0, _g = p.length;
		while(_g1 < _g) {
			var k1 = _g1++;
			var l;
			var _g3 = 0, _g2 = p[k1].length;
			while(_g3 < _g2) {
				var l1 = _g3++;
				var cell = grid[i + k1][j + l1];
				var prefix = HxOverrides.substr(cell,0,cell.indexOf(">") + 1);
				var suffix = HxOverrides.substr(cell,cell.lastIndexOf("<"),null);
				grid[i + k1][j + l1] = prefix + p[k1][l1] + suffix;
			}
		}
	}
	,isEmptyCell: function(cell) {
		cell = com.wiris.quizzes.impl.HTMLTableTools.stripTags(cell);
		cell = com.wiris.util.xml.WXmlUtils.htmlUnescape(cell);
		cell = StringTools.replace(cell,"&nbsp;","");
		cell = StringTools.replace(cell,com.wiris.system.Utf8.uchr(160),"");
		cell = StringTools.trim(cell);
		return cell == "";
	}
	,isSubgridEmpty: function(grid,i,j,w,h) {
		if(i + w > grid.length) return false;
		var k;
		var _g1 = i, _g = i + w;
		while(_g1 < _g) {
			var k1 = _g1++;
			if(j + h > grid[k1].length) return false;
			var l;
			var _g3 = j, _g2 = j + h;
			while(_g3 < _g2) {
				var l1 = _g3++;
				if(k1 != i || l1 != j) {
					if(!this.isEmptyCell(grid[k1][l1])) return false;
				}
			}
		}
		return true;
	}
	,parseTableCells: function(rows) {
		var grid = new Array();
		var i = 1;
		while(i < rows.length) {
			var cells = new Array();
			var row = rows[i];
			var tdstart;
			var tdend = 0;
			while((tdstart = this.tdStartPosition(row,tdend)) != -1) {
				tdend = this.tdEndPosition(row,tdstart);
				if(tdend == -1) tdend = row.length; else tdend += 5;
				cells.push(HxOverrides.substr(row,tdstart,tdend - tdstart));
			}
			grid.push(cells);
			i += 2;
		}
		return grid;
	}
	,rowBounds: function(row) {
		var bounds = new Array();
		bounds[0] = HxOverrides.substr(row,0,this.tdStartPosition(row,0));
		var pos = com.wiris.util.type.IntegerTools.max(row.lastIndexOf("</td>"),row.lastIndexOf("</th>")) + "</th>".length;
		bounds[1] = HxOverrides.substr(row,pos,null);
		return bounds;
	}
	,tdEndPosition: function(row,offset) {
		var a = row.indexOf("</td>",offset);
		var b = row.indexOf("</th>",offset);
		return b == -1?a:a == -1?b:com.wiris.util.type.IntegerTools.min(a,b);
	}
	,tdStartPosition: function(row,offset) {
		var pos = -1;
		var start = ["<td ","<td>","<th ","<th>"];
		var i;
		var _g1 = 0, _g = start.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			var c = row.indexOf(start[i1],offset);
			if(c != -1 && c < pos || pos == -1) pos = c;
		}
		return pos;
	}
	,splitTableRows: function(table) {
		var rows = new Array();
		var trend = 0;
		var trstart;
		while((trstart = table.indexOf("<tr",trend)) != -1) {
			rows.push(HxOverrides.substr(table,trend,trstart - trend));
			trend = table.indexOf("</tr>",trstart);
			if(trend == -1) {
				var last = rows[rows.length - 1];
				rows[rows.length - 1] = last + HxOverrides.substr(table,trstart,null);
				trend = table.length;
			} else {
				trend += "</tr>".length;
				rows.push(HxOverrides.substr(table,trstart,trend - trstart));
			}
		}
		if(trend < table.length) rows.push(HxOverrides.substr(table,trend,null));
		return rows;
	}
	,replaceVariablesInsideHTMLTables: function(html,variables) {
		var tend = 0;
		var tstart;
		while((tstart = html.indexOf("<table",tend)) != -1) {
			tend = html.indexOf("</table>",tstart);
			if(tend == -1) return html;
			tend += "</table>".length;
			var table = HxOverrides.substr(html,tstart,tend - tstart);
			var rows = this.splitTableRows(table);
			var grid = this.parseTableCells(rows);
			var expanded = this.expandNoGrow(rows,grid,variables);
			if(expanded == null) {
				expanded = this.expand2d(rows,grid,variables);
				if(expanded == null) {
					expanded = this.expandHorizontal(rows,grid,variables);
					if(expanded == null) expanded = this.expandVertical(rows,grid,variables);
				}
			}
			if(expanded != null) {
				expanded = this.setClass(expanded,"wiristable");
				html = HxOverrides.substr(html,0,tstart) + expanded + HxOverrides.substr(html,tend,null);
				tend = tstart + expanded.length;
			}
		}
		return html;
	}
	,mathmlmatrix: null
	,mathmllist2d: null
	,textlist2d: null
	,mathmllist: null
	,textlist: null
	,separator: null
	,__class__: com.wiris.quizzes.impl.HTMLTableTools
}
com.wiris.quizzes.impl.HTMLTools = $hxClasses["com.wiris.quizzes.impl.HTMLTools"] = function() {
	this.separator = ",";
};
com.wiris.quizzes.impl.HTMLTools.__name__ = ["com","wiris","quizzes","impl","HTMLTools"];
com.wiris.quizzes.impl.HTMLTools.toNativeArray = function(a) {
	var n = new Array();
	var k;
	var _g1 = 0, _g = a.length;
	while(_g1 < _g) {
		var k1 = _g1++;
		n[k1] = a[k1];
	}
	return n;
}
com.wiris.quizzes.impl.HTMLTools.insertStringInSortedArray = function(s,a) {
	if(s != null) {
		var i = 0;
		while(i < a.length) {
			if(com.wiris.quizzes.impl.HTMLTools.compareStrings(a[i],s) >= 0) break;
			i++;
		}
		if(i < a.length) {
			if(!(a[i] == s)) a.splice(i,0,s);
		} else a.push(s);
	}
}
com.wiris.quizzes.impl.HTMLTools.encodeUnicodeChars = function(mathml) {
	var sb = new StringBuf();
	var i;
	var _g1 = 0, _g = mathml.length;
	while(_g1 < _g) {
		var i1 = _g1++;
		var c = HxOverrides.cca(mathml,i1);
		if(c > 127) {
			sb.b += Std.string("&#");
			sb.b += Std.string(c);
			sb.b += Std.string(";");
		} else sb.b += String.fromCharCode(c);
	}
	return sb.b;
}
com.wiris.quizzes.impl.HTMLTools.compareStrings = function(a,b) {
	var i;
	var an = a.length;
	var bn = b.length;
	var n = an > bn?bn:an;
	var _g = 0;
	while(_g < n) {
		var i1 = _g++;
		var c = HxOverrides.cca(a,i1) - HxOverrides.cca(b,i1);
		if(c != 0) return c;
	}
	return a.length - b.length;
}
com.wiris.quizzes.impl.HTMLTools.addMathTag = function(mathml) {
	if(!StringTools.startsWith(mathml,"<math")) mathml = "<math xmlns=\"http://www.w3.org/1998/Math/MathML\">" + mathml + "</math>";
	return mathml;
}
com.wiris.quizzes.impl.HTMLTools.emptyCasSession = function(value) {
	return value == null || value.indexOf("<mo") == -1 && value.indexOf("<mi") == -1 && value.indexOf("<mn") == -1 && value.indexOf("<csymbol") == -1 && value.indexOf("algorithm") == -1;
}
com.wiris.quizzes.impl.HTMLTools.hasCasSessionParameter = function(session,parameter,name) {
	session = com.wiris.util.xml.WXmlUtils.resolveEntities(session);
	var expr = com.wiris.quizzes.impl.HTMLTools.getParameterEReg(parameter,name);
	var exprAL = com.wiris.quizzes.impl.HTMLTools.getParameterFromAlgorithmLine(parameter,name);
	if(expr.match(session) || exprAL.match(session)) return true; else {
		var noaccents = com.wiris.util.type.StringUtils.stripAccents(parameter);
		if(!(noaccents == parameter)) {
			expr = com.wiris.quizzes.impl.HTMLTools.getParameterEReg(noaccents,name);
			exprAL = com.wiris.quizzes.impl.HTMLTools.getParameterFromAlgorithmLine(noaccents,name);
			return expr.match(session) || exprAL.match(session);
		}
		return false;
	}
}
com.wiris.quizzes.impl.HTMLTools.getParameterEReg = function(parameter,name) {
	return new EReg(".*<input>\\s*<math[^>]*>\\s*<mi>" + parameter + "</mi>\\s*<mo>\\s*(" + com.wiris.system.Utf8.uchr(160) + "|\\s)\\s*</mo><mi>" + name + "\\d*</mi>.*","gmi");
}
com.wiris.quizzes.impl.HTMLTools.getParameterFromAlgorithmLine = function(parameter,name) {
	return new EReg(".*" + parameter + "\\s*" + name + ".*","gmi");
}
com.wiris.quizzes.impl.HTMLTools.stripConstructionsFromCalcSession = function(calcSession) {
	if(com.wiris.quizzes.impl.CalcDocumentTools.isCalc(calcSession)) {
		var start = calcSession.indexOf("<wiriscalc");
		var end = calcSession.indexOf("</wiriscalc>",start);
		start = calcSession.indexOf("<constructions",start);
		if(start > -1 && start < end) {
			end = calcSession.indexOf("</constructions>",start);
			var sb = new StringBuf();
			sb.b += Std.string(HxOverrides.substr(calcSession,0,start));
			sb.b += Std.string(HxOverrides.substr(calcSession,end + "</constructions>".length,null));
			calcSession = sb.b;
		}
	}
	return calcSession;
}
com.wiris.quizzes.impl.HTMLTools.mathMLImgSrc = function(mathml,centerBaseline,zoom,editorUrl,proxyUrl,crossOriginEnabled) {
	var src = crossOriginEnabled?editorUrl + "/render?":proxyUrl + "?service=render&";
	src += "stats-app=quizzes&";
	if(!centerBaseline) src += "centerbaseline=false&";
	if(zoom != 1.0) src += "zoom=" + zoom + "&";
	mathml = com.wiris.util.xml.MathMLUtils.removeStrokesAnnotation(mathml);
	mathml = StringTools.urlEncode(com.wiris.quizzes.impl.HTMLTools.encodeUnicodeChars(mathml));
	src += "mml=" + mathml;
	return src;
}
com.wiris.quizzes.impl.HTMLTools.getEmptyCalcMeSession = function() {
	return "<wiriscalc version=\"3.1\"><title><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mtext>Untitled calc</mtext></math></title><properties><property name=\"lang\">en</property><property name=\"precision\">4</property><property name=\"use_degrees\">false</property></properties><session version=\"3.0\" lang=\"en\"><task><title><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mtext>Sheet 1</mtext></math></title><group><command><input><math xmlns=\"http://www.w3.org/1998/Math/MathML\"/></input></command></group></task></session></wiriscalc>";
}
com.wiris.quizzes.impl.HTMLTools.prototype = {
	isMathMLString: function(math) {
		math = StringTools.trim(math);
		return StringTools.startsWith(math,"<math") && StringTools.endsWith(math,"</math>");
	}
	,setPlotterLoadingSrc: function(src) {
		this.plotterLoadingSrc = src;
	}
	,setProxyUrl: function(proxyUrl) {
		this.proxyUrl = proxyUrl;
	}
	,setAnswerKeyword: function(keyword) {
		this.answerKeyword = keyword;
	}
	,getAnswerVariables: function(answers,compound) {
		var h = new Hash();
		var i;
		if(!compound) {
			var _g1 = 0, _g = answers.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var a = answers[i1];
				if(!h.exists(a.type)) h.set(a.type,new Hash());
				h.get(a.type).set(this.answerKeyword + (i1 + 1),a.content);
			}
			if(answers.length == 1) h.get(answers[0].type).set(this.answerKeyword,answers[0].content);
		} else {
			var answer = answers[0];
			var a = com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswer(answer);
			var _g1 = 0, _g = a.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var s = a[i1][1];
				var type = this.isMathMLString(s)?com.wiris.quizzes.impl.MathContent.TYPE_MATHML:com.wiris.quizzes.impl.MathContent.TYPE_TEXT;
				if(!h.exists(type)) h.set(type,new Hash());
				h.get(type).set(this.answerKeyword + (i1 + 1),s);
			}
			if(!h.exists(answer.type)) h.set(answer.type,new Hash());
			h.get(answer.type).set(this.answerKeyword,answer.content);
		}
		return h;
	}
	,expandAnswersText: function(text,answers,compound) {
		if(answers == null || answers.length == 0 || this.answerKeyword == null || text.indexOf("#" + this.answerKeyword) == -1) return text;
		var h = this.getAnswerVariables(answers,compound);
		var textvariables = h.get(com.wiris.quizzes.impl.MathContent.TYPE_TEXT);
		return this.expandVariablesText(text,textvariables);
	}
	,expandAnswers: function(text,answers,compound) {
		if(answers == null || answers.length == 0 || this.answerKeyword == null || text.indexOf("#" + this.answerKeyword) == -1) return text;
		var h = this.getAnswerVariables(answers,compound);
		return this.expandVariables(text,h);
	}
	,setItemSeparator: function(sep) {
		this.separator = sep == null?",":sep;
	}
	,isImplicitArgumentFactor: function(x) {
		if(x.getNodeName() == "mi" || x.getNodeName() == "mn") return true;
		if(x.getNodeName() == "msup") {
			var c = x.firstElement();
			if(c != null && c.getNodeName() == "mi" || c.getNodeName() == "mn") return true;
		}
		return false;
	}
	,fullMathML2TextImpl: function(e) {
		var sb = new StringBuf();
		if(e.getNodeName() == "mo" || e.getNodeName() == "mn" || e.getNodeName() == "mi" || e.getNodeName() == "mtext") sb.b += Std.string(com.wiris.util.xml.WXmlUtils.getNodeValue(e.firstChild())); else if(e.getNodeName() == "mfenced" || e.getNodeName() == "mtr" || e.getNodeName() == "mtable") {
			var open = e.get("open");
			if(open == null) open = "(";
			var close = e.get("close");
			if(close == null) close = ")";
			var separators = e.get("separators");
			if(separators == null) separators = ",";
			if(open == "(" && close == ")" && e.firstElement() != null && e.firstElement().getNodeName() == "mtable") {
				open = "";
				close = "";
			}
			sb.b += Std.string(open);
			var it = e.elements();
			var i = 0;
			var n = com.wiris.system.Utf8.getLength(separators);
			while(it.hasNext()) {
				if(i > 0 && n > 0) sb.b += Std.string(com.wiris.system.Utf8.uchr(com.wiris.system.Utf8.charCodeAt(separators,i < n?i:n - 1)));
				sb.b += Std.string(this.fullMathML2TextImpl(it.next()));
				i++;
			}
			sb.b += Std.string(close);
		} else if(e.getNodeName() == "mfrac") {
			var it = e.elements();
			var num = this.fullMathML2TextImpl(it.next());
			if(num.length > 1) num = "(" + num + ")";
			var den = this.fullMathML2TextImpl(it.next());
			if(den.length > 1) den = "(" + den + ")";
			sb.b += Std.string(num);
			sb.b += Std.string("/");
			sb.b += Std.string(den);
		} else if(e.getNodeName() == "msup") {
			var it = e.elements();
			var bas = this.fullMathML2TextImpl(it.next());
			if(bas.length > 1) bas = "(" + bas + ")";
			var exp = this.fullMathML2TextImpl(it.next());
			if(exp.length > 1) exp = "(" + exp + ")";
			sb.b += Std.string(bas);
			sb.b += Std.string("^");
			sb.b += Std.string(exp);
		} else if(e.getNodeName() == "msqrt") {
			sb.b += Std.string("sqrt(");
			e.setNodeName("math");
			sb.b += Std.string(this.fullMathML2TextImpl(e));
			sb.b += Std.string(")");
		} else if(e.getNodeName() == "mroot") {
			var it = e.elements();
			var rad = this.fullMathML2TextImpl(it.next());
			var ind = this.fullMathML2TextImpl(it.next());
			sb.b += Std.string("root(");
			sb.b += Std.string(rad);
			sb.b += Std.string(",");
			sb.b += Std.string(ind);
			sb.b += Std.string(")");
		} else if(e.getNodeName() == "mspace" && "newline" == e.get("linebreak")) sb.b += Std.string("\n"); else if(e.getNodeName() == "semantics") {
			var it = e.elements();
			if(it.hasNext()) {
				var mml = it.next();
				if(it.hasNext()) {
					var ann = it.next();
					if(ann.getNodeName() == "annotation" && "text/plain" == ann.get("encoding")) return com.wiris.util.xml.WXmlUtils.getText(ann);
				}
				return this.fullMathML2TextImpl(mml);
			}
		} else {
			var it = e.elements();
			while(it.hasNext()) {
				var x = it.next();
				sb.b += Std.string(this.fullMathML2TextImpl(x));
				if(x.getNodeName() == "mi" && this.isFunctionName(com.wiris.util.xml.WXmlUtils.getNodeValue(x.firstChild())) && it.hasNext()) {
					var y = it.next();
					if(y.getNodeName() == "msqrt" || y.getNodeName() == "mfrac" || y.getNodeName() == "mroot") {
						sb.b += Std.string("(");
						sb.b += Std.string(this.fullMathML2TextImpl(y));
						sb.b += Std.string(")");
					} else {
						var parentheses = false;
						var argument = new StringBuf();
						while(y != null && this.isImplicitArgumentFactor(y)) {
							if(y.getNodeName() == "msup") parentheses = true;
							argument.b += Std.string(this.fullMathML2TextImpl(y));
							y = it.hasNext()?it.next():null;
						}
						if(parentheses) sb.b += Std.string("(");
						sb.b += Std.string(argument.b);
						if(parentheses) sb.b += Std.string(")");
						if(y != null) sb.b += Std.string(this.fullMathML2TextImpl(y));
					}
				}
			}
		}
		return sb.b;
	}
	,mathMLToText: function(mathml) {
		var root = com.wiris.util.xml.WXmlUtils.parseXML(mathml);
		if(root.nodeType == Xml.Document) root = root.firstElement();
		this.removeMrows(root);
		return StringTools.replace(this.fullMathML2TextImpl(root),com.wiris.system.Utf8.uchr(160)," ");
	}
	,isReservedWordPrefix: function(token,words) {
		var i;
		var _g1 = 0, _g = words.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(StringTools.startsWith(words[i1],token)) return true;
		}
		return false;
	}
	,reservedWordTokens: function(elem,words) {
		var it = elem.elements();
		while(it.hasNext()) this.reservedWordTokens(it.next(),words);
		if(com.wiris.quizzes.impl.HTMLTools.MROWS.indexOf("@" + elem.getNodeName() + "@") != -1) {
			var children = new Array();
			it = elem.elements();
			while(it.hasNext()) children.push(it.next());
			var index = 0;
			while(index < children.length) {
				var c = children[index];
				if(c.getNodeName() == "mi") {
					var mis = new Array();
					var mitexts = new Array();
					while(c != null && c.getNodeName() == "mi") {
						var text = com.wiris.util.xml.WXmlUtils.getNodeValue(c.firstChild());
						mitexts.push(text);
						mis.push(c);
						index++;
						c = index < children.length?children[index]:null;
					}
					var k = 0;
					while(k < mis.length) {
						var word = mitexts[k];
						var lastReservedWord = null;
						var j = 0;
						var l = 0;
						while(this.isReservedWordPrefix(word,words)) {
							if(com.wiris.system.ArrayEx.contains(words,word)) {
								lastReservedWord = word;
								l = j;
							}
							j++;
							if(j + k >= mis.length) break;
							word += mitexts[k + j];
						}
						if(lastReservedWord != null) {
							if(mitexts[k] == lastReservedWord) mis[k].set("mathvariant","normal"); else {
								mis[k].removeChild(mis[k].firstChild());
								mis[k].addChild(com.wiris.util.xml.WXmlUtils.createPCData(elem,lastReservedWord));
								var m;
								var _g = 0;
								while(_g < l) {
									var m1 = _g++;
									k++;
									var mi = mis[k];
									elem.removeChild(mi);
								}
							}
						}
						k++;
					}
				} else if(c.getNodeName() == "mn") {
					var first = c;
					index++;
					c = index < children.length?children[index]:null;
					if(c != null && c.getNodeName() == "mn") {
						var mns = new Array();
						var num = new StringBuf();
						num.b += Std.string(com.wiris.util.xml.WXmlUtils.getNodeValue(first.firstChild()));
						while(c != null && c.getNodeName() == "mn") {
							mns.push(c);
							num.b += Std.string(com.wiris.util.xml.WXmlUtils.getNodeValue(c.firstChild()));
							index++;
							c = index < children.length?children[index]:null;
						}
						first.removeChild(first.firstChild());
						first.addChild(com.wiris.util.xml.WXmlUtils.createPCData(first,num.b));
						var m;
						var _g1 = 0, _g = mns.length;
						while(_g1 < _g) {
							var m1 = _g1++;
							elem.removeChild(mns[m1]);
						}
					}
				} else {
					index++;
					c = index < children.length?children[index]:null;
				}
			}
		}
	}
	,restoreFlatMathML: function(elem) {
		var it = elem.elements();
		while(it.hasNext()) this.restoreFlatMathML(it.next());
		if(com.wiris.quizzes.impl.HTMLTools.MROWS.indexOf("@" + elem.getNodeName() + "@") != -1) {
			var children = elem.elements();
			var elements = new Array();
			while(children.hasNext()) elements.push(children.next());
			if(elements.length > 0) {
				var current = elements[0];
				var i = 1;
				while(i < elements.length) {
					var previous = current;
					current = elements[i++];
					if(com.wiris.quizzes.impl.HTMLTools.MSUPS.indexOf("@" + current.getNodeName() + "@") != -1) {
						elem.removeChild(previous);
						current.insertChild(previous,0);
					}
				}
			}
		}
	}
	,removeMrows: function(elem) {
		if(elem.nodeType != Xml.Element && elem.nodeType != Xml.Document) return;
		var children = elem.iterator();
		while(children.hasNext()) this.removeMrows(children.next());
		children = elem.iterator();
		var i = 0;
		while(children.hasNext()) {
			var c = children.next();
			if(c.nodeType == Xml.Element) {
				if(c.getNodeName() == "mrow") {
					var mrowChildren = c.elements();
					var singlechild = false;
					if(mrowChildren.hasNext()) {
						mrowChildren.next();
						singlechild = !mrowChildren.hasNext();
					}
					if(singlechild || com.wiris.quizzes.impl.HTMLTools.MROWS.indexOf(elem.getNodeName()) != -1) {
						elem.removeChild(c);
						var n;
						var count = 0;
						while((n = c.firstChild()) != null) {
							c.removeChild(n);
							elem.insertChild(n,i + count);
							count++;
						}
						if(count != 1) {
							i = -1;
							children = elem.iterator();
						}
					}
				} else if(c.getNodeName() == "mfenced") {
					if("(" == c.get("open")) c.remove("open");
					if(")" == c.get("close")) c.remove("close");
				}
			}
			i++;
		}
	}
	,breakMis: function(elem,pos) {
		if(elem.nodeType != Xml.Element && elem.nodeType != Xml.Document) return;
		var children = elem.iterator();
		var i = 0;
		while(children.hasNext()) {
			this.breakMis(children.next(),i);
			i++;
		}
		if(elem.nodeType == Xml.Element && elem.getNodeName() == "mi") {
			var text = com.wiris.util.xml.WXmlUtils.getNodeValue(elem.firstChild());
			if(com.wiris.system.Utf8.getLength(text) > 1) {
				var p = elem.getParent();
				var mrow = Xml.createElement("mrow");
				p.removeChild(elem);
				p.insertChild(mrow,pos);
				while(text.length > 0) {
					var mi = Xml.createElement("mi");
					var chartext = com.wiris.system.Utf8.sub(text,0,1);
					mi.addChild(com.wiris.util.xml.WXmlUtils.createPCData(elem,chartext));
					text = HxOverrides.substr(text,chartext.length,null);
					mrow.addChild(mi);
				}
			} else elem.remove("mathvariant");
		}
	}
	,flattenMsups: function(elem,pos) {
		if(elem.nodeType != Xml.Element && elem.nodeType != Xml.Document) return;
		var children = elem.iterator();
		var i = 0;
		while(children.hasNext()) {
			this.flattenMsups(children.next(),i);
			i++;
		}
		if(elem.nodeType == Xml.Element && com.wiris.quizzes.impl.HTMLTools.MSUPS.indexOf("@" + elem.getNodeName() + "@") != -1) {
			var n = elem.getParent();
			var mrow = Xml.createElement("mrow");
			var c = elem.firstElement();
			elem.removeChild(c);
			mrow.addChild(c);
			n.removeChild(elem);
			mrow.addChild(elem);
			n.insertChild(mrow,pos);
		}
	}
	,updateReservedWords: function(mathml,words) {
		if(mathml == null || StringTools.trim(mathml) == "") return "";
		mathml = com.wiris.util.xml.WXmlUtils.resolveEntities(mathml);
		var doc = Xml.parse(mathml);
		this.flattenMsups(doc,0);
		this.breakMis(doc,0);
		this.removeMrows(doc);
		this.reservedWordTokens(doc.firstElement(),words);
		this.restoreFlatMathML(doc.firstElement());
		return com.wiris.util.xml.WXmlUtils.serializeXML(doc);
	}
	,getParentTag: function(s,n) {
		var stack = new Array();
		var error = false;
		while((n = s.indexOf("<",n)) != -1 && !error) {
			if(this.isQuizzesIdentifierStart(HxOverrides.cca(s,n + 1))) {
				var close = s.indexOf(">",n);
				var space = s.indexOf(" ",n);
				if(space != -1 && space < close) close = space;
				if(close != -1) stack.push(HxOverrides.substr(s,n + 1,close - n - 1)); else error = true;
			} else if(HxOverrides.cca(s,n + 1) == 47) {
				var close = s.indexOf(">",n);
				var tag = HxOverrides.substr(s,n + 2,close - n - 2);
				if(stack.length == 0) return tag; else if(!(stack.pop() == tag)) error = true;
			} else if(HxOverrides.substr(s,n,4) == "<!--") {
				n = s.indexOf("-->",n);
				if(n == -1) error = true;
			}
			n++;
		}
		return null;
	}
	,isColor: function(s,n) {
		var gfColor = "color\":\"";
		var gfFill = "\"fill\":\"";
		var l = gfColor.length;
		return n > l && (HxOverrides.substr(s,n - l,l) == gfColor || HxOverrides.substr(s,n - l,l) == gfFill);
	}
	,isEntity: function(s,n) {
		if(n > 0 && HxOverrides.cca(s,n - 1) == 38) {
			n++;
			var end = s.indexOf(";",n);
			if(end != -1) {
				while(this.isQuizzesIdentifierPart(HxOverrides.cca(s,n))) n++;
				return n == end;
			}
		}
		return false;
	}
	,variablePosition: function(s,n) {
		if(this.insideTag(s,n) || this.isEntity(s,n) || this.insideComment(s,n) || this.isColor(s,n)) return com.wiris.quizzes.impl.HTMLTools.POSITION_NONE; else {
			var parent = this.getParentTag(s,n);
			if(parent == null) return com.wiris.quizzes.impl.HTMLTools.POSITION_ALL;
			if(parent == "script" || parent == "option") return com.wiris.quizzes.impl.HTMLTools.POSITION_ONLY_TEXT; else if(parent == "style") return com.wiris.quizzes.impl.HTMLTools.POSITION_NONE; else if(parent == "mi" || parent == "mo" || parent == "mtext" || parent == "ms") return com.wiris.quizzes.impl.HTMLTools.POSITION_ONLY_MATHML; else if(parent == "td") return com.wiris.quizzes.impl.HTMLTools.POSITION_TABLE; else return com.wiris.quizzes.impl.HTMLTools.POSITION_ALL;
		}
	}
	,extractTextFromMathML: function(formula) {
		if(formula.indexOf("<mtext") == -1) return formula;
		var allowedTags = ["math","mrow"];
		var stack = new Array();
		var omittedcontent = false;
		var lasttag = null;
		var beginformula = formula.indexOf("<");
		var start;
		var end = 0;
		while(end < formula.length && (start = formula.indexOf("<",end)) != -1) {
			end = formula.indexOf(">",start);
			var tag = HxOverrides.substr(formula,start,end - start + 1);
			var trimmedTag = HxOverrides.substr(formula,start + 1,end - start - 1);
			if(HxOverrides.substr(trimmedTag,trimmedTag.length - 1,null) == "/") continue;
			var spacepos = tag.indexOf(" ");
			if(spacepos != -1) trimmedTag = HxOverrides.substr(tag,1,spacepos - 1);
			if(this.inArray(trimmedTag,allowedTags)) {
				stack.push([trimmedTag,tag]);
				lasttag = trimmedTag;
			} else if(trimmedTag == "/" + lasttag) {
				stack.pop();
				if(stack.length > 0) {
					var lastpair = stack[stack.length - 1];
					lasttag = lastpair[0];
				} else lasttag = null;
				if(stack.length == 0 && !omittedcontent) {
					var formula1 = HxOverrides.substr(formula,0,beginformula);
					if(end < formula.length - 1) {
						var formula2 = HxOverrides.substr(formula,end + 1,null);
						formula = formula1 + formula2;
					} else formula = formula1;
				}
			} else if(trimmedTag == "mtext") {
				var pos2 = formula.indexOf("</mtext>",start);
				var text = HxOverrides.substr(formula,start + 7,pos2 - start - 7);
				text = com.wiris.util.xml.WXmlUtils.resolveEntities(text);
				var nbsp = com.wiris.system.Utf8.uchr(160);
				var nbspLength = nbsp.length;
				if(text.length >= nbspLength) {
					if(HxOverrides.substr(text,0,nbspLength) == nbsp) text = " " + HxOverrides.substr(text,nbspLength,null);
					if(text.length >= nbspLength && HxOverrides.substr(text,text.length - nbspLength,null) == nbsp) text = HxOverrides.substr(text,0,text.length - nbspLength) + " ";
				}
				var formula1 = HxOverrides.substr(formula,0,start);
				var formula2 = HxOverrides.substr(formula,pos2 + 8,null);
				if(omittedcontent) {
					var tail1 = "";
					var head2 = "";
					var i = stack.length - 1;
					while(i >= 0) {
						var pair = stack[i];
						tail1 = tail1 + "</" + pair[0] + ">";
						head2 = pair[1] + head2;
						i--;
					}
					formula1 = formula1 + tail1;
					formula2 = head2 + formula2;
					if(com.wiris.quizzes.impl.MathContent.isEmpty(formula2)) formula2 = "";
					formula = formula1 + text + formula2;
					beginformula = start + tail1.length + text.length;
					end = beginformula + head2.length;
				} else {
					var head = HxOverrides.substr(formula1,0,beginformula);
					var head2 = HxOverrides.substr(formula1,beginformula,null);
					formula2 = head2 + formula2;
					if(com.wiris.quizzes.impl.MathContent.isEmpty(formula2)) formula2 = "";
					formula = head + text + formula2;
					beginformula += text.length;
					end = beginformula + formula1.length;
				}
				omittedcontent = false;
			} else {
				var num = 1;
				var pos = start + tag.length;
				while(num > 0) {
					end = formula.indexOf("</" + trimmedTag + ">",pos);
					var mid = formula.indexOf("<" + trimmedTag,pos);
					if(end == -1) return formula; else if(mid == -1 || end < mid) {
						num--;
						pos = end + ("</" + trimmedTag + ">").length;
					} else {
						pos = mid + ("<" + trimmedTag).length;
						num++;
					}
				}
				end += ("</" + trimmedTag + ">").length;
				omittedcontent = true;
			}
		}
		return formula;
	}
	,ImageB64Url: function(b64) {
		return "data:image/png;base64," + b64;
	}
	,addPlotterImageB64Tag: function(value) {
		var h = new com.wiris.quizzes.impl.HTML();
		h.imageClass(this.ImageB64Url(value),null,"wirisplotter");
		return h.getString();
	}
	,addConstructionImageTag: function(value,width,height) {
		var h = new com.wiris.quizzes.impl.HTML();
		h.openclose("img",[["src",this.plotterLoadingSrc],["alt","Plotter"],["title","Plotter"],["class","wirisconstruction"],["data-wirisconstruction",value],["data-wiriswidth",width + ""],["data-wirisheight",height + ""]]);
		return h.getString();
	}
	,addPlotterImageTag: function(filename) {
		var url;
		if(com.wiris.settings.PlatformSettings.IS_JAVASCRIPT && StringTools.endsWith(filename,".b64")) {
			var s = com.wiris.system.Storage.newStorage(filename);
			url = this.ImageB64Url(s.read());
		} else url = this.proxyUrl + "?service=cache&name=" + filename;
		var h = new com.wiris.quizzes.impl.HTML();
		h.imageClass(url,null,"wirisplotter");
		return h.getString();
	}
	,isTokensMathML: function(mathml) {
		return com.wiris.util.xml.MathMLUtils.isTokensMathML(mathml);
	}
	,textToMathMLImpl: function(text) {
		var n = com.wiris.system.Utf8.getLength(text);
		if(n == 0) return text;
		var mathml = new StringBuf();
		var token;
		var i = 0;
		var c = com.wiris.system.Utf8.charCodeAt(text,i);
		while(i < n) if(com.wiris.util.xml.WCharacterBase.isDigit(c)) {
			token = new StringBuf();
			while(i < n && com.wiris.util.xml.WCharacterBase.isDigit(c)) {
				token.b += String.fromCharCode(c);
				if(++i < n) c = com.wiris.system.Utf8.charCodeAt(text,i);
			}
			mathml.b += Std.string("<mn>");
			mathml.b += Std.string(token.b);
			mathml.b += Std.string("</mn>");
		} else if(com.wiris.util.xml.WCharacterBase.isLetter(c)) {
			token = new StringBuf();
			while(i < n && com.wiris.util.xml.WCharacterBase.isLetter(c)) {
				token.b += Std.string(com.wiris.system.Utf8.uchr(c));
				if(++i < n) c = com.wiris.system.Utf8.charCodeAt(text,i);
			}
			var tok = token.b;
			var tokens;
			if(this.isReservedWord(tok)) tokens = [tok]; else {
				var m = com.wiris.system.Utf8.getLength(tok);
				tokens = new Array();
				var j;
				var _g = 0;
				while(_g < m) {
					var j1 = _g++;
					tokens[j1] = com.wiris.system.Utf8.uchr(com.wiris.system.Utf8.charCodeAt(tok,j1));
				}
			}
			var k;
			var _g1 = 0, _g = tokens.length;
			while(_g1 < _g) {
				var k1 = _g1++;
				mathml.b += Std.string("<mi>");
				mathml.b += Std.string(tokens[k1]);
				mathml.b += Std.string("</mi>");
			}
		} else {
			if(c == 10) mathml.b += Std.string("<mspace linebreak=\"newline\"/>"); else {
				mathml.b += Std.string("<mo>");
				if(c == 160 || c == 32) mathml.b += Std.string("&#xA0;"); else mathml.b += Std.string(com.wiris.util.xml.WXmlUtils.htmlEscape(com.wiris.system.Utf8.uchr(c)));
				mathml.b += Std.string("</mo>");
			}
			if(++i < n) c = com.wiris.system.Utf8.charCodeAt(text,i);
		}
		return mathml.b;
	}
	,textToMathMLWithSemantics: function(text) {
		var mathml = this.textToMathMLImpl(text);
		mathml = "<semantics><mrow>" + mathml + "</mrow><annotation encoding=\"text/plain\">" + text + "</annotation></semantics>";
		var result = com.wiris.quizzes.impl.HTMLTools.addMathTag(mathml);
		return result;
	}
	,textToMathML: function(text) {
		var mathml = this.textToMathMLImpl(text);
		var result = com.wiris.quizzes.impl.HTMLTools.addMathTag(mathml);
		return result;
	}
	,isReservedWord: function(word) {
		return this.isFunctionName(word);
	}
	,isFunctionName: function(word) {
		var functionNames = ["exp","ln","log","sin","sen","cos","tan","tg","asin","arcsin","asen","arcsen","acos","arccos","atan","arctan","cosec","csc","sec","cotan","acosec","acsc","asec","acotan","sinh","senh","cosh","tanh","asinh","arcsinh","asenh","arcsenh","acosh","arccosh","atanh","arctanh","cosech","csch","sech","cotanh","acosech","acsch","asech","acotanh","sign"];
		return this.inArray(word,functionNames) || this.inArray(word,com.wiris.quizzes.impl.ActionCommands.COMMANDS);
	}
	,toSubFormula: function(mathml) {
		mathml = com.wiris.util.xml.MathMLUtils.stripRootTag(mathml,"math");
		return "<mrow>" + mathml + "</mrow>";
	}
	,inArray: function(value,array) {
		var i;
		var _g1 = 0, _g = array.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(array[i1] == value) return true;
		}
		return false;
	}
	,prepareFormulas: function(text) {
		var start = 0;
		while((start = text.indexOf("<math",start)) != -1) {
			if(text.indexOf("/>",start) != -1 && text.indexOf("/>",start) < text.indexOf(">",start)) {
				start = text.indexOf(">",start) + 1;
				continue;
			}
			var length = text.indexOf("</math>",start) - start + "</math>".length;
			var formula = HxOverrides.substr(text,start,length);
			var pos = 0;
			while((pos = formula.indexOf("#",pos)) != -1) {
				var initag = pos;
				while(initag >= 0 && HxOverrides.cca(formula,initag) != 60) initag--;
				var parentpos = initag;
				var parenttag = null;
				var parenttagname = null;
				while(parenttag == null) {
					while(parentpos >= 2 && HxOverrides.cca(formula,parentpos - 2) == 47 && HxOverrides.cca(formula,parentpos - 1) == 62) {
						parentpos -= 2;
						while(parentpos >= 0 && HxOverrides.cca(formula,parentpos) != 60) parentpos--;
					}
					parentpos--;
					while(parentpos >= 0 && HxOverrides.cca(formula,parentpos) != 60) parentpos--;
					if(HxOverrides.cca(formula,parentpos) == 60 && HxOverrides.cca(formula,parentpos + 1) == 47) {
						var namepos = parentpos + "</".length;
						var character = HxOverrides.cca(formula,namepos);
						var nameBuf = new StringBuf();
						while(this.isQuizzesIdentifierPart(character)) {
							nameBuf.b += String.fromCharCode(character);
							namepos++;
							character = HxOverrides.cca(formula,namepos);
						}
						var name = nameBuf.b;
						var depth = 1;
						var namelength = name.length;
						while(depth > 0 && parentpos >= 0) {
							var currentTagName = HxOverrides.substr(formula,parentpos,namelength);
							if(name == currentTagName) {
								var currentStartTag = HxOverrides.substr(formula,parentpos - "<".length,namelength + "<".length);
								if("<" + name == currentStartTag && formula.indexOf(">",parentpos) < formula.indexOf("/",parentpos)) depth--; else {
									var currentOpenCloseTag = HxOverrides.substr(formula,parentpos - "</".length,namelength + "</".length);
									if("</" + name == currentOpenCloseTag) depth++;
								}
							}
							if(depth > 0) parentpos--; else parentpos -= "<".length;
						}
						if(depth > 0) return text;
					} else {
						parenttag = HxOverrides.substr(formula,parentpos,formula.indexOf(">",parentpos) - parentpos + 1);
						parenttagname = HxOverrides.substr(parenttag,1,parenttag.length - 2);
						if(parenttagname.indexOf(" ") != -1) parenttagname = HxOverrides.substr(parenttagname,0,parenttagname.indexOf(" "));
					}
				}
				if(com.wiris.quizzes.impl.HTMLTools.MROWS.indexOf("@" + parenttagname + "@") != -1) {
					var firstchar = true;
					var appendpos = pos + 1;
					var character = com.wiris.util.xml.WXmlUtils.getUtf8Char(formula,appendpos);
					while(this.isQuizzesIdentifierStart(character) || this.isQuizzesIdentifierPart(character) && !firstchar) {
						appendpos += com.wiris.system.Utf8.uchr(character).length;
						character = com.wiris.util.xml.WXmlUtils.getUtf8Char(formula,appendpos);
						firstchar = false;
					}
					if(HxOverrides.cca(formula,appendpos) != 60) {
						pos++;
						continue;
					}
					var nextpos = formula.indexOf(">",pos);
					var end = false;
					while(!end && nextpos != -1 && pos + ">".length < formula.length) {
						nextpos += ">".length;
						var nexttaglength = formula.indexOf(">",nextpos) - nextpos + ">".length;
						var nexttag = HxOverrides.substr(formula,nextpos,nexttaglength);
						var nexttagname = HxOverrides.substr(nexttag,1,nexttag.length - 2);
						if(nexttagname.indexOf(" ") != -1) nexttagname = HxOverrides.substr(nexttagname,0,nexttagname.indexOf(" "));
						var specialtag = null;
						var speciallength = 0;
						if(nexttagname == "msup" || nexttagname == "msub" || nexttagname == "msubsup") {
							specialtag = nexttag;
							speciallength = nexttaglength;
							nextpos = nextpos + nexttaglength;
							nexttaglength = formula.indexOf(">",nextpos) - nextpos + ">".length;
							nexttag = HxOverrides.substr(formula,nextpos,nexttaglength);
							nexttagname = HxOverrides.substr(nexttag,1,nexttag.length - 2);
							if(nexttagname.indexOf(" ") != -1) nexttagname = HxOverrides.substr(nexttagname,0,nexttagname.indexOf(" "));
						}
						if(nexttagname == "mi" || nexttagname == "mn" || nexttagname == "mo") {
							var contentpos = nextpos + nexttaglength;
							var toappend = new StringBuf();
							character = com.wiris.util.xml.WXmlUtils.getUtf8Char(formula,contentpos);
							while(this.isQuizzesIdentifierStart(character) || this.isQuizzesIdentifierPart(character) && !firstchar) {
								var charstr = com.wiris.system.Utf8.uchr(character);
								contentpos += charstr.length;
								toappend.b += Std.string(charstr);
								character = com.wiris.util.xml.WXmlUtils.getUtf8Char(formula,contentpos);
								firstchar = false;
							}
							var toAppendStr = toappend.b;
							var nextclosepos = formula.indexOf("<",contentpos);
							var nextcloseend = formula.indexOf(">",nextclosepos) + ">".length;
							if(toAppendStr.length == 0) end = true; else if(nextclosepos != contentpos) {
								var content = HxOverrides.substr(formula,contentpos,nextclosepos - contentpos);
								var nextclosetag = HxOverrides.substr(formula,nextclosepos,nextcloseend - nextclosepos);
								var newnexttag = nexttag + content + nextclosetag;
								formula = HxOverrides.substr(formula,0,nextpos) + newnexttag + HxOverrides.substr(formula,nextcloseend,null);
								formula = HxOverrides.substr(formula,0,appendpos) + toAppendStr + HxOverrides.substr(formula,appendpos,null);
								end = true;
							} else {
								formula = HxOverrides.substr(formula,0,nextpos) + HxOverrides.substr(formula,nextcloseend,null);
								formula = HxOverrides.substr(formula,0,appendpos) + toAppendStr + HxOverrides.substr(formula,appendpos,null);
								if(specialtag != null) {
									var fulltaglength = formula.indexOf(">",appendpos) + ">".length - initag;
									formula = HxOverrides.substr(formula,0,initag) + specialtag + HxOverrides.substr(formula,initag,fulltaglength) + HxOverrides.substr(formula,initag + fulltaglength + speciallength,null);
									end = true;
								}
							}
							appendpos += toAppendStr.length;
						} else end = true;
						if(!end) nextpos = formula.indexOf(">",pos);
					}
				}
				pos++;
			}
			text = HxOverrides.substr(text,0,start) + formula + HxOverrides.substr(text,start + length,null);
			start = start + formula.length;
		}
		return text;
	}
	,sortIterator: function(it) {
		var sorted = new Array();
		while(it.hasNext()) {
			var a = it.next();
			var j = 0;
			while(j < sorted.length) {
				if(com.wiris.quizzes.impl.HTMLTools.compareStrings(sorted[j],a) > 0) break;
				j++;
			}
			sorted.splice(j,0,a);
		}
		return sorted;
	}
	,getPlaceHolder: function(name) {
		return "#" + name;
	}
	,insideComment: function(html,pos) {
		var beginComment = this.lastIndexOf(html,"<!--",pos);
		if(beginComment != -1) {
			var endComment = this.lastIndexOf(html,"-->",pos);
			return endComment < beginComment;
		}
		return false;
	}
	,lastIndexOf: function(src,str,pos) {
		return HxOverrides.substr(src,0,pos).lastIndexOf(str);
	}
	,insideTag: function(html,pos) {
		var beginTag = this.lastIndexOf(html,"<",pos);
		while(beginTag != -1 && !this.isQuizzesIdentifierStart(HxOverrides.cca(html,beginTag + 1))) {
			if(beginTag == 0) return false;
			beginTag = this.lastIndexOf(html,"<",beginTag - 1);
		}
		if(beginTag == -1) return false;
		var endTag = html.indexOf(">",beginTag);
		return endTag > pos;
	}
	,isQuizzesIdentifierPart: function(c) {
		return this.isQuizzesIdentifierStart(c) || com.wiris.util.xml.WCharacterBase.isDigit(c);
	}
	,isQuizzesIdentifierStart: function(c) {
		return com.wiris.util.xml.WCharacterBase.isLetter(c) || c == 95;
	}
	,isQuizzesIdentifier: function(s) {
		if(s == null) return false;
		var i = com.wiris.system.Utf8.getIterator(s);
		if(!i.hasNext()) return false;
		if(!this.isQuizzesIdentifierStart(i.next())) return false;
		while(i.hasNext()) if(!this.isQuizzesIdentifierPart(i.next())) return false;
		return true;
	}
	,getVariableName: function(html,pos) {
		var name = null;
		if(HxOverrides.cca(html,pos) == 35) {
			var end = pos + 1;
			if(end < html.length) {
				var c = com.wiris.util.xml.WXmlUtils.getUtf8Char(html,end);
				if(this.isQuizzesIdentifierStart(c)) {
					end += com.wiris.system.Utf8.uchr(c).length;
					if(end < html.length) {
						c = com.wiris.util.xml.WXmlUtils.getUtf8Char(html,end);
						while(c > 0 && this.isQuizzesIdentifierPart(c)) {
							end += com.wiris.system.Utf8.uchr(c).length;
							c = end < html.length?com.wiris.util.xml.WXmlUtils.getUtf8Char(html,end):-1;
						}
					}
					name = HxOverrides.substr(html,pos + 1,end - (pos + 1));
				}
			}
		}
		return name;
	}
	,replaceVariablesInsideHTMLTables: function(html,variables) {
		var h = new com.wiris.quizzes.impl.HTMLTableTools(this.separator);
		return h.replaceVariablesInsideHTMLTables(html,variables);
	}
	,replaceVariablesInsideHTML: function(token,variables,type,escapeText) {
		var mathml = type == com.wiris.quizzes.impl.MathContent.TYPE_MATHML;
		var text = type == com.wiris.quizzes.impl.MathContent.TYPE_TEXT;
		var imageRef = type == com.wiris.quizzes.impl.MathContent.TYPE_IMAGE_REF;
		var imageData = type == com.wiris.quizzes.impl.MathContent.TYPE_IMAGE;
		var construction = type == com.wiris.quizzes.impl.MathContent.TYPE_GEOMETRY_FILE;
		var keys = this.sortIterator(variables.keys());
		var j = keys.length - 1;
		while(j >= 0) {
			var name = keys[j];
			var placeholder = this.getPlaceHolder(name);
			var formula = null;
			var posFormula = 0;
			var oldName = null;
			var oldValue = null;
			if(name.indexOf("_") > 0 && token.indexOf(name) != -1 && variables.get(name).indexOf(name) != -1) {
				oldName = name;
				name = HxOverrides.substr(name,0,name.indexOf("_"));
				if(this.assertTextSyntax(oldName)) formula = this.replaceTextWithMathml(oldName);
				HxOverrides.remove(keys,oldName);
			}
			var pos = 0;
			while((pos = token.indexOf(placeholder,pos)) != -1) {
				var v = this.variablePosition(token,pos);
				if((v == com.wiris.quizzes.impl.HTMLTools.POSITION_ALL || v == com.wiris.quizzes.impl.HTMLTools.POSITION_TABLE || text && v == com.wiris.quizzes.impl.HTMLTools.POSITION_ONLY_TEXT || mathml && v == com.wiris.quizzes.impl.HTMLTools.POSITION_ONLY_MATHML) && (name == this.getVariableName(token,pos) || oldName != null && oldName == this.getVariableName(token,pos))) {
					var value = variables.get(name);
					if(text && escapeText) value = com.wiris.util.xml.WXmlUtils.htmlEscape(value); else if(mathml) {
						if(oldName != null) {
							if(formula != null) {
								posFormula = formula.indexOf(this.getPlaceHolder(name),posFormula);
								var itemSelector = this.isPartOfMatrixVectorOrList(formula,value,posFormula);
								try {
									value = this.selectElementOfArray(value,itemSelector,formula,posFormula);
								} catch( t ) {
									itemSelector = com.wiris.quizzes.impl.HTMLTools.NOT_A_SELECTOR;
								}
								value = "<mrow>" + HxOverrides.substr(value,"<math>".length,value.length - "<math></math>".length) + "</mrow>";
								var array = this.returnFormula(formula,value,this.getPlaceHolder(name),itemSelector,posFormula);
								value = array[0];
								value = this.extractTextFromMathML(value);
							} else {
								value = variables.get(oldName) != null?variables.get(oldName):oldValue;
								oldValue = value;
								value = com.wiris.quizzes.impl.HTMLTools.addMathTag(value);
								value = this.extractTextFromMathML(value);
							}
						} else {
							value = com.wiris.quizzes.impl.HTMLTools.addMathTag(value);
							value = this.extractTextFromMathML(value);
						}
					} else if(imageRef) value = this.addPlotterImageTag(value); else if(imageData) value = this.addPlotterImageB64Tag(value); else if(construction) {
						var width = 450;
						var height = 450;
						if(oldName != null && formula != null) {
							var parts = oldName.split("_");
							if(parts.length == 2) {
								var square = parts[1];
								var squareInt = Std.parseInt(square);
								if(squareInt > 0) {
									width = squareInt;
									height = squareInt;
								}
							} else if(parts.length == 3) {
								var fst = parts[1];
								var snd = parts[2];
								var fstInt = Std.parseInt(fst);
								var sndInt = Std.parseInt(snd);
								if(fstInt > 0 && sndInt > 0) {
									width = fstInt;
									height = sndInt;
								}
							}
						}
						value = this.addConstructionImageTag(value,width,height);
					}
					token = HxOverrides.substr(token,0,pos) + value + HxOverrides.substr(token,pos + placeholder.length,null);
					if(value != null) pos += value.length;
				} else pos++;
			}
			j--;
		}
		return token;
	}
	,checkSubstringParameterAnswer: function(formula,name,lastPos,pos) {
		if(this.answerKeyword == null) return true;
		if(formula.indexOf(this.getPlaceHolder(this.answerKeyword),lastPos) != pos) return true;
		return name.indexOf(this.answerKeyword) != -1;
	}
	,failOnOutOfBounds: function(outOfBounds) {
		if(outOfBounds) throw "Out of bounds";
	}
	,selectElementOfArray: function(value,itemSelector,formula,pos) {
		if(itemSelector == com.wiris.quizzes.impl.HTMLTools.NOT_A_SELECTOR) return value;
		var positionToBeWritten = this.position(formula,pos);
		if(positionToBeWritten[0] == -1) throw "Positions are not integers!";
		if(itemSelector == com.wiris.quizzes.impl.HTMLTools.SELECTOR_2D) {
			if(this.isPosition(formula,pos)) return this.returnPositionOfElementOfArray(value.indexOf("<mtr>"),value,itemSelector,positionToBeWritten); else return this.returnRowOfElementOfArray(value.indexOf("<mtr>"),value,itemSelector,positionToBeWritten);
		} else {
			var iniWant = value.indexOf("<mrow>",value.indexOf("open"));
			if(value.indexOf("<mrow>",iniWant + 1) != -1) {
				iniWant = value.indexOf("<mrow>",iniWant + 1) + "<mrow>".length;
				if(this.isPosition(formula,pos)) return this.returnPositionOfElementOfArray(iniWant,value,itemSelector,positionToBeWritten); else return this.returnRowOfElementOfArray(iniWant,value,itemSelector,positionToBeWritten);
			} else {
				var outOfBounds = iniWant == -1;
				iniWant += "<mrow>".length;
				var k = 0;
				while(k < positionToBeWritten[0] - 1 && !outOfBounds) {
					iniWant = value.indexOf(this.separator,iniWant + 1);
					outOfBounds = iniWant == -1;
					k++;
				}
				if(k != 0) iniWant += this.separator.length + "</mo>".length;
				var endWant = value.indexOf(this.separator,iniWant) - "<mo>".length;
				if(endWant < 0) endWant = value.indexOf("</mrow></mfenced>");
				outOfBounds = outOfBounds || endWant == -1;
				this.failOnOutOfBounds(outOfBounds);
				var block = HxOverrides.substr(value,iniWant,endWant - iniWant);
				return "<mrow>" + block + "</mrow>";
			}
		}
	}
	,returnRowOfElementOfArray: function(iniWant,value,itemSelector,positionToBeWritten) {
		var outOfBounds = false;
		var rowStart = itemSelector == com.wiris.quizzes.impl.HTMLTools.SELECTOR_2D?"<mtr>":"<mrow>";
		var rowFinish = itemSelector == com.wiris.quizzes.impl.HTMLTools.SELECTOR_2D?"</mtr>":"</mrow>";
		var endWant = value.indexOf(rowFinish);
		var k = 0;
		while(k < positionToBeWritten[0] - 1 && !outOfBounds) {
			iniWant = value.indexOf(rowStart,iniWant + 1);
			endWant = value.indexOf(rowFinish,endWant + 1);
			outOfBounds = iniWant == -1 || endWant == -1;
			k++;
		}
		this.failOnOutOfBounds(outOfBounds);
		if(itemSelector == com.wiris.quizzes.impl.HTMLTools.SELECTOR_2D) endWant += rowFinish.length;
		var blockFromStartToEndWant = HxOverrides.substr(value,0,endWant);
		var isVector = blockFromStartToEndWant.lastIndexOf("]") != -1 && blockFromStartToEndWant.lastIndexOf("]") == this.maxValue(blockFromStartToEndWant.lastIndexOf("]"),blockFromStartToEndWant.lastIndexOf("}"));
		var block = HxOverrides.substr(value,iniWant,endWant - iniWant);
		return itemSelector == com.wiris.quizzes.impl.HTMLTools.SELECTOR_2D?"<mrow><mfenced><mtable>" + block + "</mtable></mfenced></mrow>":isVector?"<mrow><mrow><mfenced close=\"]\" open=\"[\"><mrow>" + block + "</mrow></mfenced></mrow></mrow>":"<mrow><mrow><mfenced close=\"}\" open=\"{\"><mrow>" + block + "</mrow></mfenced></mrow></mrow>";
	}
	,returnPositionOfElementOfArray: function(iniWant,value,itemSelector,positionToBeWritten) {
		var outOfBounds = false;
		var rowStart = itemSelector == com.wiris.quizzes.impl.HTMLTools.SELECTOR_2D?"<mtr>":"<mrow>";
		var rowFinish = itemSelector == com.wiris.quizzes.impl.HTMLTools.SELECTOR_2D?"</mtr>":"</mrow>";
		var elementStart = itemSelector == com.wiris.quizzes.impl.HTMLTools.SELECTOR_2D?"<mtd>":this.separator;
		var elementFinish = itemSelector == com.wiris.quizzes.impl.HTMLTools.SELECTOR_2D?"</mtd>":this.separator;
		var k = 0;
		while(k < positionToBeWritten[0] - 1 && !outOfBounds) {
			iniWant = value.indexOf(rowStart,iniWant + 1);
			outOfBounds = iniWant == -1;
			k++;
		}
		this.failOnOutOfBounds(outOfBounds);
		value = HxOverrides.substr(value,0,value.indexOf(rowFinish,iniWant));
		iniWant = itemSelector == com.wiris.quizzes.impl.HTMLTools.SELECTOR_2D?value.indexOf(elementStart,iniWant):this.minValue(value.indexOf(elementStart,iniWant),this.minValue(value.indexOf("<mn>",iniWant),value.indexOf("<mi>",iniWant)));
		outOfBounds = iniWant == -1;
		k = 0;
		while(k < positionToBeWritten[1] - 1 && !outOfBounds) {
			iniWant = value.indexOf(elementStart,iniWant + 1);
			outOfBounds = iniWant == -1;
			k++;
		}
		if(itemSelector == com.wiris.quizzes.impl.HTMLTools.SELECTOR_2D) iniWant += elementStart.length; else if(k != 0) iniWant += this.separator.length + "</mo>".length;
		var endWant = value.indexOf(elementFinish,iniWant);
		if(itemSelector == com.wiris.quizzes.impl.HTMLTools.SELECTOR_1D) {
			endWant = value.indexOf(this.separator,iniWant) - "<mo>".length;
			if(endWant < 0) endWant = value.length;
		}
		outOfBounds = outOfBounds || endWant == -1;
		this.failOnOutOfBounds(outOfBounds);
		var block = HxOverrides.substr(value,iniWant,endWant - iniWant);
		return "<mrow>" + block + "</mrow>";
	}
	,returnFormula: function(formula,value,placeholder,itemSelector,pos) {
		var splittag = false;
		var formula1 = HxOverrides.substr(formula,0,pos);
		var formula2 = HxOverrides.substr(formula,pos + placeholder.length,null);
		if(itemSelector != com.wiris.quizzes.impl.HTMLTools.NOT_A_SELECTOR) {
			var newPosition = formula1.lastIndexOf("<msub>");
			var target = HxOverrides.substr(formula1,newPosition,"<msub>".length);
			if(newPosition != -1) formula1 = com.wiris.util.type.StringUtils.replaceLastOccurrence(formula1,target,"");
			var targetPosition1 = formula2.indexOf("<mn>");
			var targetPosition2 = formula2.indexOf("</msub>") + "</msub>".length;
			target = HxOverrides.substr(formula2,targetPosition1,targetPosition2 - targetPosition1);
			formula2 = com.wiris.util.type.StringUtils.replaceFirstOccurrence(formula2,target,"");
			if(itemSelector == com.wiris.quizzes.impl.HTMLTools.SELECTOR_2D && this.isPosition(formula,pos)) {
				newPosition = formula2.indexOf("<mrow>");
				target = HxOverrides.substr(formula2,newPosition,"<mrow>".length);
				if(newPosition != -1) formula2 = com.wiris.util.type.StringUtils.replaceFirstOccurrence(formula2,target,"");
			}
		}
		var openTag1 = formula1.lastIndexOf("<");
		var closeTag1 = formula1.lastIndexOf(">");
		var openTag2 = formula2.indexOf("<");
		var closeTag2 = formula2.indexOf(">");
		var after = "";
		var before = "";
		if(closeTag1 + 1 < formula1.length) {
			splittag = true;
			var closeTag = HxOverrides.substr(formula2,openTag2,closeTag2 - openTag2 + 1);
			before = HxOverrides.substr(formula1,openTag1,null) + closeTag;
		}
		if(openTag2 > 0) {
			splittag = true;
			var openTag = HxOverrides.substr(formula1,openTag1,closeTag1 - openTag1 + 1);
			after = openTag + HxOverrides.substr(formula2,0,closeTag2 + 1);
		}
		var tag1 = HxOverrides.substr(formula1,openTag1,closeTag1 + 1 - openTag1);
		var isAnnotation = StringTools.startsWith(tag1,"<annotation");
		var space = tag1.indexOf(" ");
		if(space != -1 || isAnnotation) {
			var attribs = space != -1?" " + HxOverrides.substr(tag1,space + 1,tag1.length - 1 - (space + 1)):"";
			var replaceTag = isAnnotation?"annotation":"mstyle";
			if(attribs == " encoding=\"text/plain\"") value = this.mathMLToText(value);
			value = "<" + replaceTag + attribs + ">" + value + "</" + replaceTag + ">";
		}
		formula1 = HxOverrides.substr(formula1,0,openTag1);
		formula2 = HxOverrides.substr(formula2,closeTag2 + 1,null);
		if(splittag) formula = formula1 + "<mrow>" + before + value + after + "</mrow>" + formula2; else formula = formula1 + value + formula2;
		var array = new Array();
		array.push(formula);
		array.push(value);
		return array;
	}
	,replaceMathMLVariablesInsideMathML: function(formula,variables) {
		var keys = this.sortIterator(variables.keys());
		var j = keys.length - 1;
		while(j >= 0) {
			var name = keys[j];
			var placeholder = this.getPlaceHolder(name);
			var pos = 0;
			var lastPos = 0;
			while((pos = formula.indexOf(placeholder,pos)) != -1) {
				if(this.variablePosition(formula,pos) >= 2 && this.checkSubstringParameterAnswer(formula,name,lastPos,pos)) {
					var value = this.toSubFormula(variables.get(name));
					var itemSelector = this.isPartOfMatrixVectorOrList(formula,value,pos);
					try {
						value = this.selectElementOfArray(value,itemSelector,formula,pos);
					} catch( t ) {
						itemSelector = com.wiris.quizzes.impl.HTMLTools.NOT_A_SELECTOR;
					}
					var array = this.returnFormula(formula,value,placeholder,itemSelector,pos);
					formula = array[0];
				}
				pos++;
				lastPos = pos;
			}
			j--;
		}
		return formula;
	}
	,fixPlottersWithDimensions: function(variables) {
		var v = variables.get(com.wiris.quizzes.impl.MathContent.TYPE_GEOMETRY_FILE);
		var plotters = v.keys();
		while(plotters.hasNext()) {
			var plotter = plotters.next();
			var mathmlV = variables.get(com.wiris.quizzes.impl.MathContent.TYPE_MATHML);
			if(mathmlV != null) {
				var mathmls = mathmlV.keys();
				while(mathmls.hasNext()) {
					var mathml = mathmls.next();
					if(StringTools.startsWith(mathml,plotter + "_") && mathmlV.get(mathml).indexOf(mathml) != -1) {
						var parts = mathml.split("_");
						if(parts.length == 2 && Std.parseInt(parts[1]) > 0 || parts.length == 3 && Std.parseInt(parts[1]) > 0 && Std.parseInt(parts[2]) > 0) {
							v.set(mathml,mathmlV.get(mathml));
							mathmlV.remove(mathml);
						}
					}
				}
			}
		}
		return v;
	}
	,maxValue: function(a,b) {
		if(a == -1 && b != -1) return b;
		if(a != -1 && b == -1) return a;
		if(a == -1 && b == -1) return -1;
		return Math.max(a,b) | 0;
	}
	,minValue: function(a,b) {
		if(a == -1 && b != -1) return b;
		if(a != -1 && b == -1) return a;
		if(a == -1 && b == -1) return -1;
		return Math.min(a,b) | 0;
	}
	,position: function(formula,pos) {
		var x;
		var y = -1;
		var posX = formula.indexOf("<mn>",pos) + "<mn>".length;
		if(this.isPosition(formula,pos)) {
			var posY = formula.indexOf("<mn>",posX) + "<mn>".length;
			var valueStringX = HxOverrides.substr(formula,posX,formula.indexOf("</mn>",posX) - posX);
			x = com.wiris.util.type.IntegerTools.isInt(valueStringX)?Std.parseInt(valueStringX):-1;
			var valueStringY = HxOverrides.substr(formula,posY,formula.indexOf("</mn>",posY) - posY);
			y = com.wiris.util.type.IntegerTools.isInt(valueStringY)?Std.parseInt(valueStringY):-1;
			var start = formula.indexOf("</mn>",posX) + "</mn><mo>".length;
			var finish = posY - "</mo><mn>".length;
			if(start > finish || HxOverrides.substr(formula,start,finish - start).indexOf(this.separator) == -1) {
				x = -1;
				y = -1;
			}
		} else {
			var valueStringX = HxOverrides.substr(formula,posX,formula.indexOf("</mn>",posX) - posX);
			x = com.wiris.util.type.IntegerTools.isInt(valueStringX)?Std.parseInt(valueStringX):-1;
		}
		return [x,y];
	}
	,isPosition: function(formula,pos) {
		return (formula.indexOf("<mo>,</mo>") != -1 || formula.indexOf("<mo>;</mo>") != -1) && StringTools.startsWith(HxOverrides.substr(formula,formula.indexOf("</mn>",pos) + "</mn>".length,null),"<mo>,</mo>") || StringTools.startsWith(HxOverrides.substr(formula,formula.indexOf("</mn>",pos) + "</mn>".length,null),"<mo>;</mo>");
	}
	,isPartOfMatrixVectorOrList: function(formula,value,pos) {
		if(formula.indexOf("<msub>") != -1 && StringTools.startsWith(HxOverrides.substr(formula,pos - "<mo>".length - "<msub>".length,null),"<msub>")) {
			if(value.indexOf("<mtable><mtr>") != -1 && this.isPosition(formula,pos) && StringTools.startsWith(HxOverrides.substr(formula,pos - "<mo>".length - "<msub>".length,null),"<msub>") && StringTools.startsWith(HxOverrides.substr(formula,formula.indexOf("</mo>",pos) + "</mo>".length,null),"<mrow><mn>") && (formula.indexOf("<mo>,</mo>") != -1 || formula.indexOf("<mo>;</mo>") != -1) && StringTools.startsWith(HxOverrides.substr(formula,formula.indexOf("</mn>",pos) + "</mn>".length,null),"<mo>,</mo>") && StringTools.startsWith(HxOverrides.substr(formula,this.minValue(formula.indexOf("<mo>,</mo>",pos),formula.indexOf("<mo>;</mo>",pos)) + "<mo>,</mo>".length,null),"<mn>") && StringTools.startsWith(HxOverrides.substr(formula,formula.indexOf("</mn>",this.minValue(formula.indexOf("<mo>,</mo>",pos),formula.indexOf("<mo>;</mo>",pos))) + "</mn>".length,null),"</mrow></msub>")) return com.wiris.quizzes.impl.HTMLTools.SELECTOR_2D;
			if(value.indexOf("<mtable><mtr>") != -1 && !this.isPosition(formula,pos) && (StringTools.startsWith(HxOverrides.substr(formula,pos - "<mo>".length - "<msub>".length,null),"<msub>") && StringTools.startsWith(HxOverrides.substr(formula,formula.indexOf("</mo>",pos) + "</mo>".length,null),"<mn>") && StringTools.startsWith(HxOverrides.substr(formula,formula.indexOf("</mn>",pos) + "</mn>".length,null),"</msub>"))) return com.wiris.quizzes.impl.HTMLTools.SELECTOR_2D;
			if((value.indexOf("[") != -1 || value.indexOf("{") != -1) && (StringTools.startsWith(HxOverrides.substr(formula,pos - "<mo>".length - "<msub>".length,null),"<msub>") && StringTools.startsWith(HxOverrides.substr(formula,formula.indexOf("</mo>",pos) + "</mo>".length,null),"<mn>") || StringTools.startsWith(HxOverrides.substr(formula,formula.indexOf("</mo>",pos) + "</mo>".length,null),"<mrow>"))) return com.wiris.quizzes.impl.HTMLTools.SELECTOR_1D;
		}
		return com.wiris.quizzes.impl.HTMLTools.NOT_A_SELECTOR;
	}
	,splitHTMLbyMathML: function(html) {
		var tokens = new Array();
		var start = 0;
		var end = 0;
		while((start = html.indexOf("<math",end)) != -1) {
			if(start - end > 0) tokens.push(HxOverrides.substr(html,end,start - end));
			var firstClose = html.indexOf(">",start);
			if(firstClose != -1 && HxOverrides.substr(html,firstClose - 1,1) == "/") end = firstClose + 1; else end = html.indexOf("</math>",start) + "</math>".length;
			tokens.push(HxOverrides.substr(html,start,end - start));
			if(end + "</p><p>".length <= html.length && !StringTools.startsWith(HxOverrides.substr(html,end + "</p><p>".length,null),"<math") && !StringTools.startsWith(HxOverrides.substr(html,end,null),"<math") && end + "</p>".length >= html.length + 1) {
				if(StringTools.startsWith(HxOverrides.substr(html,end,null),"</p>")) {
					tokens.push("</p>");
					start = html.indexOf("<p>",end);
					end = html.indexOf("</p>",start);
					tokens.push(HxOverrides.substr(html,start,end - start));
					start = html.indexOf("<p>",end);
					end = html.indexOf("</p>",start);
				} else {
					start = end;
					end = HxOverrides.substr(html,start,null).indexOf("<math") != -1?this.minValue(html.indexOf("<math",start),html.indexOf("</p>",start)):html.indexOf("</p>",start);
					tokens.push(HxOverrides.substr(html,start,end - start));
					start = end;
					end = HxOverrides.substr(html,start,null).indexOf("<math") != -1?this.minValue(html.indexOf("<math",start),html.indexOf("</p>",start)):html.indexOf("</p>",start);
				}
			}
		}
		if(end < html.length) tokens.push(HxOverrides.substr(html,end,null));
		return tokens;
	}
	,assertTextSyntax: function(name) {
		var first = name.indexOf("_");
		var second = name.lastIndexOf("_");
		if(StringTools.startsWith(HxOverrides.substr(name,first + 1,null),"_") || first + 1 == name.length || StringTools.startsWith(HxOverrides.substr(name,second - 1,null),"_") || second + 1 == name.length) return false;
		return true;
	}
	,replaceTextWithMathml: function(name) {
		var previous = "<math xmlns=\"http://www.w3.org/1998/Math/MathML\"><msub><mo>#";
		var end = "</msub></math>";
		var variableName = HxOverrides.substr(name,0,name.indexOf("_"));
		if(name.indexOf("_",name.indexOf("_") + 1) != -1) {
			var first = name.indexOf("_");
			var second = name.indexOf("_",name.indexOf("_") + 1);
			var subscript1 = HxOverrides.substr(name,first + 1,second - (first + 1));
			var openTag1 = com.wiris.util.type.IntegerTools.isInt(subscript1)?"<mn>":"<mi>";
			var closeTag1 = com.wiris.util.type.IntegerTools.isInt(subscript1)?"</mn>":"</mi>";
			var subscript2 = HxOverrides.substr(name,second + 1,null);
			var openTag2 = com.wiris.util.type.IntegerTools.isInt(subscript2)?"<mn>":"<mi>";
			var closeTag2 = com.wiris.util.type.IntegerTools.isInt(subscript2)?"</mn>":"</mi>";
			return previous + variableName + "</mo><mrow>" + openTag1 + subscript1 + closeTag1 + "<mo>,</mo>" + openTag2 + subscript2 + closeTag2 + "</mrow>" + end;
		} else {
			var subscript = HxOverrides.substr(name,name.indexOf("_") + 1,null);
			var openTag = com.wiris.util.type.IntegerTools.isInt(subscript)?"<mn>":"<mi>";
			var closeTag = com.wiris.util.type.IntegerTools.isInt(subscript)?"</mn>":"</mi>";
			return previous + variableName + "</mo>" + openTag + subscript + closeTag + end;
		}
	}
	,expandVariables: function(html,variables) {
		if(variables == null || html.indexOf("#") == -1) return html;
		html = this.extractActionExpressions(html,null);
		var encoded = this.isMathMLEncoded(html);
		if(encoded) html = this.decodeMathML(html);
		html = com.wiris.util.xml.WXmlUtils.resolveEntities(html);
		html = this.prepareFormulas(html);
		html = this.replaceVariablesInsideHTMLTables(html,variables);
		var tokens = this.splitHTMLbyMathML(html);
		var sb = new StringBuf();
		var _g1 = 0, _g = tokens.length;
		while(_g1 < _g) {
			var i = _g1++;
			var token = tokens[i];
			var v;
			if(StringTools.startsWith(token,"<math")) {
				v = variables.get(com.wiris.quizzes.impl.MathContent.TYPE_MATHML);
				if(v != null) token = this.replaceMathMLVariablesInsideMathML(token,v);
				v = variables.get(com.wiris.quizzes.impl.MathContent.TYPE_TEXT);
				if(v != null) token = this.replaceMathMLVariablesInsideMathML(token,v);
			} else {
				v = variables.get(com.wiris.quizzes.impl.MathContent.TYPE_IMAGE_REF);
				if(v != null) token = this.replaceVariablesInsideHTML(token,v,com.wiris.quizzes.impl.MathContent.TYPE_IMAGE_REF,true);
				v = variables.get(com.wiris.quizzes.impl.MathContent.TYPE_IMAGE);
				if(v != null) token = this.replaceVariablesInsideHTML(token,v,com.wiris.quizzes.impl.MathContent.TYPE_IMAGE,true);
				v = variables.get(com.wiris.quizzes.impl.MathContent.TYPE_GEOMETRY_FILE);
				if(v != null) {
					v = this.fixPlottersWithDimensions(variables);
					token = this.replaceVariablesInsideHTML(token,v,com.wiris.quizzes.impl.MathContent.TYPE_GEOMETRY_FILE,true);
				}
				v = variables.get(com.wiris.quizzes.impl.MathContent.TYPE_MATHML);
				if(v != null) token = this.replaceVariablesInsideHTML(token,v,com.wiris.quizzes.impl.MathContent.TYPE_MATHML,true);
				v = variables.get(com.wiris.quizzes.impl.MathContent.TYPE_TEXT);
				if(v != null) token = this.replaceVariablesInsideHTML(token,v,com.wiris.quizzes.impl.MathContent.TYPE_TEXT,true);
			}
			sb.b += Std.string(token);
		}
		var result = sb.b;
		if(encoded) result = this.encodeMathML(result);
		return result;
	}
	,expandVariablesText: function(text,textvariables) {
		return this.replaceVariablesInsideHTML(text,textvariables,com.wiris.quizzes.impl.MathContent.TYPE_TEXT,false);
	}
	,encodeMathML: function(html) {
		var start;
		var end = 0;
		while((start = html.indexOf("<math",end)) != -1) {
			var closemath = "</math>";
			end = html.indexOf(closemath,start) + closemath.length;
			var formula = HxOverrides.substr(html,start,end - start);
			formula = StringTools.replace(formula,"<",com.wiris.quizzes.impl.HTMLTools.SAFE_MATHML_LT);
			formula = StringTools.replace(formula,">",com.wiris.quizzes.impl.HTMLTools.SAFE_MATHML_GT);
			formula = StringTools.replace(formula,"\"",com.wiris.quizzes.impl.HTMLTools.SAFE_MATHML_QUOT);
			formula = StringTools.replace(formula,"&",com.wiris.quizzes.impl.HTMLTools.SAFE_MATHML_AMP);
			html = HxOverrides.substr(html,0,start) + formula + HxOverrides.substr(html,end,null);
			end = start + formula.length;
		}
		return html;
	}
	,decodeMathML: function(html) {
		var closemath = com.wiris.quizzes.impl.HTMLTools.SAFE_MATHML_LT + "/math" + com.wiris.quizzes.impl.HTMLTools.SAFE_MATHML_GT;
		var start;
		var end = 0;
		while((start = html.indexOf(com.wiris.quizzes.impl.HTMLTools.SAFE_MATHML_LT + "math",end)) != -1) {
			end = html.indexOf(closemath,start) + closemath.length;
			var formula = HxOverrides.substr(html,start,end - start);
			formula = com.wiris.util.xml.WXmlUtils.htmlUnescape(formula);
			formula = StringTools.replace(formula,com.wiris.quizzes.impl.HTMLTools.SAFE_MATHML_LT,"<");
			formula = StringTools.replace(formula,com.wiris.quizzes.impl.HTMLTools.SAFE_MATHML_GT,">");
			formula = StringTools.replace(formula,com.wiris.quizzes.impl.HTMLTools.SAFE_MATHML_QUOT,"\"");
			formula = StringTools.replace(formula,com.wiris.quizzes.impl.HTMLTools.SAFE_MATHML_AMP,"&");
			html = HxOverrides.substr(html,0,start) + formula + HxOverrides.substr(html,end,null);
			end = start + formula.length;
		}
		return html;
	}
	,isMathMLEncoded: function(html) {
		return html.indexOf(com.wiris.quizzes.impl.HTMLTools.SAFE_MATHML_LT + "math") != -1;
	}
	,extractVariableNames: function(html) {
		if(this.isMathMLEncoded(html)) html = this.decodeMathML(html);
		html = com.wiris.util.xml.WXmlUtils.resolveEntities(html);
		html = this.prepareFormulas(html);
		var names = new Array();
		var start = 0;
		while((start = html.indexOf("#",start)) != -1) {
			if(this.variablePosition(html,start) > 0) {
				var name = this.getVariableName(html,start);
				com.wiris.quizzes.impl.HTMLTools.insertStringInSortedArray(name,names);
				if(name != null && name.indexOf("_") != -1 && this.assertTextSyntax(name)) {
					name = HxOverrides.substr(name,0,name.indexOf("_"));
					com.wiris.quizzes.impl.HTMLTools.insertStringInSortedArray(name,names);
				}
			}
			start++;
		}
		return com.wiris.quizzes.impl.HTMLTools.toNativeArray(names);
	}
	,addComputedVariablesToAlgorithm: function(algorithm,computedVariables) {
		var it = computedVariables.keys();
		if(it.hasNext() && algorithm == null) algorithm = com.wiris.quizzes.impl.HTMLTools.EMPTY_CALCME_SESSION;
		while(it.hasNext()) {
			var name = it.next();
			var value = computedVariables.get(name);
			var isMathML = value.indexOf("<mi>") != -1;
			if(isMathML) {
				value = StringTools.replace(value,"<mo>#</mo>","<mi>#</mi>");
				value = this.prepareFormulas("<math>" + value + "</math>");
				value = HxOverrides.substr(value,"<math>".length,null);
				value = HxOverrides.substr(value,0,value.length - "</math>".length);
			}
			value = StringTools.replace(value,"#","");
			if(isMathML) {
				var auxiliarString = [HxOverrides.substr(algorithm,0,algorithm.lastIndexOf("</group>")),HxOverrides.substr(algorithm,algorithm.lastIndexOf("</group>"),null)];
				algorithm = auxiliarString[0] + "<command><input><math xmlns=\"http://www.w3.org/1998/Math/MathML\">" + "<mi>" + name + "</mi>" + "<mo>=</mo><mrow>" + value + "</mrow></math></input></command>" + auxiliarString[1];
			} else {
				var auxiliarString = [HxOverrides.substr(algorithm,0,algorithm.lastIndexOf("</group>")),HxOverrides.substr(algorithm,algorithm.lastIndexOf("</group>"),null)];
				algorithm = auxiliarString[0] + "<algorithm>" + name + "=" + value + "</algorithm>" + auxiliarString[1];
			}
		}
		return algorithm;
	}
	,extractActionExpressions: function(html,variables) {
		var originalHtml = html;
		html = com.wiris.util.xml.WXmlUtils.resolveEntities(html);
		var actions = com.wiris.quizzes.impl.ActionCommands.COMMANDS;
		var _g = 0;
		while(_g < actions.length) {
			var action = actions[_g];
			++_g;
			var bracketMathMLActionString = "<mi>" + action + "</mi><mo>(</mo>";
			var mfencedMathMLActioNString = "<mi>" + action + "</mi><mfenced>";
			var paragraphActionString = action + "(";
			while(html.indexOf(bracketMathMLActionString) != -1 || html.indexOf(mfencedMathMLActioNString) != -1 || html.indexOf(paragraphActionString) != -1) {
				var numberOfOpenBrackets = 0;
				var indexOfLastClosingBracket = 0;
				if(html.indexOf(bracketMathMLActionString) != -1) {
					var numberOfClosedBrackets = 0;
					var _g2 = html.indexOf(bracketMathMLActionString), _g1 = html.lastIndexOf("<mo>)</mo>") + "<mo>)</mo>".length;
					while(_g2 < _g1) {
						var i = _g2++;
						if(html.charAt(i) == "(") numberOfOpenBrackets++; else if(html.charAt(i) == ")") numberOfClosedBrackets++;
						if(numberOfOpenBrackets == numberOfClosedBrackets && numberOfOpenBrackets != 0) {
							indexOfLastClosingBracket = i + "</mo>".length;
							break;
						}
					}
					if(numberOfOpenBrackets != numberOfClosedBrackets && numberOfOpenBrackets != 0 && numberOfClosedBrackets != 0) return originalHtml;
					if(html.indexOf(bracketMathMLActionString,html.indexOf(bracketMathMLActionString) + 1) < indexOfLastClosingBracket && html.indexOf(bracketMathMLActionString,html.indexOf(bracketMathMLActionString) + 1) != -1) return originalHtml;
					var evaluateFullString = HxOverrides.substr(html,html.indexOf(bracketMathMLActionString),indexOfLastClosingBracket - html.indexOf(bracketMathMLActionString) + 1);
					var valueInsideEvaluate = HxOverrides.substr(evaluateFullString,bracketMathMLActionString.length,evaluateFullString.lastIndexOf("<mo>)</mo>") - bracketMathMLActionString.length);
					html = StringTools.replace(html,evaluateFullString,"<mi>#_computed_variable_" + haxe.Md5.encode(evaluateFullString) + "</mi>");
					var key = "_computed_variable_" + haxe.Md5.encode(evaluateFullString);
					if(variables != null) variables.set(key,valueInsideEvaluate);
				} else if(html.indexOf(mfencedMathMLActioNString) != -1) {
					var auxiliarIndexOpenBracket = html.indexOf(mfencedMathMLActioNString);
					var auxiliarIndexClosedBracket = html.indexOf("</mfenced>",html.indexOf(mfencedMathMLActioNString));
					while(numberOfOpenBrackets != indexOfLastClosingBracket || numberOfOpenBrackets == 0) {
						if(html.indexOf("<mfenced>",auxiliarIndexOpenBracket) < html.indexOf("</mfenced>",auxiliarIndexClosedBracket) && html.indexOf("<mfenced>",auxiliarIndexOpenBracket) != -1) {
							numberOfOpenBrackets++;
							auxiliarIndexOpenBracket = html.indexOf("<mfenced>",auxiliarIndexOpenBracket) + 1;
						}
						if(html.indexOf("<mfenced>",auxiliarIndexOpenBracket) > html.indexOf("</mfenced>",auxiliarIndexClosedBracket) || html.indexOf("<mfenced>",auxiliarIndexOpenBracket) == -1) {
							indexOfLastClosingBracket++;
							auxiliarIndexClosedBracket = html.indexOf("</mfenced>",auxiliarIndexClosedBracket) + 1;
						}
					}
					if(html.indexOf(mfencedMathMLActioNString,html.indexOf(mfencedMathMLActioNString) + 1) < auxiliarIndexClosedBracket + 9 && html.indexOf(mfencedMathMLActioNString,html.indexOf(mfencedMathMLActioNString) + 1) != -1) return originalHtml;
					var evaluateFullString = HxOverrides.substr(html,html.indexOf(mfencedMathMLActioNString),auxiliarIndexClosedBracket + "</mfenced>".length - 1 - html.indexOf(mfencedMathMLActioNString));
					var valueInsideEvaluate = HxOverrides.substr(evaluateFullString,mfencedMathMLActioNString.length,evaluateFullString.lastIndexOf("</mfenced>") - mfencedMathMLActioNString.length);
					html = StringTools.replace(html,evaluateFullString,"<mi>#_computed_variable_" + haxe.Md5.encode(evaluateFullString) + "</mi>");
					var key = "_computed_variable_" + haxe.Md5.encode(evaluateFullString);
					if(variables != null) variables.set(key,valueInsideEvaluate);
				} else if(html.indexOf(paragraphActionString) != -1) {
					var numberOfClosedBrackets = 0;
					var _g2 = html.indexOf(paragraphActionString), _g1 = html.lastIndexOf(")") + 1;
					while(_g2 < _g1) {
						var i = _g2++;
						if(html.charAt(i) == "(") numberOfOpenBrackets++; else if(html.charAt(i) == ")") numberOfClosedBrackets++;
						if(numberOfOpenBrackets == numberOfClosedBrackets && numberOfOpenBrackets != 0) {
							indexOfLastClosingBracket = i;
							break;
						}
					}
					if(numberOfOpenBrackets != numberOfClosedBrackets && numberOfOpenBrackets != 0 && numberOfClosedBrackets != 0) return originalHtml;
					if(html.indexOf(paragraphActionString,html.indexOf(paragraphActionString) + 1) < indexOfLastClosingBracket && html.indexOf(paragraphActionString,html.indexOf(paragraphActionString) + 1) != -1) return originalHtml;
					var evaluateFullString = HxOverrides.substr(html,html.indexOf(paragraphActionString),indexOfLastClosingBracket + 1 - html.indexOf(paragraphActionString));
					var valueInsideEvaluate = HxOverrides.substr(evaluateFullString,paragraphActionString.length,evaluateFullString.lastIndexOf(")") - paragraphActionString.length);
					html = StringTools.replace(html,evaluateFullString,"#_computed_variable_" + haxe.Md5.encode(evaluateFullString));
					var key = "_computed_variable_" + haxe.Md5.encode(evaluateFullString);
					if(variables != null) variables.set(key,valueInsideEvaluate);
				}
			}
		}
		return html;
	}
	,plotterLoadingSrc: null
	,proxyUrl: null
	,answerKeyword: null
	,separator: null
	,__class__: com.wiris.quizzes.impl.HTMLTools
}
com.wiris.quizzes.impl.HandwritingConstraints = $hxClasses["com.wiris.quizzes.impl.HandwritingConstraints"] = function() {
	if(com.wiris.quizzes.impl.HandwritingConstraints.symbol_conflicts == null) com.wiris.quizzes.impl.HandwritingConstraints.symbol_conflicts = [[com.wiris.system.Utf8.uchr(120),com.wiris.system.Utf8.uchr(88),com.wiris.system.Utf8.uchr(215),com.wiris.system.Utf8.uchr(967)],[com.wiris.system.Utf8.uchr(46),com.wiris.system.Utf8.uchr(44),com.wiris.system.Utf8.uchr(183)],[com.wiris.system.Utf8.uchr(50),com.wiris.system.Utf8.uchr(122),com.wiris.system.Utf8.uchr(90)],[com.wiris.system.Utf8.uchr(53),com.wiris.system.Utf8.uchr(115),com.wiris.system.Utf8.uchr(83),com.wiris.system.Utf8.uchr(36)],[com.wiris.system.Utf8.uchr(49),com.wiris.system.Utf8.uchr(44),com.wiris.system.Utf8.uchr(124),com.wiris.system.Utf8.uchr(39)],[com.wiris.system.Utf8.uchr(105),com.wiris.system.Utf8.uchr(106),com.wiris.system.Utf8.uchr(58),com.wiris.system.Utf8.uchr(59)],[com.wiris.system.Utf8.uchr(121),com.wiris.system.Utf8.uchr(52),com.wiris.system.Utf8.uchr(89)],[com.wiris.system.Utf8.uchr(112),com.wiris.system.Utf8.uchr(80),com.wiris.system.Utf8.uchr(961)],[com.wiris.system.Utf8.uchr(99),com.wiris.system.Utf8.uchr(67),com.wiris.system.Utf8.uchr(40),com.wiris.system.Utf8.uchr(8834)],[com.wiris.system.Utf8.uchr(48),com.wiris.system.Utf8.uchr(111),com.wiris.system.Utf8.uchr(79),com.wiris.system.Utf8.uchr(176)],[com.wiris.system.Utf8.uchr(916),com.wiris.system.Utf8.uchr(65)],[com.wiris.system.Utf8.uchr(66),com.wiris.system.Utf8.uchr(946)],[com.wiris.system.Utf8.uchr(8707),com.wiris.system.Utf8.uchr(51)],[com.wiris.system.Utf8.uchr(57),com.wiris.system.Utf8.uchr(113),com.wiris.system.Utf8.uchr(103)],[com.wiris.system.Utf8.uchr(57),com.wiris.system.Utf8.uchr(97)],[com.wiris.system.Utf8.uchr(118),com.wiris.system.Utf8.uchr(86),com.wiris.system.Utf8.uchr(8744),com.wiris.system.Utf8.uchr(957)],[com.wiris.system.Utf8.uchr(114),com.wiris.system.Utf8.uchr(963)],[com.wiris.system.Utf8.uchr(116),com.wiris.system.Utf8.uchr(43)],[com.wiris.system.Utf8.uchr(8712),com.wiris.system.Utf8.uchr(69),com.wiris.system.Utf8.uchr(949)],[com.wiris.system.Utf8.uchr(110),com.wiris.system.Utf8.uchr(104)],[com.wiris.system.Utf8.uchr(107),com.wiris.system.Utf8.uchr(75),com.wiris.system.Utf8.uchr(954)],[com.wiris.system.Utf8.uchr(117),com.wiris.system.Utf8.uchr(85),com.wiris.system.Utf8.uchr(8746)],[com.wiris.system.Utf8.uchr(119),com.wiris.system.Utf8.uchr(87),com.wiris.system.Utf8.uchr(969)],[com.wiris.system.Utf8.uchr(100),com.wiris.system.Utf8.uchr(8706),com.wiris.system.Utf8.uchr(948)],[com.wiris.system.Utf8.uchr(8706),com.wiris.system.Utf8.uchr(97)],[com.wiris.system.Utf8.uchr(8709),com.wiris.system.Utf8.uchr(952),com.wiris.system.Utf8.uchr(920)],[com.wiris.system.Utf8.uchr(8745),com.wiris.system.Utf8.uchr(110),com.wiris.system.Utf8.uchr(951)],[com.wiris.system.Utf8.uchr(923),com.wiris.system.Utf8.uchr(8743),com.wiris.system.Utf8.uchr(94)],[com.wiris.system.Utf8.uchr(968),com.wiris.system.Utf8.uchr(936)],[com.wiris.system.Utf8.uchr(8709),com.wiris.system.Utf8.uchr(966),com.wiris.system.Utf8.uchr(934)],[com.wiris.system.Utf8.uchr(928),com.wiris.system.Utf8.uchr(960),com.wiris.system.Utf8.uchr(8719)],[com.wiris.system.Utf8.uchr(950),com.wiris.system.Utf8.uchr(958)],[com.wiris.system.Utf8.uchr(950),com.wiris.system.Utf8.uchr(51),com.wiris.system.Utf8.uchr(122)],[com.wiris.system.Utf8.uchr(9180),com.wiris.system.Utf8.uchr(94),com.wiris.system.Utf8.uchr(126),com.wiris.system.Utf8.uchr(45)]];
	if(com.wiris.quizzes.impl.HandwritingConstraints.symbol_default_excluded == null) com.wiris.quizzes.impl.HandwritingConstraints.symbol_default_excluded = [["sin","cos","tan","log"]];
};
com.wiris.quizzes.impl.HandwritingConstraints.__name__ = ["com","wiris","quizzes","impl","HandwritingConstraints"];
com.wiris.quizzes.impl.HandwritingConstraints.symbol_conflicts = null;
com.wiris.quizzes.impl.HandwritingConstraints.symbol_default_excluded = null;
com.wiris.quizzes.impl.HandwritingConstraints.readHandwritingConstraints = function(json) {
	var hc = new com.wiris.quizzes.impl.HandwritingConstraints();
	var obj = com.wiris.util.json.JSon.decode(json);
	hc.symbols = obj.exists("symbols")?obj.get("symbols"):new Array();
	hc.structure = obj.exists("structure")?obj.get("structure"):new Array();
	return hc;
}
com.wiris.quizzes.impl.HandwritingConstraints.newHandwritingConstraints = function() {
	var hc = new com.wiris.quizzes.impl.HandwritingConstraints();
	hc.symbols = new Array();
	hc.structure = new Array();
	hc.structure.push(com.wiris.quizzes.impl.HandwritingConstraints.GENERAL);
	hc.structure.push(com.wiris.quizzes.impl.HandwritingConstraints.FRACTIONS);
	return hc;
}
com.wiris.quizzes.impl.HandwritingConstraints.prototype = {
	getNegativeConstraints: function() {
		var h = new com.wiris.quizzes.impl.HandwritingConstraints();
		h.symbols = new Array();
		h.structure = this.structure;
		var blocked = new Array();
		var i;
		var _g1 = 0, _g = com.wiris.quizzes.impl.HandwritingConstraints.symbol_conflicts.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			var conflictSet = com.wiris.quizzes.impl.HandwritingConstraints.symbol_conflicts[i1];
			var exclude = new Array();
			var j;
			var _g3 = 0, _g2 = conflictSet.length;
			while(_g3 < _g2) {
				var j1 = _g3++;
				if(!com.wiris.system.ArrayEx.contains(this.symbols,conflictSet[j1])) exclude.push(conflictSet[j1]);
			}
			if(exclude.length < conflictSet.length) {
				var _g3 = 0, _g2 = exclude.length;
				while(_g3 < _g2) {
					var j1 = _g3++;
					blocked.push(exclude[j1]);
				}
			}
		}
		var _g1 = 0, _g = com.wiris.quizzes.impl.HandwritingConstraints.symbol_default_excluded.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			var defaultExcluded = com.wiris.quizzes.impl.HandwritingConstraints.symbol_default_excluded[i1];
			var exclude = true;
			var j;
			var _g3 = 0, _g2 = defaultExcluded.length;
			while(_g3 < _g2) {
				var j1 = _g3++;
				if(com.wiris.system.ArrayEx.contains(this.symbols,defaultExcluded[j1])) exclude = false;
			}
			if(exclude) {
				var _g3 = 0, _g2 = defaultExcluded.length;
				while(_g3 < _g2) {
					var j1 = _g3++;
					blocked.push(defaultExcluded[j1]);
				}
			}
		}
		var _g1 = 0, _g = com.wiris.quizzes.impl.HandwritingConstraints.ALL_SYMBOLS.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(!com.wiris.system.ArrayEx.contains(blocked,com.wiris.quizzes.impl.HandwritingConstraints.ALL_SYMBOLS[i1])) h.symbols.push(com.wiris.quizzes.impl.HandwritingConstraints.ALL_SYMBOLS[i1]);
		}
		return h;
	}
	,toJSON: function() {
		var h = new Hash();
		h.set("symbols",this.symbols);
		h.set("structure",this.structure);
		return com.wiris.util.json.JSon.encode(h);
	}
	,addStructureFromText: function(t) {
		if(t.indexOf("/") != -1) com.wiris.util.type.Arrays.insertSortedSet(this.structure,com.wiris.quizzes.impl.HandwritingConstraints.FRACTIONS);
		if(t.indexOf("sqrt") != -1 || t.indexOf("root") != -1) com.wiris.util.type.Arrays.insertSortedSet(this.structure,com.wiris.quizzes.impl.HandwritingConstraints.RADICALS);
		if(t.indexOf("\n") != -1) com.wiris.util.type.Arrays.insertSortedSet(this.structure,com.wiris.quizzes.impl.HandwritingConstraints.MULTILINE);
	}
	,addStructureFromMathML: function(m) {
		if(m.indexOf("<mfrac") != -1) com.wiris.util.type.Arrays.insertSortedSet(this.structure,com.wiris.quizzes.impl.HandwritingConstraints.FRACTIONS);
		if(m.indexOf("<mroot") != -1 || m.indexOf("<msqrt") != -1) com.wiris.util.type.Arrays.insertSortedSet(this.structure,com.wiris.quizzes.impl.HandwritingConstraints.RADICALS);
		if(m.indexOf("<munderover") != -1 || m.indexOf("<munder") != -1) com.wiris.util.type.Arrays.insertSortedSet(this.structure,com.wiris.quizzes.impl.HandwritingConstraints.BIGOPERATORS);
		if(m.indexOf("<mtable") != -1) {
			com.wiris.util.type.Arrays.insertSortedSet(this.structure,com.wiris.quizzes.impl.HandwritingConstraints.PIECEWISE);
			com.wiris.util.type.Arrays.insertSortedSet(this.structure,com.wiris.quizzes.impl.HandwritingConstraints.MATRICES);
		}
		if(m.indexOf("<mspace") != -1) com.wiris.util.type.Arrays.insertSortedSet(this.structure,com.wiris.quizzes.impl.HandwritingConstraints.MULTILINE);
	}
	,addToken: function(t) {
		if(!StringTools.startsWith(t,"#")) {
			t = com.wiris.util.xml.WXmlUtils.htmlUnescape(t);
			com.wiris.util.type.Arrays.insertSortedSet(this.symbols,t);
		}
	}
	,addTagContent: function(s,tag,split) {
		var start;
		var end = 0;
		while((start = s.indexOf("<" + tag,end)) != -1) {
			end = start + 1 + tag.length;
			var charAfterTag = HxOverrides.cca(s,end);
			if(charAfterTag == 32 || charAfterTag == 62) {
				var endBeginTag = s.indexOf(">",end);
				if(endBeginTag == -1) return;
				if(HxOverrides.cca(s,endBeginTag - 1) != 47) {
					var beginContent = endBeginTag + 1;
					var endContent = s.indexOf("<",beginContent);
					if(endContent == -1) return;
					var content = HxOverrides.substr(s,beginContent,endContent - beginContent);
					if(split) {
						var i = 0;
						while(i < content.length) {
							var c = com.wiris.system.Utf8.uchr(com.wiris.system.Utf8.charCodeAt(HxOverrides.substr(content,i,null),0));
							this.addToken(c);
							i += c.length;
						}
					} else this.addToken(content);
					end = endContent + 1;
				}
			}
		}
	}
	,addSymbolsFromMathML: function(s) {
		var tokenTags = ["mi","mn","mo"];
		var i;
		var _g1 = 0, _g = tokenTags.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			this.addTagContent(s,tokenTags[i1],tokenTags[i1] == "mn");
		}
	}
	,addSymbolsFromText: function(text) {
		this.addSymbolsFromMathML(new com.wiris.quizzes.impl.HTMLTools().textToMathML(text));
	}
	,addQuestionInstanceConstraints: function(qi) {
		if(qi.hasVariables()) {
			var mvars = qi.getMathMLVariables();
			if(mvars != null) {
				var keys = mvars.keys();
				while(keys.hasNext()) {
					var content = mvars.get(keys.next());
					this.addSymbolsFromMathML(content);
					this.addStructureFromMathML(content);
				}
			}
			var tvars = qi.getTextVariables();
			if(tvars != null) {
				var keys = tvars.keys();
				while(keys.hasNext()) {
					var content = tvars.get(keys.next());
					this.addSymbolsFromText(content);
					this.addStructureFromText(content);
				}
			}
		}
	}
	,addQuestionConstraints: function(q) {
		var h = new com.wiris.quizzes.impl.HTMLTools();
		var i;
		var _g1 = 0, _g = q.getCorrectAnswersLength();
		while(_g1 < _g) {
			var i1 = _g1++;
			var answer = q.getCorrectAnswer(i1);
			answer = h.prepareFormulas(answer);
			if(com.wiris.quizzes.impl.MathContent.getMathType(answer) == com.wiris.quizzes.impl.MathContent.TYPE_MATHML) {
				this.addSymbolsFromMathML(answer);
				this.addStructureFromMathML(answer);
			} else {
				this.addSymbolsFromText(answer);
				this.addStructureFromText(answer);
			}
		}
	}
	,structure: null
	,symbols: null
	,__class__: com.wiris.quizzes.impl.HandwritingConstraints
}
com.wiris.quizzes.impl.HtmlUiConfig = $hxClasses["com.wiris.quizzes.impl.HtmlUiConfig"] = function(classes) {
	this.openAnswerConfig();
	if(classes == null) return;
	var classArray = classes.split(" ");
	var _g = 0;
	while(_g < classArray.length) {
		var className = classArray[_g];
		++_g;
		if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISMULTICHOICE) this.multichoiceConfig(); else if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISOPENANSWER) this.openAnswerConfig(); else if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISESSAY) this.essayConfig(); else if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISANSWERFEEDBACK) {
			this.showCorrectAnswerFeedback = false;
			this.showAssertionsFeedback = true;
			this.showFieldDecorationFeedback = false;
		} else if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISEMBEDDEDFEEDBACK) {
			this.showCorrectAnswerFeedback = false;
			this.showAssertionsFeedback = false;
			this.showFieldDecorationFeedback = true;
		}
	}
	var _g = 0;
	while(_g < classArray.length) {
		var className = classArray[_g];
		++_g;
		if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISVARIABLES) this.variablesDefinition = true; else if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISVALIDATION) this.gradingCriteria = true; else if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISPREVIEW) this.testQuestion = true; else if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISAUXILIARYCAS || className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISAUXILIARCAS) this.optAuxiliaryCas = true; else if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISAUXILIARYTEXTINPUT || className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISAUXILIARTEXTINPUT) this.optAuxiliaryTextInput = true; else if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISAUXILIARYCASREPLACEEDITOR || className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISAUXILIARCASREPLACEEDITOR) this.optAuxiliaryCasReplaceEditor = true; else if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISTEACHERANSWER) this.optOpenAnswer = true; else if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISGRADINGFUNCTION) this.optGradingFunction = true; else if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISASSERTIONSFEEDBACK) this.showAssertionsFeedback = true; else if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISCORRECTFEEDBACK) this.showCorrectAnswerFeedback = true; else if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISANSWERFIELDINLINEEDITOR) this.optAnswerFieldInlineEditor = true; else if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISANSWERFIELDPOPUPEDITOR) this.optAnswerFieldPopupEditor = true; else if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISANSWERFIELDPLAINTEXT) this.optAnswerFieldPlainText = true; else if(className == com.wiris.quizzes.impl.HtmlUiConfig.WIRISGRAPHICSYNTAX) this.optGraphicSyntax = true;
	}
};
com.wiris.quizzes.impl.HtmlUiConfig.__name__ = ["com","wiris","quizzes","impl","HtmlUiConfig"];
com.wiris.quizzes.impl.HtmlUiConfig.prototype = {
	essayConfig: function() {
		this.multichoiceConfig();
		this.optAuxiliaryCasReplaceEditor = true;
	}
	,multichoiceConfig: function() {
		this.gradingCriteria = false;
		this.variablesDefinition = true;
		this.testQuestion = false;
		this.optOpenAnswer = false;
		this.optAuxiliaryCas = false;
		this.optAuxiliaryTextInput = false;
		this.optAuxiliaryCasReplaceEditor = false;
		this.optGradingFunction = false;
		this.optGraphicSyntax = false;
		this.optAnswerFieldInlineEditor = false;
		this.optAnswerFieldInlineHand = false;
		this.optAnswerFieldPlainText = false;
		this.optAnswerFieldPopupEditor = false;
		this.optCompoundAnswer = false;
		this.showCorrectAnswerFeedback = false;
		this.showAssertionsFeedback = false;
		this.showFieldDecorationFeedback = false;
	}
	,openAnswerConfig: function() {
		this.gradingCriteria = true;
		this.variablesDefinition = false;
		this.testQuestion = true;
		this.optOpenAnswer = true;
		this.optAuxiliaryCas = false;
		this.optAuxiliaryTextInput = false;
		this.optAuxiliaryCasReplaceEditor = false;
		this.optGradingFunction = false;
		this.optGraphicSyntax = false;
		this.optAnswerFieldInlineEditor = true;
		this.optAnswerFieldInlineHand = false;
		this.optAnswerFieldPlainText = true;
		this.optAnswerFieldPopupEditor = true;
		this.optCompoundAnswer = true;
		this.showCorrectAnswerFeedback = false;
		this.showAssertionsFeedback = true;
		this.showFieldDecorationFeedback = true;
	}
	,showFieldDecorationFeedback: null
	,showAssertionsFeedback: null
	,showCorrectAnswerFeedback: null
	,optAnswerFieldInlineHand: null
	,optAnswerFieldPlainText: null
	,optAnswerFieldPopupEditor: null
	,optAnswerFieldInlineEditor: null
	,optCompoundAnswer: null
	,optGraphicSyntax: null
	,optAuxiliaryTextInput: null
	,optGradingFunction: null
	,optAuxiliaryCasReplaceEditor: null
	,optAuxiliaryCas: null
	,optOpenAnswer: null
	,testQuestion: null
	,variablesDefinition: null
	,gradingCriteria: null
	,__class__: com.wiris.quizzes.impl.HtmlUiConfig
}
haxe.Http = $hxClasses["haxe.Http"] = function(url) {
	this.url = url;
	this.headers = new Hash();
	this.params = new Hash();
	this.async = true;
};
haxe.Http.__name__ = ["haxe","Http"];
haxe.Http.requestUrl = function(url) {
	var h = new haxe.Http(url);
	h.async = false;
	var r = null;
	h.onData = function(d) {
		r = d;
	};
	h.onError = function(e) {
		throw e;
	};
	h.request(false);
	return r;
}
haxe.Http.prototype = {
	onStatus: function(status) {
	}
	,onError: function(msg) {
	}
	,onData: function(data) {
	}
	,request: function(post) {
		var me = this;
		var r = new js.XMLHttpRequest();
		var onreadystatechange = function() {
			if(r.readyState != 4) return;
			var s = (function($this) {
				var $r;
				try {
					$r = r.status;
				} catch( e ) {
					$r = null;
				}
				return $r;
			}(this));
			if(s == undefined) s = null;
			if(s != null) me.onStatus(s);
			if(s != null && s >= 200 && s < 400) me.onData(r.responseText); else switch(s) {
			case null: case undefined:
				me.onError("Failed to connect or resolve host");
				break;
			case 12029:
				me.onError("Failed to connect to host");
				break;
			case 12007:
				me.onError("Unknown host");
				break;
			default:
				me.onError("Http Error #" + r.status);
			}
		};
		if(this.async) r.onreadystatechange = onreadystatechange;
		var uri = this.postData;
		if(uri != null) post = true; else {
			var $it0 = this.params.keys();
			while( $it0.hasNext() ) {
				var p = $it0.next();
				if(uri == null) uri = ""; else uri += "&";
				uri += StringTools.urlEncode(p) + "=" + StringTools.urlEncode(this.params.get(p));
			}
		}
		try {
			if(post) r.open("POST",this.url,this.async); else if(uri != null) {
				var question = this.url.split("?").length <= 1;
				r.open("GET",this.url + (question?"?":"&") + uri,this.async);
				uri = null;
			} else r.open("GET",this.url,this.async);
		} catch( e ) {
			this.onError(e.toString());
			return;
		}
		if(this.headers.get("Content-Type") == null && post && this.postData == null) r.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		var $it1 = this.headers.keys();
		while( $it1.hasNext() ) {
			var h = $it1.next();
			r.setRequestHeader(h,this.headers.get(h));
		}
		r.send(uri);
		if(!this.async) onreadystatechange();
	}
	,setPostData: function(data) {
		this.postData = data;
	}
	,setParameter: function(param,value) {
		this.params.set(param,value);
	}
	,setHeader: function(header,value) {
		this.headers.set(header,value);
	}
	,params: null
	,headers: null
	,postData: null
	,async: null
	,url: null
	,__class__: haxe.Http
}
com.wiris.quizzes.impl.HttpImpl = $hxClasses["com.wiris.quizzes.impl.HttpImpl"] = function(url,listener) {
	haxe.Http.call(this,url);
	this.listener = listener;
	this.async = false;
};
com.wiris.quizzes.impl.HttpImpl.__name__ = ["com","wiris","quizzes","impl","HttpImpl"];
com.wiris.quizzes.impl.HttpImpl.__super__ = haxe.Http;
com.wiris.quizzes.impl.HttpImpl.prototype = $extend(haxe.Http.prototype,{
	setAsync: function(async) {
		this.async = async;
	}
	,onError: function(msg) {
		this.listener.onError(msg);
	}
	,onData: function(data) {
		this.listener.onData(data);
	}
	,listener: null
	,__class__: com.wiris.quizzes.impl.HttpImpl
});
com.wiris.quizzes.impl.HttpListener = $hxClasses["com.wiris.quizzes.impl.HttpListener"] = function() { }
com.wiris.quizzes.impl.HttpListener.__name__ = ["com","wiris","quizzes","impl","HttpListener"];
com.wiris.quizzes.impl.HttpListener.prototype = {
	onError: null
	,onData: null
	,__class__: com.wiris.quizzes.impl.HttpListener
}
com.wiris.quizzes.impl.HttpSyncListener = $hxClasses["com.wiris.quizzes.impl.HttpSyncListener"] = function() {
};
com.wiris.quizzes.impl.HttpSyncListener.__name__ = ["com","wiris","quizzes","impl","HttpSyncListener"];
com.wiris.quizzes.impl.HttpSyncListener.__interfaces__ = [com.wiris.quizzes.impl.HttpListener];
com.wiris.quizzes.impl.HttpSyncListener.prototype = {
	getData: function() {
		return this.data;
	}
	,onError: function(error) {
		throw error;
	}
	,onData: function(data) {
		this.data = data;
	}
	,data: null
	,__class__: com.wiris.quizzes.impl.HttpSyncListener
}
com.wiris.quizzes.impl.HttpToQuizzesListener = $hxClasses["com.wiris.quizzes.impl.HttpToQuizzesListener"] = function(listener,mqr,service,async) {
	this.protocol = com.wiris.quizzes.impl.QuizzesServiceImpl.PROTOCOL_REST;
	this.listener = listener;
	this.service = service;
	this.mqr = mqr;
	this.async = async;
};
com.wiris.quizzes.impl.HttpToQuizzesListener.__name__ = ["com","wiris","quizzes","impl","HttpToQuizzesListener"];
com.wiris.quizzes.impl.HttpToQuizzesListener.__interfaces__ = [com.wiris.quizzes.impl.HttpListener];
com.wiris.quizzes.impl.HttpToQuizzesListener.prototype = {
	isCacheMiss: function(response) {
		return this.isFault(response) && StringTools.startsWith(this.getFaultMessage(response),"CACHEMISS");
	}
	,getFaultMessage: function(response) {
		if(this.protocol == com.wiris.quizzes.impl.QuizzesServiceImpl.PROTOCOL_REST) {
			var start = response.indexOf("<fault>") + 7;
			var end = response.indexOf("</fault>");
			var msg = HxOverrides.substr(response,start,end - start);
			return com.wiris.util.xml.WXmlUtils.htmlUnescape(msg);
		}
		return response;
	}
	,isFault: function(response) {
		if(this.protocol == com.wiris.quizzes.impl.QuizzesServiceImpl.PROTOCOL_REST) return response.indexOf("<fault>") != -1;
		return false;
	}
	,stripWebServiceEnvelope: function(data) {
		if(this.protocol == com.wiris.quizzes.impl.QuizzesServiceImpl.PROTOCOL_REST) {
			var startTagName = "doProcessQuestionsResponse";
			var start = data.indexOf("<" + startTagName + ">") + startTagName.length + 2;
			var end = data.indexOf("</" + startTagName + ">");
			data = HxOverrides.substr(data,start,end - start);
		}
		return data;
	}
	,onError: function(msg) {
		throw msg;
	}
	,onData: function(response) {
		if(this.isCacheMiss(response)) {
			this.service.callService(this.mqr,false,this.listener,this.async);
			return;
		}
		if(this.isFault(response)) throw "Remote exception: " + this.getFaultMessage(response);
		response = this.stripWebServiceEnvelope(response);
		var res = com.wiris.quizzes.impl.QuizzesImpl.getInstance().newMultipleResponseFromXml(response);
		var k;
		var _g1 = 0, _g = res.questionResponses.length;
		while(_g1 < _g) {
			var k1 = _g1++;
			var results = res.questionResponses[k1].results;
			if(results != null && results.length > 0) {
				var last = results[results.length - 1];
				if(js.Boot.__instanceof(last,com.wiris.quizzes.impl.ResultStoreQuestion)) {
					var rsq = last;
					this.mqr.questionRequests[k1].question.setId(rsq.id);
					results.pop();
				}
			}
		}
		this.listener.onResponse(res);
	}
	,async: null
	,protocol: null
	,mqr: null
	,service: null
	,listener: null
	,__class__: com.wiris.quizzes.impl.HttpToQuizzesListener
}
com.wiris.quizzes.impl.InitialContent = $hxClasses["com.wiris.quizzes.impl.InitialContent"] = function() {
	com.wiris.quizzes.impl.MathContent.call(this);
};
com.wiris.quizzes.impl.InitialContent.__name__ = ["com","wiris","quizzes","impl","InitialContent"];
com.wiris.quizzes.impl.InitialContent.__super__ = com.wiris.quizzes.impl.MathContent;
com.wiris.quizzes.impl.InitialContent.prototype = $extend(com.wiris.quizzes.impl.MathContent.prototype,{
	onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.InitialContent.TAGNAME);
		this.onSerializeInner(s);
		s.endTag();
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.InitialContent();
	}
	,__class__: com.wiris.quizzes.impl.InitialContent
});
com.wiris.quizzes.impl.LocalData = $hxClasses["com.wiris.quizzes.impl.LocalData"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
};
com.wiris.quizzes.impl.LocalData.__name__ = ["com","wiris","quizzes","impl","LocalData"];
com.wiris.quizzes.impl.LocalData.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.LocalData.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	replaceDeprecatedNames: function(name) {
		if(name != null && name == "auxiliarTextInput") return com.wiris.quizzes.api.QuizzesConstants.PROPERTY_SHOW_AUXILIARY_TEXT_INPUT;
		return name;
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.LocalData();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.LocalData.TAGNAME);
		this.name = this.replaceDeprecatedNames(s.attributeString("name",this.name,null));
		this.value = s.textContent(this.value);
		s.endTag();
	}
	,value: null
	,name: null
	,__class__: com.wiris.quizzes.impl.LocalData
});
com.wiris.quizzes.impl.MathMLFilter = $hxClasses["com.wiris.quizzes.impl.MathMLFilter"] = function() {
	if(com.wiris.settings.PlatformSettings.IS_FLASH || com.wiris.settings.PlatformSettings.IS_JAVASCRIPT) throw "MathFilter is only available in server technologies.";
};
com.wiris.quizzes.impl.MathMLFilter.__name__ = ["com","wiris","quizzes","impl","MathMLFilter"];
com.wiris.quizzes.impl.MathMLFilter.__interfaces__ = [com.wiris.quizzes.api.MathFilter];
com.wiris.quizzes.impl.MathMLFilter.prototype = {
	removeWirisPluginImages: function(html) {
		var start = 0;
		var end = 0;
		var sb = new StringBuf();
		while((start = html.indexOf("<img",end)) != -1) {
			sb.b += Std.string(HxOverrides.substr(html,end,start - end));
			end = html.indexOf("/>",start) + 2;
			var img = HxOverrides.substr(html,start,end - start);
			if(img.indexOf("class=\"Wirisformula\"") != -1) {
				var pos = img.indexOf("data-mathml");
				pos = img.indexOf("\"",pos) + 1;
				var endpos = img.indexOf("\"",pos);
				img = HxOverrides.substr(img,pos,endpos - pos);
			}
			sb.b += Std.string(img);
		}
		sb.b += Std.string(HxOverrides.substr(html,end,null));
		return sb.b;
	}
	,cacheImage: function(mathml,filename) {
		var listener = new com.wiris.quizzes.impl.HttpSyncListener();
		var h = new com.wiris.quizzes.impl.HttpImpl(com.wiris.quizzes.impl.QuizzesImpl.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.EDITOR_URL) + "/render",listener);
		h.setParameter("mml",mathml);
		h.request(true);
		var response = listener.getData();
		var b = haxe.io.Bytes.ofString(response);
		com.wiris.quizzes.impl.QuizzesImpl.getInstance().getImagesCache().set(filename,b);
	}
	,mathml2img: function(mathml) {
		var md5 = haxe.Md5.encode(mathml);
		var filename = md5 + ".png";
		this.cacheImage(mathml,filename);
		var url = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL) + "?service=cache&amp;name=" + filename;
		return "<img src=\"" + url + "\" align=\"middle\" />";
	}
	,filter: function(html) {
		var h = new com.wiris.quizzes.impl.HTMLTools();
		html = this.removeWirisPluginImages(html);
		if(h.isMathMLEncoded(html)) html = h.decodeMathML(html);
		var sb = new StringBuf();
		var start = 0;
		var end = 0;
		while((start = html.indexOf("<math",end)) > -1) {
			sb.b += Std.string(HxOverrides.substr(html,end,start - end));
			end = html.indexOf("</math>",start);
			if(end == -1) end = html.indexOf("/>",start) + "/>".length; else end += "</math>".length;
			var mathml = HxOverrides.substr(html,start,end - start);
			var img = this.mathml2img(mathml);
			sb.b += Std.string(img);
		}
		sb.b += Std.string(HxOverrides.substr(html,end,null));
		return sb.b;
	}
	,__class__: com.wiris.quizzes.impl.MathMLFilter
}
com.wiris.quizzes.impl.MaxConnectionsHttpImpl = $hxClasses["com.wiris.quizzes.impl.MaxConnectionsHttpImpl"] = function(url,listener) {
	com.wiris.quizzes.impl.HttpImpl.call(this,url,listener);
	try {
		this.max_connections = Std.parseInt(com.wiris.quizzes.impl.QuizzesImpl.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.MAXCONNECTIONS));
	} catch( t ) {
		this.max_connections = 10;
	}
};
com.wiris.quizzes.impl.MaxConnectionsHttpImpl.__name__ = ["com","wiris","quizzes","impl","MaxConnectionsHttpImpl"];
com.wiris.quizzes.impl.MaxConnectionsHttpImpl.__super__ = com.wiris.quizzes.impl.HttpImpl;
com.wiris.quizzes.impl.MaxConnectionsHttpImpl.prototype = $extend(com.wiris.quizzes.impl.HttpImpl.prototype,{
	getConnectionSlot: function() {
		var p = new com.wiris.quizzes.impl.SharedVariables();
		p.lockVariable(com.wiris.quizzes.impl.MaxConnectionsHttpImpl.DATA_KEY_MAX_CONNECTIONS);
		var data = p.getVariable(com.wiris.quizzes.impl.MaxConnectionsHttpImpl.DATA_KEY_MAX_CONNECTIONS);
		var connections = null;
		if(data != null) try {
			connections = haxe.Unserializer.run(data);
		} catch( t ) {
			connections = null;
		}
		if(connections == null) connections = new Array();
		while(connections.length > this.max_connections) HxOverrides.remove(connections,connections[connections.length - 1]);
		var n = Math.floor(haxe.Timer.stamp());
		this.current = n;
		this.slot = -1;
		var i;
		var _g1 = 0, _g = connections.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			var con = connections[i1];
			if(this.current - con > com.wiris.quizzes.impl.MaxConnectionsHttpImpl.CONNECTION_TIMEOUT || con > this.current + 1) {
				this.slot = i1;
				connections[i1] = this.current;
				break;
			}
		}
		if(this.slot == -1 && connections.length < this.max_connections) {
			this.slot = connections.length;
			connections.push(this.current);
		}
		if(this.slot != -1) {
			data = haxe.Serializer.run(connections);
			p.setVariable(com.wiris.quizzes.impl.MaxConnectionsHttpImpl.DATA_KEY_MAX_CONNECTIONS,data);
		}
		p.unlockVariable(com.wiris.quizzes.impl.MaxConnectionsHttpImpl.DATA_KEY_MAX_CONNECTIONS);
		return this.slot != -1;
	}
	,releaseConnectionSlot: function() {
		var p = new com.wiris.quizzes.impl.SharedVariables();
		p.lockVariable(com.wiris.quizzes.impl.MaxConnectionsHttpImpl.DATA_KEY_MAX_CONNECTIONS);
		var data = p.getVariable(com.wiris.quizzes.impl.MaxConnectionsHttpImpl.DATA_KEY_MAX_CONNECTIONS);
		var connections = haxe.Unserializer.run(data);
		if(connections[this.slot] == this.current) {
			var n = 0;
			connections[this.slot] = n;
			data = haxe.Serializer.run(connections);
			p.setVariable(com.wiris.quizzes.impl.MaxConnectionsHttpImpl.DATA_KEY_MAX_CONNECTIONS,data);
		}
		p.unlockVariable(com.wiris.quizzes.impl.MaxConnectionsHttpImpl.DATA_KEY_MAX_CONNECTIONS);
	}
	,request: function(post) {
		if(this.max_connections == -1) com.wiris.quizzes.impl.HttpImpl.prototype.request.call(this,post); else if(this.getConnectionSlot()) {
			com.wiris.quizzes.impl.HttpImpl.prototype.request.call(this,post);
			this.releaseConnectionSlot();
		} else throw "Too many concurrent connections.";
	}
	,current: null
	,slot: null
	,max_connections: null
	,__class__: com.wiris.quizzes.impl.MaxConnectionsHttpImpl
});
com.wiris.quizzes.impl.MultipleQuestionRequest = $hxClasses["com.wiris.quizzes.impl.MultipleQuestionRequest"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
};
com.wiris.quizzes.impl.MultipleQuestionRequest.__name__ = ["com","wiris","quizzes","impl","MultipleQuestionRequest"];
com.wiris.quizzes.impl.MultipleQuestionRequest.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.MultipleQuestionRequest.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.MultipleQuestionRequest();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.MultipleQuestionRequest.tagName);
		this.questionRequests = s.serializeArray(this.questionRequests,com.wiris.quizzes.impl.QuestionRequestImpl.tagName);
		s.endTag();
	}
	,questionRequests: null
	,__class__: com.wiris.quizzes.impl.MultipleQuestionRequest
});
com.wiris.quizzes.impl.MultipleQuestionResponse = $hxClasses["com.wiris.quizzes.impl.MultipleQuestionResponse"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
};
com.wiris.quizzes.impl.MultipleQuestionResponse.__name__ = ["com","wiris","quizzes","impl","MultipleQuestionResponse"];
com.wiris.quizzes.impl.MultipleQuestionResponse.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.MultipleQuestionResponse.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.MultipleQuestionResponse();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.MultipleQuestionResponse.tagName);
		this.questionResponses = s.serializeArray(this.questionResponses,com.wiris.quizzes.impl.QuestionResponseImpl.tagName);
		s.endTag();
	}
	,questionResponses: null
	,__class__: com.wiris.quizzes.impl.MultipleQuestionResponse
});
com.wiris.quizzes.impl.QuizzesServiceImpl = $hxClasses["com.wiris.quizzes.impl.QuizzesServiceImpl"] = function() {
	this.protocol = com.wiris.quizzes.impl.QuizzesServiceImpl.PROTOCOL_REST;
	this.url = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.SERVICE_URL);
	com.wiris.quizzes.impl.QuizzesServiceImpl.deploymentId = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.DEPLOYMENT_ID);
	com.wiris.quizzes.impl.QuizzesServiceImpl.licenseId = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.LICENSE_ID);
};
com.wiris.quizzes.impl.QuizzesServiceImpl.__name__ = ["com","wiris","quizzes","impl","QuizzesServiceImpl"];
com.wiris.quizzes.impl.QuizzesServiceImpl.__interfaces__ = [com.wiris.quizzes.api.QuizzesService];
com.wiris.quizzes.impl.QuizzesServiceImpl.getDeploymentId = function() {
	return com.wiris.quizzes.impl.QuizzesServiceImpl.deploymentId == null?"null":com.wiris.quizzes.impl.QuizzesServiceImpl.deploymentId;
}
com.wiris.quizzes.impl.QuizzesServiceImpl.getLicenseId = function() {
	return com.wiris.quizzes.impl.QuizzesServiceImpl.licenseId == null?"null":com.wiris.quizzes.impl.QuizzesServiceImpl.licenseId;
}
com.wiris.quizzes.impl.QuizzesServiceImpl.prototype = {
	getServiceUrl: function() {
		var url = this.url;
		if(this.protocol == com.wiris.quizzes.impl.QuizzesServiceImpl.PROTOCOL_REST) url += "/rest";
		return url;
	}
	,webServiceEnvelope: function(data) {
		if(this.protocol == com.wiris.quizzes.impl.QuizzesServiceImpl.PROTOCOL_REST) data = "<doProcessQuestions>" + data + "</doProcessQuestions>";
		return data;
	}
	,callService: function(mqr,cache,listener,async) {
		var aqr = mqr.questionRequests;
		var s = new com.wiris.util.xml.XmlSerializer();
		s.setCached(cache);
		var _g = 0;
		while(_g < aqr.length) {
			var qr = aqr[_g];
			++_g;
			if(!cache && com.wiris.quizzes.impl.QuizzesServiceImpl.USE_CACHE) qr.addProcess(new com.wiris.quizzes.impl.ProcessStoreQuestion());
		}
		var postData = this.webServiceEnvelope(s.write(mqr));
		var httpl = new com.wiris.quizzes.impl.HttpToQuizzesListener(listener,mqr,this,async);
		var http = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getHttpObject(httpl,this.getServiceUrl(),"quizzes",postData);
		http.setAsync(async);
		http.request(true);
	}
	,executeMultipleImpl: function(mqr,listener,async) {
		var cache = com.wiris.quizzes.impl.QuizzesServiceImpl.USE_CACHE;
		var i = 0;
		while(cache && i < mqr.questionRequests.length) {
			var q = mqr.questionRequests[i].question;
			cache = cache && q.hasId();
			i++;
		}
		this.callService(mqr,cache,listener,async);
	}
	,executeMultiple: function(mqr) {
		var listener = new com.wiris.quizzes.impl.QuizzesServiceSyncListener();
		this.executeMultipleImpl(mqr,listener,false);
		return listener.mqs;
	}
	,executeMultipleAsync: function(req,listener) {
		this.executeMultipleImpl(req,listener,true);
	}
	,singleResponse: function(mqs) {
		if(mqs.questionResponses.length == 0) return new com.wiris.quizzes.impl.QuestionResponseImpl(); else return mqs.questionResponses[0];
	}
	,multipleRequest: function(req) {
		var reqi = req;
		var mqr = new com.wiris.quizzes.impl.MultipleQuestionRequest();
		mqr.questionRequests = new Array();
		mqr.questionRequests.push(reqi);
		return mqr;
	}
	,executeAsync: function(req,listener) {
		var mqr = this.multipleRequest(req);
		this.executeMultipleAsync(mqr,new com.wiris.quizzes.impl.QuizzesServiceSingleListener(listener));
	}
	,execute: function(req) {
		var mqr = this.multipleRequest(req);
		var mqs = this.executeMultiple(mqr);
		return this.singleResponse(mqs);
	}
	,protocol: null
	,url: null
	,__class__: com.wiris.quizzes.impl.QuizzesServiceImpl
}
com.wiris.quizzes.impl.OfflineQuizzesServiceImpl = $hxClasses["com.wiris.quizzes.impl.OfflineQuizzesServiceImpl"] = function() {
	com.wiris.quizzes.impl.QuizzesServiceImpl.call(this);
};
com.wiris.quizzes.impl.OfflineQuizzesServiceImpl.__name__ = ["com","wiris","quizzes","impl","OfflineQuizzesServiceImpl"];
com.wiris.quizzes.impl.OfflineQuizzesServiceImpl.__super__ = com.wiris.quizzes.impl.QuizzesServiceImpl;
com.wiris.quizzes.impl.OfflineQuizzesServiceImpl.prototype = $extend(com.wiris.quizzes.impl.QuizzesServiceImpl.prototype,{
	isTrialLimitExceeded: function(data) {
		return this.isFaultMessage(data) && StringTools.startsWith(this.getFaultMessage(data),"TRIALVERSIONLIMITEXCEEDED");
	}
	,getFaultMessage: function(data) {
		var start = data.indexOf("<fault>") + "<fault>".length;
		var end = data.indexOf("</fault>");
		var msg = HxOverrides.substr(data,start,end - start);
		return com.wiris.util.xml.WXmlUtils.htmlUnescape(msg);
	}
	,isFaultMessage: function(data) {
		return data.indexOf("<fault>") != -1;
	}
	,stripDoProcessQuestion: function(data) {
		var startTagName = "doProcessQuestionsResponse";
		var start = data.indexOf("<" + startTagName + ">") + startTagName.length + 2;
		var end = data.indexOf("</" + startTagName + ">");
		data = HxOverrides.substr(data,start,end - start);
		return data;
	}
	,callOfflineService: function(postData) {
		return androidQuizzesPublicServices.doProcessQuestions(postData);
	}
	,callService: function(mqr,cache,listener,async) {
		var s = new com.wiris.util.xml.XmlSerializer();
		s.setCached(cache);
		var postData = s.write(mqr);
		var response = this.callOfflineService(postData);
		if(this.isTrialLimitExceeded(response)) throw "The number of allowed executions of this trial version is over. If you want a license for unlimited use of Wiris Quizzes, please find us at www.wiris.com.";
		if(this.isFaultMessage(response)) throw "Wiris Quizzes service error: " + this.getFaultMessage(response);
		response = this.stripDoProcessQuestion(response);
		var res = com.wiris.quizzes.impl.QuizzesImpl.getInstance().newMultipleResponseFromXml(response);
		listener.onResponse(res);
	}
	,__class__: com.wiris.quizzes.impl.OfflineQuizzesServiceImpl
});
com.wiris.quizzes.impl.Option = $hxClasses["com.wiris.quizzes.impl.Option"] = function() {
	com.wiris.quizzes.impl.MathContent.call(this);
};
com.wiris.quizzes.impl.Option.__name__ = ["com","wiris","quizzes","impl","Option"];
com.wiris.quizzes.impl.Option.__super__ = com.wiris.quizzes.impl.MathContent;
com.wiris.quizzes.impl.Option.prototype = $extend(com.wiris.quizzes.impl.MathContent.prototype,{
	onSerialize: function(s) {
		s.beginTag("option");
		this.name = s.attributeString("name",this.name,null);
		com.wiris.quizzes.impl.MathContent.prototype.onSerializeInner.call(this,s);
		s.endTag();
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.Option();
	}
	,name: null
	,__class__: com.wiris.quizzes.impl.Option
});
com.wiris.quizzes.impl.Parameter = $hxClasses["com.wiris.quizzes.impl.Parameter"] = function() {
	com.wiris.quizzes.impl.MathContent.call(this);
};
com.wiris.quizzes.impl.Parameter.__name__ = ["com","wiris","quizzes","impl","Parameter"];
com.wiris.quizzes.impl.Parameter.__super__ = com.wiris.quizzes.impl.MathContent;
com.wiris.quizzes.impl.Parameter.prototype = $extend(com.wiris.quizzes.impl.MathContent.prototype,{
	onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.Parameter.tagName);
		this.name = s.attributeString("name",this.name,null);
		com.wiris.quizzes.impl.MathContent.prototype.onSerializeInner.call(this,s);
		s.endTag();
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.Parameter();
	}
	,name: null
	,__class__: com.wiris.quizzes.impl.Parameter
});
com.wiris.quizzes.impl.Process = $hxClasses["com.wiris.quizzes.impl.Process"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
};
com.wiris.quizzes.impl.Process.__name__ = ["com","wiris","quizzes","impl","Process"];
com.wiris.quizzes.impl.Process.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.Process.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.Process();
	}
	,onSerialize: function(s) {
	}
	,__class__: com.wiris.quizzes.impl.Process
});
com.wiris.quizzes.impl.ProcessGetCheckAssertions = $hxClasses["com.wiris.quizzes.impl.ProcessGetCheckAssertions"] = function() {
	com.wiris.quizzes.impl.Process.call(this);
};
com.wiris.quizzes.impl.ProcessGetCheckAssertions.__name__ = ["com","wiris","quizzes","impl","ProcessGetCheckAssertions"];
com.wiris.quizzes.impl.ProcessGetCheckAssertions.__super__ = com.wiris.quizzes.impl.Process;
com.wiris.quizzes.impl.ProcessGetCheckAssertions.prototype = $extend(com.wiris.quizzes.impl.Process.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.ProcessGetCheckAssertions();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.ProcessGetCheckAssertions.tagName);
		s.endTag();
	}
	,__class__: com.wiris.quizzes.impl.ProcessGetCheckAssertions
});
com.wiris.quizzes.impl.ProcessGetFeaturedAssertions = $hxClasses["com.wiris.quizzes.impl.ProcessGetFeaturedAssertions"] = function() {
	com.wiris.quizzes.impl.Process.call(this);
};
com.wiris.quizzes.impl.ProcessGetFeaturedAssertions.__name__ = ["com","wiris","quizzes","impl","ProcessGetFeaturedAssertions"];
com.wiris.quizzes.impl.ProcessGetFeaturedAssertions.__super__ = com.wiris.quizzes.impl.Process;
com.wiris.quizzes.impl.ProcessGetFeaturedAssertions.prototype = $extend(com.wiris.quizzes.impl.Process.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.ProcessGetFeaturedAssertions();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.ProcessGetFeaturedAssertions.TAGNAME);
		s.endTag();
	}
	,__class__: com.wiris.quizzes.impl.ProcessGetFeaturedAssertions
});
com.wiris.quizzes.impl.ProcessGetFeaturedSyntaxAssertions = $hxClasses["com.wiris.quizzes.impl.ProcessGetFeaturedSyntaxAssertions"] = function() {
	com.wiris.quizzes.impl.Process.call(this);
};
com.wiris.quizzes.impl.ProcessGetFeaturedSyntaxAssertions.__name__ = ["com","wiris","quizzes","impl","ProcessGetFeaturedSyntaxAssertions"];
com.wiris.quizzes.impl.ProcessGetFeaturedSyntaxAssertions.__super__ = com.wiris.quizzes.impl.Process;
com.wiris.quizzes.impl.ProcessGetFeaturedSyntaxAssertions.prototype = $extend(com.wiris.quizzes.impl.Process.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.ProcessGetFeaturedSyntaxAssertions();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.ProcessGetFeaturedSyntaxAssertions.TAGNAME);
		s.endTag();
	}
	,__class__: com.wiris.quizzes.impl.ProcessGetFeaturedSyntaxAssertions
});
com.wiris.quizzes.impl.ProcessGetTranslation = $hxClasses["com.wiris.quizzes.impl.ProcessGetTranslation"] = function() {
	com.wiris.quizzes.impl.Process.call(this);
};
com.wiris.quizzes.impl.ProcessGetTranslation.__name__ = ["com","wiris","quizzes","impl","ProcessGetTranslation"];
com.wiris.quizzes.impl.ProcessGetTranslation.__super__ = com.wiris.quizzes.impl.Process;
com.wiris.quizzes.impl.ProcessGetTranslation.prototype = $extend(com.wiris.quizzes.impl.Process.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.ProcessGetTranslation();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.ProcessGetTranslation.tagName);
		this.lang = s.attributeString("lang",this.lang,null);
		s.endTag();
	}
	,lang: null
	,__class__: com.wiris.quizzes.impl.ProcessGetTranslation
});
com.wiris.quizzes.impl.ProcessGetVariables = $hxClasses["com.wiris.quizzes.impl.ProcessGetVariables"] = function() {
	com.wiris.quizzes.impl.Process.call(this);
};
com.wiris.quizzes.impl.ProcessGetVariables.__name__ = ["com","wiris","quizzes","impl","ProcessGetVariables"];
com.wiris.quizzes.impl.ProcessGetVariables.__super__ = com.wiris.quizzes.impl.Process;
com.wiris.quizzes.impl.ProcessGetVariables.prototype = $extend(com.wiris.quizzes.impl.Process.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.ProcessGetVariables();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.ProcessGetVariables.TAGNAME);
		this.names = s.attributeString("names",this.names,null);
		this.type = s.attributeString("type",this.type,"mathml");
		s.endTag();
	}
	,type: null
	,names: null
	,__class__: com.wiris.quizzes.impl.ProcessGetVariables
});
com.wiris.quizzes.impl.ProcessStoreQuestion = $hxClasses["com.wiris.quizzes.impl.ProcessStoreQuestion"] = function() {
	com.wiris.quizzes.impl.Process.call(this);
};
com.wiris.quizzes.impl.ProcessStoreQuestion.__name__ = ["com","wiris","quizzes","impl","ProcessStoreQuestion"];
com.wiris.quizzes.impl.ProcessStoreQuestion.__super__ = com.wiris.quizzes.impl.Process;
com.wiris.quizzes.impl.ProcessStoreQuestion.prototype = $extend(com.wiris.quizzes.impl.Process.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.ProcessStoreQuestion();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.ProcessStoreQuestion.TAGNAME);
		s.endTag();
	}
	,__class__: com.wiris.quizzes.impl.ProcessStoreQuestion
});
com.wiris.quizzes.impl.Property = $hxClasses["com.wiris.quizzes.impl.Property"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
};
com.wiris.quizzes.impl.Property.__name__ = ["com","wiris","quizzes","impl","Property"];
com.wiris.quizzes.impl.Property.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.Property.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.Property();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.Property.tagName);
		this.name = s.attributeString("name",this.name,null);
		this.value = s.textContent(this.value);
		s.endTag();
	}
	,value: null
	,name: null
	,__class__: com.wiris.quizzes.impl.Property
});
com.wiris.quizzes.impl.QuestionInternal = $hxClasses["com.wiris.quizzes.impl.QuestionInternal"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
};
com.wiris.quizzes.impl.QuestionInternal.__name__ = ["com","wiris","quizzes","impl","QuestionInternal"];
com.wiris.quizzes.impl.QuestionInternal.__interfaces__ = [com.wiris.quizzes.api.Question];
com.wiris.quizzes.impl.QuestionInternal.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.QuestionInternal.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	getDeprecationWarnings: function() {
		return null;
	}
	,getProperty: function(name) {
		return null;
	}
	,setProperty: function(name,value) {
	}
	,getAlgorithm: function() {
		return null;
	}
	,setAlgorithm: function(session) {
	}
	,getCorrectAnswersLength: function() {
		return 0;
	}
	,getCorrectAnswer: function(index) {
		return null;
	}
	,setCorrectAnswer: function(index,answer) {
	}
	,getAnswerFieldType: function() {
		return com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR;
	}
	,setAnswerFieldType: function(type) {
	}
	,removeSlot: function(slot) {
	}
	,addNewSlotFromModel: function(slot) {
		return null;
	}
	,addNewSlot: function() {
		return null;
	}
	,getSlots: function() {
		return null;
	}
	,setOption: function(name,value) {
	}
	,addAssertion: function(name,correctAnswer,studentAnswer,parameters) {
	}
	,getStudentQuestion: function() {
		return null;
	}
	,hasId: function() {
		return false;
	}
	,setId: function(id) {
	}
	,getImpl: function() {
		return null;
	}
	,__class__: com.wiris.quizzes.impl.QuestionInternal
});
com.wiris.quizzes.impl.QuestionImpl = $hxClasses["com.wiris.quizzes.impl.QuestionImpl"] = function() {
	com.wiris.quizzes.impl.QuestionInternal.call(this);
	this.deprecationWarnings = new Array();
	if(com.wiris.quizzes.impl.QuestionImpl.defaultOptions == null) com.wiris.quizzes.impl.QuestionImpl.defaultOptions = com.wiris.quizzes.impl.QuestionImpl.getDefaultOptions();
};
com.wiris.quizzes.impl.QuestionImpl.__name__ = ["com","wiris","quizzes","impl","QuestionImpl"];
com.wiris.quizzes.impl.QuestionImpl.removeLocalDataFromArray = function(name,localData) {
	if(localData != null) {
		var i = localData.length - 1;
		while(i >= 0) {
			if(localData[i].name == name) HxOverrides.remove(localData,localData[i]);
			i--;
		}
	}
}
com.wiris.quizzes.impl.QuestionImpl.getDefaultOptions = function() {
	var dopt = new Hash();
	dopt.set(com.wiris.quizzes.api.QuizzesConstants.OPTION_EXPONENTIAL_E,"e");
	dopt.set(com.wiris.quizzes.api.QuizzesConstants.OPTION_IMAGINARY_UNIT,"i");
	dopt.set(com.wiris.quizzes.api.QuizzesConstants.OPTION_IMPLICIT_TIMES_OPERATOR,"false");
	dopt.set(com.wiris.quizzes.api.QuizzesConstants.OPTION_NUMBER_PI,com.wiris.system.Utf8.uchr(960));
	dopt.set(com.wiris.quizzes.api.QuizzesConstants.OPTION_PRECISION,"4");
	dopt.set(com.wiris.quizzes.api.QuizzesConstants.OPTION_RELATIVE_TOLERANCE,"true");
	dopt.set(com.wiris.quizzes.api.QuizzesConstants.OPTION_TIMES_OPERATOR,com.wiris.system.Utf8.uchr(183));
	dopt.set(com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE,"0.001");
	dopt.set(com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE_DIGITS,"false");
	dopt.set(com.wiris.quizzes.api.QuizzesConstants.OPTION_FLOAT_FORMAT,"mg");
	dopt.set(com.wiris.quizzes.api.QuizzesConstants.OPTION_DECIMAL_SEPARATOR,".");
	dopt.set(com.wiris.quizzes.api.QuizzesConstants.OPTION_DIGIT_GROUP_SEPARATOR,"");
	dopt.set(com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER,"false");
	dopt.set(com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER_NAME,"answer");
	return dopt;
}
com.wiris.quizzes.impl.QuestionImpl.setLocalDataToArray = function(name,value,ld) {
	var data = new com.wiris.quizzes.impl.LocalData();
	data.name = name;
	data.value = value;
	var i;
	var found = false;
	var _g1 = 0, _g = ld.length;
	while(_g1 < _g) {
		var i1 = _g1++;
		if(ld[i1].name == name) {
			ld[i1] = data;
			found = true;
		}
	}
	if(!found) ld.push(data);
}
com.wiris.quizzes.impl.QuestionImpl.getLocalDataFromArray = function(name,ld) {
	if(ld != null) {
		var i;
		var _g1 = 0, _g = ld.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(ld[i1].name == name) return ld[i1].value;
		}
	}
	return null;
}
com.wiris.quizzes.impl.QuestionImpl.__super__ = com.wiris.quizzes.impl.QuestionInternal;
com.wiris.quizzes.impl.QuestionImpl.prototype = $extend(com.wiris.quizzes.impl.QuestionInternal.prototype,{
	getDeprecationWarnings: function() {
		return this.deprecationWarnings;
	}
	,clearDeprecationWarnings: function() {
		this.deprecationWarnings = new Array();
	}
	,removeCorrectAnswer: function(index) {
		var _g = 0, _g1 = this.slots;
		while(_g < _g1.length) {
			var s = _g1[_g];
			++_g;
			var aaa = s.authorAnswers;
			var _g2 = 0;
			while(_g2 < aaa.length) {
				var aa = aaa[_g2];
				++_g2;
				var aaIndex = Std.parseInt(aa.id);
				if(aaIndex == index) {
					s.removeAuthorAnswer(aa);
					return;
				}
			}
		}
	}
	,prepareForSlots: function() {
		var correctAnswersToSlots = new Hash();
		var assertionCorrectAnswerIndexes = new Array();
		var assertionAnswerIndexes = new Array();
		var _g = 0, _g1 = this.assertions;
		while(_g < _g1.length) {
			var a = _g1[_g];
			++_g;
			if(a.answer != null && a.answer.length >= 2) return false;
			var slotIndex = a.getAnswer();
			var slotIndexI = Std.parseInt(slotIndex);
			if(!com.wiris.system.ArrayEx.contains(assertionAnswerIndexes,slotIndexI)) assertionAnswerIndexes.push(slotIndexI);
			var correctAnswers = a.getCorrectAnswers();
			var _g2 = 0;
			while(_g2 < correctAnswers.length) {
				var caIndex = correctAnswers[_g2];
				++_g2;
				if(correctAnswersToSlots.exists(caIndex) && !(correctAnswersToSlots.get(caIndex) == slotIndex)) return false;
				var caIndexI = Std.parseInt(caIndex);
				if(!com.wiris.system.ArrayEx.contains(assertionCorrectAnswerIndexes,caIndexI)) assertionCorrectAnswerIndexes.push(caIndexI);
				correctAnswersToSlots.set(caIndex,slotIndex);
			}
		}
		var questionCorrectAnswerIndexes = new Array();
		if(this.correctAnswers != null) {
			var _g = 0, _g1 = this.correctAnswers;
			while(_g < _g1.length) {
				var ca = _g1[_g];
				++_g;
				var id = Std.parseInt(ca.id);
				if(!com.wiris.system.ArrayEx.contains(questionCorrectAnswerIndexes,id)) questionCorrectAnswerIndexes.push(id);
			}
		} else this.correctAnswers = new Array();
		var _g = 0;
		while(_g < questionCorrectAnswerIndexes.length) {
			var index = questionCorrectAnswerIndexes[_g];
			++_g;
			if(!com.wiris.system.ArrayEx.contains(assertionCorrectAnswerIndexes,index)) {
				var bound = false;
				var answerIndex = assertionAnswerIndexes[assertionAnswerIndexes.length - 1];
				while(answerIndex >= 0 && !bound) {
					var _g1 = 0, _g2 = this.assertions;
					while(_g1 < _g2.length) {
						var assertion = _g2[_g1];
						++_g1;
						if(assertion.isSyntactic() && assertion.hasAnswer(answerIndex + "")) {
							assertion.addCorrectAnswer(index + "");
							bound = true;
						}
					}
					answerIndex--;
				}
				if(!bound) {
					var a = com.wiris.quizzes.impl.SyntaxAssertion.getDefaultSyntax();
					a.setCorrectAnswer(index + "");
					a.setAnswer(index + "");
					this.assertions.push(a);
				}
			}
		}
		var _g = 0;
		while(_g < assertionCorrectAnswerIndexes.length) {
			var index = assertionCorrectAnswerIndexes[_g];
			++_g;
			if(!com.wiris.system.ArrayEx.contains(questionCorrectAnswerIndexes,index)) {
				var ca = new com.wiris.quizzes.impl.CorrectAnswer();
				ca.id = index + "";
				ca.set("");
				this.correctAnswers.splice(index,0,ca);
			}
		}
		return true;
	}
	,ensureSlotsAndAuthorAnswersHaveReferences: function() {
		if(this.slots == null) return;
		var _g = 0, _g1 = this.slots;
		while(_g < _g1.length) {
			var s = _g1[_g];
			++_g;
			s.question = this;
			if(s.authorAnswers != null) {
				var authorAnswers = s.authorAnswers;
				var _g2 = 0;
				while(_g2 < authorAnswers.length) {
					var aa = authorAnswers[_g2];
					++_g2;
					aa.question = this;
					aa.slot = s;
				}
			}
		}
	}
	,getSlotCorrectAnswersIds: function(slot) {
		var aa = slot.authorAnswers;
		var correctAnswers = new Array();
		var _g1 = 0, _g = aa.length;
		while(_g1 < _g) {
			var i = _g1++;
			correctAnswers[i] = aa[i].id;
		}
		return correctAnswers;
	}
	,assertionIndex: function(a) {
		var _g1 = 0, _g = this.assertions.length;
		while(_g1 < _g) {
			var i = _g1++;
			if(this.assertions[i] == a) return i;
		}
		return -1;
	}
	,updateSlotsImpl: function(overrideDeprecated) {
		if(this.slots == null) this.slots = new Array();
		if(this.assertions == null || this.assertions.length == 0) {
			if(this.correctAnswers == null || this.correctAnswers.length == 0) return;
			var _g = 0, _g1 = this.correctAnswers;
			while(_g < _g1.length) {
				var ca = _g1[_g];
				++_g;
				var s = this.addNewSlot();
				var aa = com.wiris.quizzes.impl.AuthorAnswerImpl.newWithQuestionCallback(this,s);
				aa.value = ca;
				aa.id = ca.id;
				s.syntax.setCorrectAnswer(aa.id);
				s.authorAnswers.push(aa);
				this.assertionAdded(aa.comparison,aa.id,s.id);
			}
			return;
		}
		if(!this.prepareForSlots() || this.isDeprecated() == com.wiris.quizzes.impl.QuestionImpl.DEPRECATED_NEEDS_CHECK && !overrideDeprecated) {
			this.slots = null;
			return;
		}
		this.importDeprecated();
		var assertionsCopy = new Array();
		var _g = 0, _g1 = this.assertions;
		while(_g < _g1.length) {
			var a = _g1[_g];
			++_g;
			assertionsCopy.push(a);
		}
		var _g1 = 0, _g = assertionsCopy.length;
		while(_g1 < _g) {
			var i = _g1++;
			var a = assertionsCopy[i];
			var slotId = Std.parseInt(a.getAnswer());
			var correctAnswers = a.getCorrectAnswers();
			while(slotId >= this.slots.length) {
				var localData = this.slots.length > 0?this.slots[this.slots.length - 1].localData:null;
				var slot = this.addNewSlot();
				slot.syntax.setCorrectAnswers(correctAnswers);
				if(localData != null) {
					slot.localData = new Array();
					var _g2 = 0;
					while(_g2 < localData.length) {
						var datum = localData[_g2];
						++_g2;
						var newDatum = new com.wiris.quizzes.impl.LocalData();
						newDatum.name = datum.name;
						newDatum.value = datum.value;
						slot.localData.push(newDatum);
					}
				}
			}
			var slot = this.slots[slotId];
			var _g2 = 0;
			while(_g2 < correctAnswers.length) {
				var caIndex = correctAnswers[_g2];
				++_g2;
				var authorAnswers = slot.authorAnswers;
				var correctAnswer = null;
				var _g3 = 0;
				while(_g3 < authorAnswers.length) {
					var authorAnswer = authorAnswers[_g3];
					++_g3;
					if(caIndex == authorAnswer.id) {
						correctAnswer = authorAnswer;
						break;
					}
				}
				if(correctAnswer == null) {
					correctAnswer = com.wiris.quizzes.impl.AuthorAnswerImpl.newWithQuestionCallback(this,slot);
					correctAnswer.id = caIndex;
					correctAnswer.comparison.setAnswer(slotId + "");
					correctAnswer.comparison.setCorrectAnswer(caIndex);
					correctAnswer.value = this.correctAnswers[Std.parseInt(caIndex)];
					this.assertions.push(correctAnswer.comparison);
					slot.authorAnswers.push(correctAnswer);
				}
				if(js.Boot.__instanceof(a,com.wiris.quizzes.impl.ComparisonAssertion)) {
					if(correctAnswer.comparison != a) {
						this.assertionRemoved(correctAnswer.comparison);
						correctAnswer.comparison = a;
					}
				} else if(js.Boot.__instanceof(a,com.wiris.quizzes.impl.ValidationAssertion)) {
					if(correctAnswer.getValidation(a.getName()) == null) correctAnswer.validations.push(a); else if(correctAnswer.getValidation(a.getName()) != a) {
						var _g4 = 0, _g3 = correctAnswer.validations.length;
						while(_g4 < _g3) {
							var j = _g4++;
							var v = correctAnswer.validations[j];
							if(v.name == a.name) {
								this.assertionRemoved(correctAnswer.validations[j]);
								correctAnswer.validations[j] = a;
							}
						}
					}
				} else if(a.isEquivalence()) {
					var comparisonAssertion = com.wiris.quizzes.impl.ComparisonAssertion.fromAssertion(a);
					this.assertionRemoved(correctAnswer.comparison);
					correctAnswer.comparison = comparisonAssertion;
					var index = this.assertionIndex(a);
					if(index != -1) this.assertions[index] = comparisonAssertion; else this.assertions.push(comparisonAssertion);
					a = comparisonAssertion;
				} else if(a.isCheck() || a.isStructure()) {
					var validationAssertion = com.wiris.quizzes.impl.ValidationAssertion.fromAssertion(a);
					if(correctAnswer.getValidation(validationAssertion.getName()) == null) correctAnswer.validations.push(validationAssertion); else {
						var _g4 = 0, _g3 = correctAnswer.validations.length;
						while(_g4 < _g3) {
							var j = _g4++;
							var v = correctAnswer.validations[j];
							if(v.name == validationAssertion.name) {
								this.assertionRemoved(correctAnswer.validations[j]);
								correctAnswer.validations[j] = validationAssertion;
							}
						}
					}
					var index = this.assertionIndex(a);
					if(index != -1) this.assertions[index] = validationAssertion; else this.assertions.push(validationAssertion);
					a = validationAssertion;
				}
			}
			if(js.Boot.__instanceof(a,com.wiris.quizzes.impl.SyntaxAssertion)) {
				if(slot.syntax != a) {
					this.assertionRemoved(slot.syntax);
					slot.syntax = a;
				}
				slot.syntax.setCorrectAnswers(this.getSlotCorrectAnswersIds(slot));
			} else if(a.isSyntactic()) {
				var syntaxAssertion = com.wiris.quizzes.impl.SyntaxAssertion.fromAssertion(a);
				this.assertionRemoved(slot.syntax);
				slot.syntax = syntaxAssertion;
				slot.syntax.setCorrectAnswers(this.getSlotCorrectAnswersIds(slot));
				var index = this.assertionIndex(a);
				if(index != -1) this.assertions[index] = syntaxAssertion; else this.assertions.push(syntaxAssertion);
				a = syntaxAssertion;
			}
		}
		this.ensureSlotsAndAuthorAnswersHaveReferences();
	}
	,forceSlotStructure: function() {
		this.updateSlotsImpl(true);
	}
	,updateSlots: function() {
		this.updateSlotsImpl(false);
	}
	,assertionRemoved: function(assertion) {
		if(assertion == null) return;
		this.id = null;
		HxOverrides.remove(this.assertions,assertion);
	}
	,assertionAdded: function(assertion,correctAnswerId,userAnswerId) {
		if(assertion == null) return; else if(this.assertions == null) this.assertions = new Array();
		this.id = null;
		if(correctAnswerId != null) assertion.setCorrectAnswer(correctAnswerId);
		if(userAnswerId != null) assertion.setAnswer(userAnswerId);
		var name = assertion.name;
		var correctAnswer = assertion.getCorrectAnswer();
		var userAnswer = assertion.getAnswer();
		var index = this.getAssertionIndex(name,correctAnswer,userAnswer);
		if(index == -1) this.assertions.push(assertion); else this.assertions[index] = assertion;
	}
	,authorAnswerRemoved: function(authorAnswer) {
		this.id = null;
		this.assertionRemoved(authorAnswer.comparison);
		var validations = authorAnswer.validations;
		var _g = 0;
		while(_g < validations.length) {
			var a = validations[_g];
			++_g;
			this.assertionRemoved(a);
		}
		var index = Std.parseInt(authorAnswer.id);
		HxOverrides.remove(this.correctAnswers,this.correctAnswers[index]);
		var _g = 0, _g1 = this.slots;
		while(_g < _g1.length) {
			var s = _g1[_g];
			++_g;
			var aaa = s.authorAnswers;
			var ids = new Array();
			var i = 0;
			var _g2 = 0;
			while(_g2 < aaa.length) {
				var aa = aaa[_g2];
				++_g2;
				var aaIndex = Std.parseInt(aa.id);
				if(aaIndex > index) {
					aaIndex--;
					aa.id = aaIndex + "";
					aa.value.id = aa.id;
					aa.comparison.setCorrectAnswer(aa.id);
					var vaa = aa.validations;
					var _g3 = 0;
					while(_g3 < vaa.length) {
						var va = vaa[_g3];
						++_g3;
						va.setCorrectAnswer(aa.id);
					}
				}
				ids[i++] = aa.id;
			}
			s.syntax.setCorrectAnswers(ids);
		}
	}
	,authorAnswerAdded: function(authorAnswer,slot) {
		this.id = null;
		if(this.correctAnswers == null) this.correctAnswers = new Array();
		var index = this.correctAnswers.length;
		authorAnswer.id = index + "";
		authorAnswer.value.id = index + "";
		this.correctAnswers.push(authorAnswer.value);
		this.assertionAdded(authorAnswer.comparison,authorAnswer.id,slot.id);
		slot.syntax.addCorrectAnswer(index + "");
		if(authorAnswer.validations != null && authorAnswer.validations.length > 0) {
			var validationAssertions = authorAnswer.validations;
			var _g = 0;
			while(_g < validationAssertions.length) {
				var validation = validationAssertions[_g];
				++_g;
				this.assertionAdded(validation,authorAnswer.id,slot.id);
			}
		}
	}
	,removeSlot: function(slot) {
		this.id = null;
		if(this.slots == null) return;
		var impl = slot;
		HxOverrides.remove(this.slots,impl);
		this.assertionRemoved(impl.syntax);
		var aaa = impl.authorAnswers;
		var _g = 0;
		while(_g < aaa.length) {
			var aa = aaa[_g];
			++_g;
			this.authorAnswerRemoved(aa);
		}
	}
	,addSlotImpl: function(slot) {
		this.id = null;
		if(this.slots == null) this.slots = new Array();
		slot.id = this.slots.length + "";
		this.slots.push(slot);
		this.assertionAdded(slot.syntax,null,slot.id);
	}
	,addNewSlotFromModel: function(slot) {
		var newSlot = this.addNewSlot();
		if(slot != null) newSlot.copyData(slot,true);
		return newSlot;
	}
	,addNewSlot: function() {
		var slot = com.wiris.quizzes.impl.SlotImpl.newWithQuestionCallback(this);
		this.addSlotImpl(slot);
		return slot;
	}
	,getSlots: function() {
		if(this.slots == null) return [];
		var slotsArray = new Array();
		slotsArray = this.slots.slice();
		return slotsArray;
	}
	,importQuestion: function(question) {
		this.id = question.id;
		this.wirisCasSession = question.wirisCasSession;
		this.options = question.options;
		this.correctAnswers = question.correctAnswers;
		this.assertions = question.assertions;
		this.localData = question.localData;
		this.slots = question.slots;
	}
	,getAssertion: function(i) {
		return this.assertions[i];
	}
	,getAssertionsLength: function() {
		return this.assertions == null?0:this.assertions.length;
	}
	,getProperty: function(name) {
		var key = com.wiris.quizzes.impl.QuizzesEnumUtils.propertyName2String(name);
		if(com.wiris.util.type.Arrays.containsArray(com.wiris.quizzes.impl.LocalData.keys,key)) return this.getLocalData(key); else return this.getOption(key);
	}
	,setProperty: function(name,value) {
		var key = com.wiris.quizzes.impl.QuizzesEnumUtils.propertyName2String(name);
		if(com.wiris.util.type.Arrays.containsArray(com.wiris.quizzes.impl.LocalData.keys,key)) this.setLocalData(key,value); else this.setOption(key,value);
	}
	,moveAnswers: function(correct,user) {
		this.id = null;
		var i;
		var answers = new Array();
		var _g1 = 0, _g = correct.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(i1 != correct[i1]) {
				answers[i1] = this.getCorrectAnswer(correct[i1]);
				if(answers[i1] == null) answers[i1] = "";
			}
		}
		var _g1 = 0, _g = correct.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(correct[i1] != i1) this.setCorrectAnswer(i1,answers[i1]);
		}
		if(this.correctAnswers != null) {
			i = this.correctAnswers.length - 1;
			while(i >= correct.length) {
				HxOverrides.remove(this.correctAnswers,this.correctAnswers[i]);
				i--;
			}
		}
		if(this.assertions != null) {
			var newAssertions = new Array();
			var _g1 = 0, _g = this.assertions.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var a = this.assertions[i1];
				var correctAnswers = a.getCorrectAnswers();
				var newCorrectAnswersArray = new Array();
				var j;
				var _g3 = 0, _g2 = correctAnswers.length;
				while(_g3 < _g2) {
					var j1 = _g3++;
					var k;
					var _g5 = 0, _g4 = correct.length;
					while(_g5 < _g4) {
						var k1 = _g5++;
						if(correct[k1] == Std.parseInt(correctAnswers[j1])) newCorrectAnswersArray.push(k1);
					}
				}
				if(newCorrectAnswersArray.length > 0) {
					var newCorrectAnswers = new Array();
					var _g3 = 0, _g2 = newCorrectAnswersArray.length;
					while(_g3 < _g2) {
						var j1 = _g3++;
						newCorrectAnswers[j1] = "" + newCorrectAnswersArray[j1];
					}
					if(correctAnswers.length > 1 || newCorrectAnswers.length == 1) {
						a.setCorrectAnswers(newCorrectAnswers);
						a.setAnswers(newCorrectAnswers);
						newAssertions.push(a);
					} else {
						var k;
						var _g3 = 0, _g2 = newCorrectAnswers.length;
						while(_g3 < _g2) {
							var k1 = _g3++;
							var b = a.copy();
							b.setCorrectAnswer(newCorrectAnswers[k1]);
							b.setAnswer(newCorrectAnswers[k1]);
							newAssertions.push(b);
						}
					}
				}
			}
			this.assertions = newAssertions;
		}
		this.slots = new Array();
		this.updateSlots();
	}
	,isImplicitOption: function(name,value) {
		var i = 0;
		while(i < com.wiris.quizzes.impl.Option.options.length) {
			if(com.wiris.quizzes.impl.Option.options[i] == name) break;
			i++;
		}
		return i >= 8 && this.defaultOption(name) == value;
	}
	,getAlgorithm: function() {
		if(com.wiris.quizzes.impl.HTMLTools.emptyCasSession(this.wirisCasSession)) return null; else return this.wirisCasSession;
	}
	,removeCalcOptions: function() {
		var _g1 = 0, _g = com.wiris.quizzes.impl.CalcDocumentTools.options.length;
		while(_g1 < _g) {
			var i = _g1++;
			var opt = com.wiris.quizzes.impl.CalcDocumentTools.options[i];
			this.removeOption(opt);
		}
	}
	,setAlgorithm: function(session) {
		if(com.wiris.quizzes.impl.HTMLTools.emptyCasSession(session)) session = null;
		if(session != this.wirisCasSession || session != null && !(session == this.wirisCasSession)) {
			this.id = null;
			if(com.wiris.quizzes.impl.CalcDocumentTools.isCalc(session)) {
				var sessionDocument = new com.wiris.quizzes.impl.CalcDocumentTools(session);
				if((this.wirisCasSession == null || !com.wiris.quizzes.impl.CalcDocumentTools.isCalc(this.wirisCasSession) || !this.getCalcDocument().hasQuizzesQuestionOptions()) && sessionDocument.hasQuizzesQuestionOptions()) this.removeCalcOptions();
				this.calcDocument = sessionDocument;
			} else this.calcDocument = null;
			this.wirisCasSession = session;
		}
	}
	,getAnswerFieldType: function() {
		var stringType = this.getProperty(com.wiris.quizzes.api.PropertyName.ANSWER_FIELD_TYPE);
		return com.wiris.quizzes.impl.QuizzesEnumUtils.string2answerFieldType(stringType);
	}
	,setAnswerFieldType: function(type) {
		if(type != null) this.setLocalData(com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_INPUT_FIELD,com.wiris.quizzes.impl.QuizzesEnumUtils.answerFieldType2String(type)); else throw "Invalid type parameter.";
	}
	,changeAssertionParamName: function(a,oldname,newname) {
		if(a.parameters != null) {
			var j;
			var _g1 = 0, _g = a.parameters.length;
			while(_g1 < _g) {
				var j1 = _g1++;
				if(a.parameters[j1].name == oldname) a.parameters[j1].name = newname;
			}
		}
	}
	,importTolerance: function(tolerance) {
		if(this.isDeprecatedTolerance(tolerance)) {
			var pattern10 = new EReg("^10\\^\\(-(.*)\\)$","");
			if(pattern10.match(tolerance)) {
				var exponent = StringTools.trim(pattern10.matched(1));
				if(StringTools.startsWith(exponent,"(") && StringTools.endsWith(exponent,")")) exponent = StringTools.trim(HxOverrides.substr(exponent,1,exponent.length - 2));
				if(com.wiris.system.TypeTools.isFloating(exponent)) {
					var expd = -Std.parseFloat(exponent);
					tolerance = Math.pow(10.0,expd) + "";
				} else {
					var patternlog = new EReg("-?log\\((.*)\\)","");
					if(patternlog.match(exponent)) {
						var arg = patternlog.matched(1);
						if(StringTools.startsWith(exponent,"-")) tolerance = arg; else if(com.wiris.system.TypeTools.isFloating(arg)) tolerance = 1.0 / Std.parseFloat(arg) + "";
					}
				}
			}
		}
		return tolerance;
	}
	,isDeprecatedTolerance: function(tol) {
		return tol.indexOf("10^") != -1;
	}
	,addDeprecationWarning: function(warning) {
		if(!com.wiris.system.ArrayEx.contains(this.deprecationWarnings,warning)) this.deprecationWarnings.push(warning);
	}
	,importDeprecated: function() {
		if(this.assertions != null) {
			var i;
			var _g1 = 0, _g = this.assertions.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var a = this.assertions[i1];
				if(a.name == com.wiris.quizzes.impl.Assertion.EQUIVALENT_SET) {
					a.name = com.wiris.quizzes.impl.Assertion.EQUIVALENT_SYMBOLIC;
					a.setParam(com.wiris.quizzes.impl.Assertion.PARAM_ORDER_MATTERS,"false");
					a.setParam(com.wiris.quizzes.impl.Assertion.PARAM_REPETITION_MATTERS,"false");
					this.addDeprecationWarning(com.wiris.quizzes.impl.QuestionImpl.EQUIVALENT_SET_ASSERTION);
				}
				if(a.name == com.wiris.quizzes.impl.Assertion.SYNTAX_LIST) {
					a.name = com.wiris.quizzes.impl.Assertion.EQUIVALENT_SYMBOLIC;
					a.setParam(com.wiris.quizzes.impl.Assertion.PARAM_NO_BRACKETS_LIST,"true");
					this.addDeprecationWarning(com.wiris.quizzes.impl.QuestionImpl.SYNTAX_LIST_ASSERTION);
				}
				if(a.name == com.wiris.quizzes.impl.Assertion.SYNTAX_EXPRESSION) {
					a.name = com.wiris.quizzes.impl.Assertion.SYNTAX_MATH;
					if(a.hasParam(com.wiris.quizzes.impl.Assertion.PARAM_TEXT_LOGIC_OPERATORS)) {
						a.removeParam(com.wiris.quizzes.impl.Assertion.PARAM_TEXT_LOGIC_OPERATORS);
						this.addDeprecationWarning(com.wiris.quizzes.impl.QuestionImpl.TEXT_LOGIC_OPERATORS);
					}
				}
				if(a.name == com.wiris.quizzes.impl.Assertion.SYNTAX_QUANTITY) {
					var constants = a.getParam("constants");
					var units = a.getParam("units");
					var unitPrefixes = a.getParam("unitprefixes");
					var itemseparators = a.getParam("itemseparators");
					var decimalseparators = a.getParam("decimalseparators");
					a.name = com.wiris.quizzes.impl.Assertion.SYNTAX_MATH;
					a.setParam("constants",constants);
					a.setParam("functions","");
					a.setParam("units",units);
					a.setParam("unitprefixes",unitPrefixes);
					a.setParam("itemseparators",itemseparators);
					a.setParam("decimalseparators",decimalseparators);
					a.setParam("ratio","true");
					a.setParam("scientificnotation","true");
				}
				if(a.name == com.wiris.quizzes.impl.Assertion.CHECK_NO_MORE_DECIMALS) {
					a.name = com.wiris.quizzes.impl.Assertion.CHECK_PRECISION;
					this.changeAssertionParamName(a,"digits","max");
					a.setParam("relative","false");
				}
				if(a.name == com.wiris.quizzes.impl.Assertion.CHECK_NO_MORE_DIGITS) {
					a.name = com.wiris.quizzes.impl.Assertion.CHECK_PRECISION;
					this.changeAssertionParamName(a,"digits","max");
					a.setParam("relative","true");
				}
				if(a.name == com.wiris.quizzes.impl.Assertion.CHECK_UNIT) {
					a.name = com.wiris.quizzes.impl.Assertion.CHECK_EQUIVALENT_UNITS;
					a.setParam(com.wiris.quizzes.impl.Assertion.PARAM_ALLOW_PREFIXES,"false");
					a.removeParam(com.wiris.quizzes.impl.Assertion.PARAM_UNIT);
				}
				if(a.name == com.wiris.quizzes.impl.Assertion.CHECK_UNIT_LITERAL) {
					a.name = com.wiris.quizzes.impl.Assertion.CHECK_EQUIVALENT_UNITS;
					a.setParam(com.wiris.quizzes.impl.Assertion.PARAM_ALLOW_PREFIXES,"false");
					a.removeParam(com.wiris.quizzes.impl.Assertion.PARAM_UNIT);
					this.addDeprecationWarning(com.wiris.quizzes.impl.QuestionImpl.EQUIVALENT_UNIT_LITERAL);
				}
				if(a.name == com.wiris.quizzes.impl.Assertion.EQUIVALENT_FUNCTION && a.hasParam(com.wiris.quizzes.impl.Assertion.PARAM_NOT_EVALUATE)) {
					var value = a.getParam(com.wiris.quizzes.impl.Assertion.PARAM_NOT_EVALUATE);
					a.removeParam(com.wiris.quizzes.impl.Assertion.PARAM_NOT_EVALUATE);
					a.setParam(com.wiris.quizzes.impl.Assertion.PARAM_FUNCTION_ARGUMENT_MODE,"true" == value?com.wiris.quizzes.impl.Assertion.PARAM_VALUE_FUNCTION_ARGUMENT_UNEVALUATED:com.wiris.quizzes.impl.Assertion.PARAM_VALUE_FUNCTION_ARGUMENT_EVALUATED);
				}
				if(a.isEquivalence()) {
					var tol = a.getParam(com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE);
					if(tol != null && this.isDeprecatedTolerance(tol)) a.setParam(com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE,this.importTolerance(tol));
				}
			}
		}
		var tolerance = this.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE);
		if(this.isDeprecatedTolerance(tolerance)) this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE,this.importTolerance(tolerance));
	}
	,isAssertionDeprecatedCompatible: function(a) {
		return a.name == com.wiris.quizzes.impl.Assertion.CHECK_NO_MORE_DIGITS || a.name == com.wiris.quizzes.impl.Assertion.CHECK_NO_MORE_DECIMALS || a.name == com.wiris.quizzes.impl.Assertion.SYNTAX_EXPRESSION || a.name == com.wiris.quizzes.impl.Assertion.SYNTAX_QUANTITY || a.name == com.wiris.quizzes.impl.Assertion.CHECK_UNIT || a.name == com.wiris.quizzes.impl.Assertion.EQUIVALENT_FUNCTION && a.hasParam(com.wiris.quizzes.impl.Assertion.PARAM_NOT_EVALUATE);
	}
	,isAssertionDeprecatedNeedsCheck: function(a) {
		return a.name == com.wiris.quizzes.impl.Assertion.EQUIVALENT_SET || a.name == com.wiris.quizzes.impl.Assertion.SYNTAX_LIST || a.name == com.wiris.quizzes.impl.Assertion.CHECK_UNIT_LITERAL || a.name == com.wiris.quizzes.impl.Assertion.SYNTAX_EXPRESSION && a.hasParam(com.wiris.quizzes.impl.Assertion.PARAM_TEXT_LOGIC_OPERATORS);
	}
	,isDeprecated: function() {
		if(this.assertions != null) {
			var i;
			var _g1 = 0, _g = this.assertions.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var a = this.assertions[i1];
				if(this.isAssertionDeprecatedNeedsCheck(a)) return com.wiris.quizzes.impl.QuestionImpl.DEPRECATED_NEEDS_CHECK; else if(this.isAssertionDeprecatedCompatible(a)) return com.wiris.quizzes.impl.QuestionImpl.DEPRECATED_COMPATIBLE;
				if(a.isEquivalence()) {
					var tol = a.getParam(com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE);
					if(tol != null && this.isDeprecatedTolerance(tol)) return com.wiris.quizzes.impl.QuestionImpl.DEPRECATED_COMPATIBLE;
				}
			}
		}
		if(this.isDeprecatedTolerance(this.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE))) return com.wiris.quizzes.impl.QuestionImpl.DEPRECATED_COMPATIBLE;
		return com.wiris.quizzes.impl.QuestionImpl.NO_DEPRECATED;
	}
	,getImpl: function() {
		return this;
	}
	,hasId: function() {
		return this.id != null && this.id.length > 0;
	}
	,addAssertion: function(name,correctAnswer,studentAnswer,parameters) {
		this.setParametrizedAssertion(name,"" + correctAnswer,"" + studentAnswer,parameters);
	}
	,isEquivalent: function(q) {
		var te = com.wiris.quizzes.impl.HTMLTools.emptyCasSession(this.wirisCasSession);
		var qe = com.wiris.quizzes.impl.HTMLTools.emptyCasSession(q.wirisCasSession);
		if(te && !qe || !te && qe) return false; else if(!te && !qe && !(this.wirisCasSession == q.wirisCasSession)) return false;
		if(this.correctAnswers != null && q.correctAnswers != null) {
			if(this.correctAnswers.length != q.correctAnswers.length) return false;
			var i;
			var _g1 = 0, _g = this.correctAnswers.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var tca = this.correctAnswers[i1];
				var qca = q.correctAnswers[i1];
				if(!(tca.id == qca.id)) return false;
				if(!(tca.content == qca.content)) return false;
			}
		}
		if(this.assertions != null && q.assertions != null) {
			if(this.assertions.length != q.assertions.length) return false;
			var i;
			var _g1 = 0, _g = this.assertions.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var ta = this.assertions[i1];
				var qa = q.assertions[i1];
				if(ta.getCorrectAnswer() != qa.getCorrectAnswer() || ta.getAnswer() != qa.getAnswer() || !(ta.name == qa.name)) return false;
				if(ta.parameters == null && qa.parameters != null || ta.parameters != null && qa.parameters == null) return false;
				if(ta.parameters != null && qa.parameters != null) {
					if(ta.parameters.length != qa.parameters.length) return false;
					var j;
					var _g3 = 0, _g2 = ta.parameters.length;
					while(_g3 < _g2) {
						var j1 = _g3++;
						var tp = ta.parameters[j1];
						var qp = qa.parameters[j1];
						if(tp.name != qp.name || tp.content != qp.content) return false;
					}
				}
			}
		}
		var k;
		var _g1 = 0, _g = com.wiris.quizzes.impl.Option.options.length;
		while(_g1 < _g) {
			var k1 = _g1++;
			var to = this.getOption(com.wiris.quizzes.impl.Option.options[k1]);
			var qo = q.getOption(com.wiris.quizzes.impl.Option.options[k1]);
			if(to == null && qo != null || to != null && qo == null || !(to == qo)) return false;
		}
		var _g1 = 0, _g = com.wiris.quizzes.impl.LocalData.keys.length;
		while(_g1 < _g) {
			var k1 = _g1++;
			var td = this.getLocalData(com.wiris.quizzes.impl.LocalData.keys[k1]);
			var qd = q.getLocalData(com.wiris.quizzes.impl.LocalData.keys[k1]);
			if(td == null && qd != null || td != null && qd == null || !(td == qd)) return false;
		}
		return true;
	}
	,update: function(response) {
		this.id = null;
		var qs = response;
		if(qs != null && qs.results != null) {
			var i;
			var _g1 = 0, _g = qs.results.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var r = qs.results[i1];
				var s = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getSerializer();
				var tag = s.getTagName(r);
				if(tag == com.wiris.quizzes.impl.ResultGetTranslation.tagName) {
					var rgt = r;
					this.wirisCasSession = StringTools.trim(rgt.wirisCasSession);
				}
			}
		}
	}
	,hideCompoundAnswerAnswers: function(m) {
		if(com.wiris.quizzes.impl.MathContent.getMathType(m) == com.wiris.quizzes.impl.MathContent.TYPE_GEOMETRY_FILE) {
			var geometryFile = com.wiris.util.geometry.GeometryFile.readJSON(m);
			geometryFile.data.remove(com.wiris.util.geometry.GeometryFile.CONSTRAINTS);
			geometryFile.data.remove(com.wiris.util.geometry.GeometryFile.HANDWRITING_TRACES);
			var elements = com.wiris.util.json.JSon.getArray(geometryFile.data.get(com.wiris.util.geometry.GeometryFile.ELEMENTS));
			var elements2 = new Array();
			var _g = 0;
			while(_g < elements.length) {
				var o = elements[_g];
				++_g;
				var element = com.wiris.util.json.JSon.getHash(o);
				var element2 = new Hash();
				element2.set(com.wiris.util.geometry.GeometryElement.ID,element.get(com.wiris.util.geometry.GeometryElement.ID));
				element2.set(com.wiris.util.geometry.GeometryElement.TYPE,element.get(com.wiris.util.geometry.GeometryElement.TYPE));
				elements2.push(element2);
			}
			geometryFile.data.set(com.wiris.util.geometry.GeometryElement.ELEMENTS,elements2);
			return geometryFile.toJSON();
		} else {
			var a = new com.wiris.quizzes.impl.MathContent();
			a.set(m);
			var c = com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswer(a);
			var i;
			var _g1 = 0, _g = c.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				c[i1][1] = "<math></math>";
			}
			a = com.wiris.quizzes.impl.CompoundAnswerParser.joinCompoundAnswer(c);
			return a.content;
		}
	}
	,isQuestionCompoundAnswer: function() {
		return this.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER) == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE;
	}
	,isCompoundAnswer: function() {
		if(this.isQuestionCompoundAnswer()) return true;
		if(this.slots != null) {
			var _g = 0, _g1 = this.slots;
			while(_g < _g1.length) {
				var s = _g1[_g];
				++_g;
				if(s.isSlotCompoundAnswer()) return true;
			}
		}
		return false;
	}
	,getStudentQuestion: function() {
		var q = new com.wiris.quizzes.impl.QuestionImpl();
		q.id = this.id;
		var i;
		q.assertions = this.assertions;
		q.localData = this.localData;
		if(this.slots != null) {
			q.slots = new Array();
			var _g = 0, _g1 = this.slots;
			while(_g < _g1.length) {
				var s = _g1[_g];
				++_g;
				var sq = new com.wiris.quizzes.impl.SlotImpl();
				sq.question = q;
				sq.syntax = s.syntax;
				sq.localData = s.localData;
				sq.initialContent = s.initialContent;
				sq.id = s.id;
				q.slots.push(sq);
			}
		}
		if(this.isCompoundAnswer() && this.correctAnswers != null) {
			q.correctAnswers = new Array();
			if(this.isQuestionCompoundAnswer()) {
				var _g1 = 0, _g = this.correctAnswers.length;
				while(_g1 < _g) {
					var i1 = _g1++;
					var ca = this.correctAnswers[i1];
					var content = ca.content;
					if(ca.content != null && ca.content.length > 0) content = this.hideCompoundAnswerAnswers(ca.content);
					q.setCorrectAnswer(i1,content);
				}
			} else if(this.slots != null) {
				var _g = 0, _g1 = this.slots;
				while(_g < _g1.length) {
					var s = _g1[_g];
					++_g;
					if(s.isSlotCompoundAnswer()) {
						var aaa = s.authorAnswers;
						var _g2 = 0;
						while(_g2 < aaa.length) {
							var aa = aaa[_g2];
							++_g2;
							var ca = aa.value;
							var content = ca.content;
							if(ca.content != null && ca.content.length > 0) content = this.hideCompoundAnswerAnswers(ca.content);
							q.setCorrectAnswer(Std.parseInt(ca.id),content);
						}
					}
				}
			}
		}
		return q;
	}
	,defaultLocalData: function(name) {
		if(name == com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_COMPOUND_ANSWER) return com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_FALSE; else if(name == com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_INPUT_FIELD) return com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_INPUT_FIELD_INLINE_EDITOR; else if(name == com.wiris.quizzes.impl.LocalData.KEY_SHOW_CAS || name == com.wiris.quizzes.impl.LocalData.KEY_SHOW_AUXILIARY_TEXT_INPUT) return com.wiris.quizzes.impl.LocalData.VALUE_SHOW_CAS_FALSE; else if(name == com.wiris.quizzes.impl.LocalData.KEY_CAS_INITIAL_SESSION) return null; else if(name == com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_COMPOUND_ANSWER_GRADE) return com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_GRADE_AND; else if(name == com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTION) return null; else if(name == com.wiris.quizzes.impl.LocalData.KEY_AUXILIARY_CAS_HIDE_FILE_MENU) return com.wiris.quizzes.impl.LocalData.VALUE_AUXILIARY_CAS_HIDE_FILE_MENU_FALSE; else if(name == com.wiris.quizzes.impl.LocalData.KEY_GRAPH_LOCK_INITIAL_CONTENT) return "false"; else if(name == com.wiris.quizzes.impl.LocalData.KEY_GRAPH_SHOW_NAME_IN_LABEL) return com.wiris.quizzes.impl.LocalData.VALUE_ALWAYS; else if(name == com.wiris.quizzes.impl.LocalData.KEY_GRAPH_SHOW_VALUE_IN_LABEL) return com.wiris.quizzes.impl.LocalData.VALUE_FOCUS; else if(name == com.wiris.quizzes.impl.LocalData.KEY_GRAPH_MAGNETIC_GRID) return com.wiris.quizzes.impl.LocalData.VALUE_SNAP; else return null;
	}
	,getLocalData: function(name) {
		var ld = com.wiris.quizzes.impl.QuestionImpl.getLocalDataFromArray(name,this.localData);
		return ld != null?ld:this.defaultLocalData(name);
	}
	,setLocalData: function(name,value) {
		this.id = null;
		if(this.localData == null) this.localData = new Array();
		com.wiris.quizzes.impl.QuestionImpl.setLocalDataToArray(name,value,this.localData);
	}
	,getAssertionIndex: function(name,correctAnswer,userAnswer) {
		if(this.assertions == null) return -1;
		var i;
		var _g1 = 0, _g = this.assertions.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			var assertion = this.assertions[i1];
			if(assertion.getCorrectAnswer() == correctAnswer && assertion.getAnswer() == userAnswer && assertion.name == name) return i1;
		}
		return -1;
	}
	,getCorrectAnswersLength: function() {
		return this.correctAnswers == null?0:this.correctAnswers.length;
	}
	,getCorrectAnswer: function(index) {
		if(this.correctAnswers != null && this.correctAnswers.length > index) {
			var a = this.correctAnswers[index];
			if(a != null) return a.content;
		}
		return null;
	}
	,setCorrectAnswer: function(index,content) {
		this.id = null;
		if(index < 0) throw "Invalid index: " + index;
		if(this.correctAnswers == null) this.correctAnswers = new Array();
		while(index >= this.correctAnswers.length) this.correctAnswers.push(new com.wiris.quizzes.impl.CorrectAnswer());
		var ca = this.correctAnswers[index];
		ca.id = "" + index;
		ca.weight = 1.0;
		content = com.wiris.util.xml.MathMLUtils.convertEditor2Newlines(content);
		ca.set(content);
		this.updateSlots();
	}
	,defaultOption: function(name) {
		return com.wiris.quizzes.impl.QuestionImpl.defaultOptions.get(name);
	}
	,removeLocalData: function(name) {
		this.id = null;
		com.wiris.quizzes.impl.QuestionImpl.removeLocalDataFromArray(name,this.localData);
	}
	,removeOption: function(name) {
		if(this.hasCalcmeSessionWithOptions() && this.isCalcmeOption(name)) {
			this.wirisCasSession = this.calcDocument.removeOption(name);
			return;
		}
		this.id = null;
		if(this.options != null) {
			var i = this.options.length - 1;
			while(i >= 0) {
				if(this.options[i].name == name) HxOverrides.remove(this.options,this.options[i]);
				i--;
			}
		}
	}
	,getOption: function(name) {
		if(this.hasCalcmeSessionWithOptions() && this.isCalcmeOption(name)) {
			var calcOption = this.getCalcDocument().getOption(name);
			if(calcOption != null) return calcOption;
		} else if(this.options != null) {
			var i;
			var _g1 = 0, _g = this.options.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				if(this.options[i1].name == name) return this.options[i1].content;
			}
		}
		return this.defaultOption(name);
	}
	,isCalcmeOption: function(name) {
		var _g1 = 0, _g = com.wiris.quizzes.impl.CalcDocumentTools.options.length;
		while(_g1 < _g) {
			var i = _g1++;
			var opt = com.wiris.quizzes.impl.CalcDocumentTools.options[i];
			if(opt == name) return true;
		}
		return false;
	}
	,getItemSeparator: function() {
		if(this.hasCalcmeSessionWithOptions()) return this.getCalcDocument().getOption("item_separator");
		if("," == this.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_DECIMAL_SEPARATOR) || "," == this.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_DIGIT_GROUP_SEPARATOR) && StringTools.startsWith(this.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_FLOAT_FORMAT),",")) return ";";
		return ",";
	}
	,getCalcDocument: function() {
		if(this.calcDocument == null) this.calcDocument = new com.wiris.quizzes.impl.CalcDocumentTools(this.wirisCasSession);
		return this.calcDocument;
	}
	,setOption: function(name,value) {
		this.id = null;
		if(value == null) this.removeOption(name); else if(this.hasCalcmeSessionWithOptions() && this.isCalcmeOption(name)) this.wirisCasSession = this.getCalcDocument().setOption(name,value); else if(this.isImplicitOption(name,value)) this.removeOption(name); else {
			if(this.options == null) this.options = new Array();
			var opt = new com.wiris.quizzes.impl.Option();
			opt.name = name;
			opt.content = value;
			opt.type = com.wiris.quizzes.impl.MathContent.TYPE_TEXT;
			var i;
			var found = false;
			var _g1 = 0, _g = this.options.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				if(this.options[i1].name == name) {
					this.options[i1] = opt;
					found = true;
				}
			}
			if(!found) this.options.push(opt);
		}
	}
	,getAssertionParameter: function(assertionName,correctAnswer,studentAnswer,name) {
		var ind = this.getAssertionIndex(assertionName,"" + correctAnswer,"" + studentAnswer);
		if(ind > -1) return this.getAssertion(ind).getParam(name);
		return null;
	}
	,setAssertionParameter: function(assertionName,correctAnswer,studentAnswer,name,value) {
		var ind = this.getAssertionIndex(assertionName,"" + correctAnswer,"" + studentAnswer);
		if(ind == -1) {
			this.addAssertion(assertionName,correctAnswer,studentAnswer,null);
			ind = this.getAssertionIndex(assertionName,"" + correctAnswer,"" + studentAnswer);
		}
		if(value == null) this.getAssertion(ind).removeParam(name); else this.getAssertion(ind).setParam(name,value);
	}
	,setParametrizedAssertion: function(name,correctAnswer,userAnswer,parameters) {
		this.id = null;
		if(this.assertions == null) this.assertions = new Array();
		var a = new com.wiris.quizzes.impl.Assertion();
		a.name = name;
		a.setCorrectAnswer(correctAnswer);
		a.setAnswer(userAnswer);
		var names = com.wiris.quizzes.impl.Assertion.getParameterNames(name);
		if(parameters != null && names != null) {
			a.parameters = new Array();
			var n = parameters.length < names.length?parameters.length:names.length;
			var i;
			var _g = 0;
			while(_g < n) {
				var i1 = _g++;
				if(parameters[i1] != null) {
					var ap = new com.wiris.quizzes.impl.AssertionParam();
					ap.name = names[i1];
					ap.content = parameters[i1];
					ap.type = com.wiris.quizzes.impl.MathContent.TYPE_TEXT;
					a.parameters.push(ap);
				}
			}
		}
		var index = this.getAssertionIndex(name,correctAnswer,userAnswer);
		if(index == -1) this.assertions.push(a); else this.assertions[index] = a;
		this.updateSlots();
	}
	,removeAssertion: function(name,correctAnswer,userAnswer) {
		this.id = null;
		if(this.assertions != null) {
			var i = this.assertions.length - 1;
			while(i >= 0) {
				var a = this.assertions[i];
				if(a.name == name && a.getCorrectAnswer() == correctAnswer && a.getAnswer() == userAnswer) HxOverrides.remove(this.assertions,a);
				i--;
			}
		}
	}
	,hasCalcmeSessionWithOptions: function() {
		return com.wiris.quizzes.impl.CalcDocumentTools.isCalc(this.wirisCasSession) && this.getCalcDocument().hasQuizzesQuestionOptions();
	}
	,setAssertion: function(name,correctAnswer,userAnswer) {
		this.setParametrizedAssertion(name,"" + correctAnswer,"" + userAnswer,null);
	}
	,setId: function(id) {
		this.id = id;
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.QuestionImpl();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.QuestionImpl.TAGNAME);
		this.id = s.cacheAttribute("id",this.id,null);
		this.wirisCasSession = s.childString("wirisCasSession",this.wirisCasSession,null);
		this.correctAnswers = s.serializeArrayName(this.correctAnswers,"correctAnswers");
		this.assertions = s.serializeArrayName(this.assertions,"assertions");
		this.slots = s.serializeArrayName(this.slots,"slots");
		this.options = s.serializeArrayName(this.options,"options");
		this.localData = s.serializeArrayName(this.localData,"localData");
		s.endTag();
	}
	,deprecationWarnings: null
	,calcDocument: null
	,localData: null
	,options: null
	,wirisCasSession: null
	,id: null
	,assertions: null
	,correctAnswers: null
	,slots: null
	,__class__: com.wiris.quizzes.impl.QuestionImpl
});
if(!com.wiris.util.type) com.wiris.util.type = {}
com.wiris.util.type.Comparator = $hxClasses["com.wiris.util.type.Comparator"] = function() { }
com.wiris.util.type.Comparator.__name__ = ["com","wiris","util","type","Comparator"];
com.wiris.util.type.Comparator.prototype = {
	compare: null
	,__class__: com.wiris.util.type.Comparator
}
com.wiris.quizzes.impl.QuestionInstanceImpl = $hxClasses["com.wiris.quizzes.impl.QuestionInstanceImpl"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
	this.userData = new com.wiris.quizzes.impl.UserData();
	this.userData.randomSeed = Std.random(65536);
	this.variables = null;
	this.checks = null;
	this.compoundChecks = null;
};
com.wiris.quizzes.impl.QuestionInstanceImpl.__name__ = ["com","wiris","quizzes","impl","QuestionInstanceImpl"];
com.wiris.quizzes.impl.QuestionInstanceImpl.__interfaces__ = [com.wiris.util.type.Comparator,com.wiris.quizzes.api.QuestionInstance];
com.wiris.quizzes.impl.QuestionInstanceImpl.base64 = null;
com.wiris.quizzes.impl.QuestionInstanceImpl.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.QuestionInstanceImpl.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	cloneCheckStructureIntoQuestion: function(question) {
		if(!this.hasEvaluation()) return;
		var q = question.getImpl();
		if(q.correctAnswers == null) q.correctAnswers = new Array();
		if(q.assertions == null) q.assertions = new Array();
		var studentAnswers = this.checks.keys();
		while(studentAnswers.hasNext()) {
			var studentAnswer = studentAnswers.next();
			var assertionChecks = this.checks.get(studentAnswer);
			var _g = 0;
			while(_g < assertionChecks.length) {
				var check = assertionChecks[_g];
				++_g;
				var name = check.getAssertionName();
				if(!com.wiris.quizzes.impl.Assertion.isSyntacticName(name)) {
					var ca = check.getCorrectAnswer();
					var cai = Std.parseInt(ca);
					while(cai >= q.correctAnswers.length) {
						var newCA = new com.wiris.quizzes.impl.CorrectAnswer();
						newCA.id = q.correctAnswers.length + "";
						newCA.set("");
						q.correctAnswers.push(newCA);
					}
					if(q.getAssertionIndex(check.getAssertionName(),check.getCorrectAnswer(),check.getAnswer()) == -1) {
						var a = new com.wiris.quizzes.impl.Assertion();
						a.name = check.getAssertionName();
						a.answer = check.getAnswers();
						a.correctAnswer = check.getCorrectAnswers();
						q.assertions.push(a);
					}
				}
			}
		}
		q.updateSlots();
	}
	,getChecks: function(slot,authorAnswer) {
		var slotIndex = Std.parseInt(slot.id);
		var authorAnswerIndex = Std.parseInt(authorAnswer.id);
		return this.getAssertionChecks(authorAnswerIndex,slotIndex);
	}
	,getCompoundGrade: function(slot,authorAnswer,index) {
		var slotIndex = Std.parseInt(slot.id);
		var authorAnswerIndex = Std.parseInt(authorAnswer.id);
		return this.getCompoundAnswerGrade(authorAnswerIndex,slotIndex,index,this.question);
	}
	,getGrade: function(slot,authorAnswer) {
		var slotIndex = Std.parseInt(slot.id);
		var authorAnswerIndex = Std.parseInt(authorAnswer.id);
		return this.getAnswerGrade(authorAnswerIndex,slotIndex,this.question);
	}
	,isSlotAnswerCorrect: function(slot) {
		var index = Std.parseInt(slot.id);
		return this.isAnswerCorrect(index);
	}
	,setSlotAnswer: function(slot,answer) {
		var index = Std.parseInt(slot.id);
		this.setStudentAnswer(index,answer);
	}
	,getSlotAnswer: function(slot) {
		var index = Std.parseInt(slot.id);
		return this.getStudentAnswer(index);
	}
	,concatenate: function(a,e) {
		var b = new Array();
		var i;
		var _g1 = 0, _g = a.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			b[i1] = a[i1];
		}
		b[a.length] = e;
		return b;
	}
	,equalsArrays: function(a1,a2) {
		if(a1.length != a2.length) return false;
		var _g1 = 0, _g = a1.length;
		while(_g1 < _g) {
			var i = _g1++;
			if(!(a1[i] == a2[i])) return false;
		}
		return true;
	}
	,hasCompoundAssociatedCheck: function(a) {
		var answers = this.compoundChecks.keys();
		while(answers.hasNext()) {
			var answer = answers.next();
			var correctAnswers = this.compoundChecks.get(answer).keys();
			while(correctAnswers.hasNext()) {
				var correctAnswer = correctAnswers.next();
				var checks = this.compoundChecks.get(answer).get(correctAnswer);
				var _g = 0;
				while(_g < checks.length) {
					var aa = checks[_g];
					++_g;
					if(aa.getAssertionName() == a.getAssertionName() && this.equalsArrays(a.getAnswers(),aa.getAnswers()) && this.equalsArrays(a.getCorrectAnswers(),aa.getCorrectAnswers())) return true;
				}
			}
		}
		return false;
	}
	,setChecksCompoundAnswers: function() {
		if(this.compoundChecks == null) return;
		var answers = this.checks.keys();
		while(answers.hasNext()) {
			var aa = this.checks.get(answers.next());
			var _g = 0;
			while(_g < aa.length) {
				var a = aa[_g];
				++_g;
				if(this.hasCompoundAssociatedCheck(a)) {
					a.setAnswers(new Array());
					a.setCorrectAnswers(new Array());
				}
			}
		}
		answers = this.compoundChecks.keys();
		while(answers.hasNext()) {
			var answer = answers.next();
			var correctAnswers = this.compoundChecks.get(answer).keys();
			while(correctAnswers.hasNext()) {
				var correctAnswer = correctAnswers.next();
				var checks = this.compoundChecks.get(answer).get(correctAnswer);
				var _g = 0;
				while(_g < checks.length) {
					var a = checks[_g];
					++_g;
					a.setCorrectAnswers(this.concatenate(a.getCorrectAnswers(),correctAnswer));
					a.setAnswers(this.concatenate(a.getAnswers(),answer));
				}
			}
		}
	}
	,setParameter: function(name,value) {
		this.userData.setParameter(name,value);
	}
	,getTextVariables: function() {
		return this.getTypeVariables(com.wiris.quizzes.impl.MathContent.TYPE_TEXT);
	}
	,getMathMLVariables: function() {
		return this.getTypeVariables(com.wiris.quizzes.impl.MathContent.TYPE_MATHML);
	}
	,getTypeVariables: function(type) {
		if(this.hasVariables() && this.variables.exists(type)) return this.variables.get(type); else return null;
	}
	,getHandwritingConstraints: function() {
		if(this.handConstraints == null) {
			var json = this.getLocalDataImpl(com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_HANDWRITING_CONSTRAINTS);
			if(json != null) this.handConstraints = com.wiris.quizzes.impl.HandwritingConstraints.readHandwritingConstraints(json); else if(this.question != null) {
				this.handConstraints = com.wiris.quizzes.impl.HandwritingConstraints.newHandwritingConstraints();
				this.handConstraints.addQuestionConstraints(this.question.getImpl());
				this.handConstraints.addQuestionInstanceConstraints(this);
			}
		}
		return this.handConstraints;
	}
	,serializeHandConstraints: function() {
		if(this.handConstraints != null) this.setLocalDataImpl(com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_HANDWRITING_CONSTRAINTS,this.handConstraints.toJSON(),false);
	}
	,areVariablesReady: function() {
		if(this.variables != null) {
			if(this.variables.exists(com.wiris.quizzes.impl.MathContent.TYPE_IMAGE_REF)) {
				var cache = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getImagesCache();
				var images = this.variables.get(com.wiris.quizzes.impl.MathContent.TYPE_IMAGE_REF);
				var names = images.keys();
				while(names.hasNext()) {
					var filename = images.get(names.next());
					if(com.wiris.settings.PlatformSettings.IS_JAVASCRIPT) {
						var s = com.wiris.system.Storage.newStorage(filename);
						if(!s.exists()) return false;
					} else if(cache.get(filename) == null) return false;
				}
			}
		}
		return true;
	}
	,getAssertionChecks: function(correctAnswer,studentAnswer) {
		if(this.checks != null) {
			var answerChecks = this.checks.get("" + studentAnswer);
			if(answerChecks != null) {
				var res = new Array();
				var i;
				var _g1 = 0, _g = answerChecks.length;
				while(_g1 < _g) {
					var i1 = _g1++;
					var ca = answerChecks[i1].getCorrectAnswers();
					var j;
					var _g3 = 0, _g2 = ca.length;
					while(_g3 < _g2) {
						var j1 = _g3++;
						if(ca[j1] == "" + correctAnswer) res.push(answerChecks[i1]);
					}
				}
				var resarray = new Array();
				resarray = res.slice();
				return resarray;
			}
		}
		return new Array();
	}
	,getStudentAnswersLength: function() {
		return this.userData.answers != null?this.userData.answers.length:0;
	}
	,getStudentAnswer: function(index) {
		if(this.userData.answers != null && index < this.userData.answers.length) {
			var a = this.userData.answers[index];
			if(a != null) return a.content;
		}
		return null;
	}
	,setStudentAnswer: function(index,answer) {
		this.userData.setUserAnswer(index,answer);
	}
	,setAuxiliaryText: function(text) {
		if(text != null && StringTools.trim(text).length > 0) this.setLocalData(com.wiris.quizzes.impl.LocalData.KEY_AUXILIARY_TEXT,text); else if(this.localData != null) {
			var i;
			var _g1 = 0, _g = this.localData.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				if(this.localData[i1].name == com.wiris.quizzes.impl.LocalData.KEY_AUXILIARY_TEXT) HxOverrides.remove(this.localData,this.localData[i1]);
			}
		}
	}
	,setAuxiliarText: function(text) {
		this.setAuxiliaryText(text);
	}
	,setCasSession: function(session) {
		if(session != null && StringTools.trim(session).length > 0) this.setLocalData(com.wiris.quizzes.impl.LocalData.KEY_CAS_SESSION,session); else if(this.localData != null) {
			var i;
			var _g1 = 0, _g = this.localData.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				if(this.localData[i1].name == com.wiris.quizzes.impl.LocalData.KEY_CAS_SESSION) HxOverrides.remove(this.localData,this.localData[i1]);
			}
		}
	}
	,setRandomSeed: function(seed) {
		this.userData.randomSeed = seed;
	}
	,parseTextBoolean: function(text) {
		var trues = ["true","cierto","cert","t" + com.wiris.system.Utf8.uchr(245) + "ene","ziur","vrai","wahr","vero","waar","verdadeiro","certo"];
		var i;
		var _g1 = 0, _g = trues.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(trues[i1] == text) return true;
		}
		return false;
	}
	,updateAnswer: function(qi) {
		var i;
		if(qi.userData.answers != null) {
			if(this.userData.answers == null) this.userData.answers = new Array();
			var _g1 = 0, _g = qi.userData.answers.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var a = qi.userData.answers[i1];
				if(this.userData.answers.length > i1) this.userData.answers[i1] = a; else this.userData.answers.push(a);
			}
		}
		this.setLocalData(com.wiris.quizzes.impl.LocalData.KEY_CAS_SESSION,qi.getLocalData(com.wiris.quizzes.impl.LocalData.KEY_CAS_SESSION));
		this.setLocalData(com.wiris.quizzes.impl.LocalData.KEY_AUXILIARY_TEXT,qi.getLocalData(com.wiris.quizzes.impl.LocalData.KEY_AUXILIARY_TEXT));
	}
	,updateFromStudentQuestionInstance: function(qi) {
		var ii = qi;
		this.userData.answers = ii.userData.answers;
		this.localData = ii.localData;
	}
	,copyVariableToStudentHash: function(variable,studentVariables) {
		var variableKeys = this.variables.keys();
		while(variableKeys.hasNext()) {
			var type = variableKeys.next();
			var typeVariables = this.variables.get(type);
			if(typeVariables.exists(variable)) {
				if(!studentVariables.exists(type)) studentVariables.set(type,new Hash());
				studentVariables.get(type).set(variable,typeVariables.get(variable));
			}
		}
	}
	,getStudentQuestionInstanceVariables: function(variables,question) {
		if(question == null || variables == null) return null;
		var studentVariables = new Hash();
		var tools = new com.wiris.quizzes.impl.HTMLTools();
		var slots = question.getSlots();
		var _g = 0;
		while(_g < slots.length) {
			var slot = slots[_g];
			++_g;
			if(slot.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER) == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE && slot.getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.MATH) {
				var authorAnswers = slot.getAuthorAnswers();
				var authorAnswerValue = authorAnswers[0].getValue();
				var mathContent = new com.wiris.quizzes.impl.MathContent();
				mathContent.set(authorAnswerValue);
				var compoundAnswer = com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswer(mathContent);
				var _g2 = 0, _g1 = compoundAnswer.length;
				while(_g2 < _g1) {
					var i = _g2++;
					var answer = compoundAnswer[i];
					var compoundAnswerVariables = tools.extractVariableNames(answer[0]);
					var _g3 = 0;
					while(_g3 < compoundAnswerVariables.length) {
						var compoundAnswerVariable = compoundAnswerVariables[_g3];
						++_g3;
						this.copyVariableToStudentHash(compoundAnswerVariable,studentVariables);
					}
				}
			}
			if(slot.getSyntax().getName() != com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC && slot.getInitialContent() != null) {
				var variableNames = tools.extractVariableNames(slot.getInitialContent());
				var _g1 = 0;
				while(_g1 < variableNames.length) {
					var variable = variableNames[_g1];
					++_g1;
					this.copyVariableToStudentHash(variable,studentVariables);
				}
			}
		}
		return studentVariables;
	}
	,getStudentQuestionInstance: function() {
		var qi = new com.wiris.quizzes.impl.QuestionInstanceImpl();
		qi.userData.randomSeed = 0;
		qi.userData.answers = this.userData.answers;
		qi.handConstraints = this.handConstraints;
		qi.localData = this.localData;
		qi.checks = this.checks;
		qi.compoundChecks = this.compoundChecks;
		qi.variables = this.getStudentQuestionInstanceVariables(this.variables,this.question);
		return qi;
	}
	,getBooleanVariableValue: function(name) {
		if(!this.hasVariables()) return false;
		name = StringTools.trim(name);
		if(StringTools.startsWith(name,"#")) name = HxOverrides.substr(name,1,null);
		if(this.variables.exists(com.wiris.quizzes.impl.MathContent.TYPE_TEXT)) {
			var textvars = this.variables.get(com.wiris.quizzes.impl.MathContent.TYPE_TEXT);
			if(textvars.exists(name)) {
				var textValue = textvars.get(name);
				return this.parseTextBoolean(textValue);
			}
		}
		if(this.variables.exists(com.wiris.quizzes.impl.MathContent.TYPE_MATHML)) {
			var mmlvars = this.variables.get(com.wiris.quizzes.impl.MathContent.TYPE_MATHML);
			if(mmlvars.exists(name)) {
				var mmlValue = mmlvars.get(name);
				var striptags = new EReg("<[^>]*>","");
				var textValue = striptags.replace(mmlValue,"");
				textValue = StringTools.trim(textValue);
				return this.parseTextBoolean(textValue);
			}
		}
		return false;
	}
	,hashToVariables: function(h,a) {
		if(h == null) return null;
		if(a == null) a = new Array();
		var t = h.keys();
		while(t.hasNext()) {
			var type = t.next();
			var vars = h.get(type);
			var names = vars.keys();
			while(names.hasNext()) {
				var name = names.next();
				var v = new com.wiris.quizzes.impl.Variable();
				v.type = type;
				v.name = name;
				v.content = vars.get(name);
				a.push(v);
			}
		}
		return a;
	}
	,variablesToHash: function(a,h) {
		if(a == null) return null;
		if(h == null) h = new Hash();
		var i;
		var _g1 = 0, _g = a.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			var v = a[i1];
			if(!h.exists(v.type)) h.set(v.type,new Hash());
			h.get(v.type).set(v.name,v.content);
		}
		return h;
	}
	,hashToChecks: function(h) {
		if(h == null) return null;
		var a = new Array();
		var answers = h.keys();
		while(answers.hasNext()) {
			var answer = answers.next();
			a = a.concat(h.get(answer));
		}
		return a;
	}
	,checksToHash: function(a,h) {
		if(a == null) return null;
		if(h == null) h = new Hash();
		var i;
		var _g1 = 0, _g = a.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			var c = a[i1];
			if(!h.exists(c.getAnswer())) h.set(c.getAnswer(),new Array());
			var answerChecks = h.get(c.getAnswer());
			answerChecks.push(c);
		}
		return h;
	}
	,processMatchingChecks: function(correctAnswer,checks) {
		var result = new Array();
		var i;
		var eval = 0;
		var check = 0;
		var _g1 = 0, _g = checks.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(checks[i1].getCorrectAnswer() == "" + correctAnswer) {
				var c = checks[i1];
				if(StringTools.startsWith(c.assertion,"syntax_")) {
					result.splice(eval,0,checks[i1]);
					eval++;
					check++;
				} else if(StringTools.startsWith(c.assertion,"equivalent_")) {
					result.splice(check,0,checks[i1]);
					check++;
				} else result.push(checks[i1]);
			}
		}
		return result;
	}
	,getMatchingCompoundChecks: function(slot,authorAnswer,index) {
		var correctAnswer = Std.parseInt(authorAnswer.id);
		var userAnswer = Std.parseInt(slot.id);
		var isGraphical = slot.getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC;
		var checks = null;
		if(isGraphical) {
			var elements = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getElementsToGradeFromAuthorAnswer(authorAnswer);
			if(index >= 0 && index < elements.length) checks = this.getCompoundAnswerChecks(correctAnswer,userAnswer,elements[index],true);
		} else checks = this.getCompoundAnswerChecks(correctAnswer,userAnswer,index + "",false);
		if(checks == null) return new Array(); else return this.processMatchingChecks(correctAnswer,checks);
	}
	,getMatchingChecks: function(slot,authorAnswer) {
		var correctAnswer = Std.parseInt(authorAnswer.id);
		var userAnswer = Std.parseInt(slot.id);
		var result = new Array();
		if(this.checks == null || !this.checks.exists(userAnswer + "")) return result;
		return this.processMatchingChecks(correctAnswer,this.checks.get(userAnswer + ""));
	}
	,isAnswerSyntaxCorrect: function(answer) {
		var correct = true;
		if(this.checks != null && this.checks.exists(answer + "")) {
			var checks = this.checks.get(answer + "");
			var i;
			var _g1 = 0, _g = checks.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var ac = checks[i1];
				var j;
				var _g3 = 0, _g2 = com.wiris.quizzes.impl.Assertion.syntactic.length;
				while(_g3 < _g2) {
					var j1 = _g3++;
					if(ac.assertion == com.wiris.quizzes.impl.Assertion.syntactic[j1]) correct = correct && ac.value == 1.0;
				}
				if(ac.assertion == com.wiris.quizzes.impl.Assertion.SYNTAX_MATH) correct = correct && ac.value == 1.0;
			}
		}
		return correct;
	}
	,getCompoundComponents: function() {
		if(this.compoundChecks != null) {
			var n = -1;
			var it = this.compoundChecks.keys();
			var compoundGraphicalComponents = new Hash();
			while(it.hasNext()) {
				var key = it.next();
				if(key.indexOf("_cg") == -1) try {
					var m = Std.parseInt(HxOverrides.substr(key,key.indexOf("_c") + 2,null));
					if(m > n) n = m;
				} catch( e ) {
				} else {
					var answer = HxOverrides.substr(key,0,key.indexOf("_cg"));
					if(!compoundGraphicalComponents.exists(answer)) compoundGraphicalComponents.set(answer,"0"); else compoundGraphicalComponents.set(answer,"" + (Std.parseInt(compoundGraphicalComponents.get(answer)) + 1));
				}
			}
			var itG = compoundGraphicalComponents.keys();
			while(itG.hasNext()) {
				var m = Std.parseInt(compoundGraphicalComponents.get(itG.next()));
				if(m > n) n = m;
			}
			return n + 1;
		} else return 0;
	}
	,isNumberPart: function(c) {
		var parts = [".","-","0","1","2","3","4","5","6","7","8","9"];
		var i;
		var _g1 = 0, _g = parts.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(parts[i1] == c) return true;
		}
		return false;
	}
	,getCompoundGradeDistribution: function(s) {
		var n = this.getCompoundComponents();
		var d = new Array();
		if(s == null || StringTools.trim(s) == "") {
			var i;
			var _g = 0;
			while(_g < n) {
				var i1 = _g++;
				d[i1] = 1.0;
			}
			d[n] = n;
		} else {
			var content = false;
			var j = 0;
			var l = com.wiris.system.Utf8.getLength(s);
			var i = 0;
			var sb = new StringBuf();
			while(i < l && j < n) {
				var c = com.wiris.system.Utf8.uchr(com.wiris.system.Utf8.charCodeAt(s,i));
				var digit = this.isNumberPart(c);
				if(digit) {
					sb.b += Std.string(c);
					content = true;
				}
				if(content && (!digit || i + 1 == l)) {
					var t = 0.0;
					try {
						t = Std.parseFloat(sb.b);
					} catch( e ) {
					}
					d[j] = t;
					j++;
					sb = new StringBuf();
					content = false;
				}
				i++;
			}
			while(j < n) {
				d[j] = 0.0;
				j++;
			}
			var sum = 0.0;
			var _g = 0;
			while(_g < n) {
				var j1 = _g++;
				sum += d[j1];
			}
			d[n] = sum;
		}
		return d;
	}
	,getCompoundAnswerGrade: function(correctAnswer,studentAnswer,index,q) {
		var n = this.getCompoundComponents();
		if(index < 0 || index >= n) throw "Compound answer index out of bounds.";
		var qimpl = q.getImpl();
		var graphicalAssertionIndex = qimpl.getAssertionIndex(com.wiris.quizzes.impl.Assertion.EQUIVALENT_GRAPHIC,correctAnswer + "",studentAnswer + "");
		var checks = null;
		if(graphicalAssertionIndex != -1) {
			var ca = qimpl.getCorrectAnswer(correctAnswer);
			var ass = qimpl.getAssertion(graphicalAssertionIndex);
			var elements = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getElementsToGrade(ca,ass);
			if(elements != null && index < elements.length) checks = this.getCompoundAnswerChecks(correctAnswer,studentAnswer,elements[index] + "",true);
			var noSuperfluousElementsIndex = qimpl.getAssertionIndex(com.wiris.quizzes.impl.Assertion.CHECK_NO_SUPERFLUOUS,correctAnswer + "",studentAnswer + "");
			if(checks != null && noSuperfluousElementsIndex != -1) {
				var slotChecks = this.checks.get(studentAnswer + "");
				var _g = 0;
				while(_g < slotChecks.length) {
					var c = slotChecks[_g];
					++_g;
					if(c.getAnswer() != null && c.getAnswer() == correctAnswer + "" && com.wiris.quizzes.impl.Assertion.CHECK_NO_SUPERFLUOUS == c.getAssertionName()) {
						checks.push(c);
						break;
					}
				}
			}
		} else checks = this.getCompoundAnswerChecks(correctAnswer,studentAnswer,index + "",false);
		var grade = 0.0;
		if(checks != null) grade = this.prodChecks(checks,-1,-1);
		return grade;
	}
	,prodChecks: function(checks,correctAnswer,studentAnswer) {
		var grade = 1.0;
		var i;
		var _g1 = 0, _g = checks.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if((correctAnswer == -1 || com.wiris.util.type.Arrays.containsArray(checks[i1].getCorrectAnswers(),"" + correctAnswer)) && (studentAnswer == -1 || com.wiris.util.type.Arrays.containsArray(checks[i1].getAnswers(),"" + studentAnswer))) grade = grade * checks[i1].value;
		}
		return grade;
	}
	,andChecks: function(checks) {
		var j;
		var correct = true;
		var _g = 0;
		while(_g < checks.length) {
			var check = checks[_g];
			++_g;
			correct = correct && check.value > 0.999999;
		}
		return correct;
	}
	,getCompoundAnswerChecks: function(correctAnswer,studentAnswer,index,isGraphical) {
		var infix = isGraphical?"_cg":"_c";
		if(this.compoundChecks != null) return this.compoundChecks.get(studentAnswer + infix + index).get(correctAnswer + infix + index); else return null;
	}
	,getAnswerGrade: function(correctAnswer,studentAnswer,q) {
		var grade = 0.0;
		var question = q != null?q.getImpl():null;
		if(question != null && question.isCompoundAnswer()) {
			var distributionProperty = null;
			var distribute = false;
			if(question.isQuestionCompoundAnswer() && question.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE) == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTE) {
				distributionProperty = question.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE_DISTRIBUTION);
				distribute = true;
			} else {
				var slots = question.slots;
				var _g = 0;
				while(_g < slots.length) {
					var s = slots[_g];
					++_g;
					if(studentAnswer == Std.parseInt(s.id) && s.isSlotCompoundAnswer() && s.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE) == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTE) {
						distributionProperty = s.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE_DISTRIBUTION);
						distribute = true;
						break;
					}
				}
			}
			if(distribute) {
				var distribution = this.getCompoundGradeDistribution(distributionProperty);
				var _g1 = 0, _g = distribution.length - 1;
				while(_g1 < _g) {
					var i = _g1++;
					grade += distribution[i] * this.getCompoundAnswerGrade(correctAnswer,studentAnswer,i,q);
				}
				return grade / distribution[distribution.length - 1];
			}
		} else if(question != null && question.getAssertionIndex(com.wiris.quizzes.impl.Assertion.EQUIVALENT_FUNCTION,"" + correctAnswer,"" + studentAnswer) != -1) {
			var checks = this.checks.get(studentAnswer + "");
			return this.prodChecks(checks,correctAnswer,studentAnswer);
		}
		return this.isAnswerMatching(correctAnswer,studentAnswer)?1.0:0.0;
	}
	,areAllAnswersCorrect: function() {
		if(this.checks != null) {
			var it = this.checks.keys();
			while(it.hasNext()) {
				var key = it.next();
				var checks = this.checks.get(key);
				if(!this.andChecks(checks)) return false;
			}
		}
		return true;
	}
	,isAnswerCorrect: function(answer) {
		var correct = true;
		if(this.checks != null && this.checks.exists(answer + "")) {
			var checks = this.checks.get(answer + "");
			correct = this.andChecks(checks);
		}
		return correct;
	}
	,getMatchingCorrectAnswer: function(studentAnswer,q) {
		var correctAnswer = -1;
		if(this.checks != null && this.checks.exists(studentAnswer + "")) {
			var checks = this.checks.get(studentAnswer + "");
			var correctAnswers = new Array();
			var i;
			var _g1 = 0, _g = checks.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var ca = checks[i1].getCorrectAnswers();
				var j;
				var _g3 = 0, _g2 = ca.length;
				while(_g3 < _g2) {
					var j1 = _g3++;
					com.wiris.util.type.Arrays.insertSortedSet(correctAnswers,ca[j1]);
				}
			}
			if(correctAnswers.length > 0) {
				correctAnswer = Std.parseInt(correctAnswers[0]);
				var maxgrade = this.getAnswerGrade(correctAnswer,studentAnswer,q);
				var j;
				var _g1 = 1, _g = correctAnswers.length;
				while(_g1 < _g) {
					var j1 = _g1++;
					var thisCorrectAnswer = Std.parseInt(correctAnswers[j1]);
					var grade = this.getAnswerGrade(thisCorrectAnswer,studentAnswer,q);
					if(grade > maxgrade) {
						maxgrade = grade;
						correctAnswer = thisCorrectAnswer;
					}
				}
			}
		}
		return correctAnswer;
	}
	,areAllChecksCorrect: function(slot,authorAnswer) {
		var slotIndex = Std.parseInt(slot.id);
		var authorAnswerIndex = Std.parseInt(authorAnswer.id);
		return this.isAnswerMatching(authorAnswerIndex,slotIndex);
	}
	,isAnswerMatching: function(correctAnswer,answer) {
		var correct = true;
		if(this.checks != null && this.checks.exists(answer + "")) {
			var checks = this.checks.get(answer + "");
			var i;
			var _g1 = 0, _g = checks.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var c = checks[i1];
				if(!(StringTools.startsWith(c.getAssertionName(),"syntax") && (c.getAnswers().length > 1 || c.getCorrectAnswers().length > 1))) {
					if(Std.parseInt(c.getCorrectAnswer()) == correctAnswer) correct = correct && c.value > 0.999;
				}
			}
		}
		return correct;
	}
	,isCacheReady: function() {
		return this.areVariablesReady();
	}
	,hasEvaluation: function() {
		return this.checks != null && this.checks.keys().hasNext();
	}
	,hasVariables: function() {
		return this.variables != null && this.variables.keys().hasNext();
	}
	,clearChecks: function() {
		this.checks = null;
		this.compoundChecks = null;
	}
	,clearVariables: function() {
		this.variables = null;
	}
	,getBase64Code: function() {
		if(com.wiris.quizzes.impl.QuestionInstanceImpl.base64 == null) com.wiris.quizzes.impl.QuestionInstanceImpl.base64 = new com.wiris.quizzes.impl.Base64();
		return com.wiris.quizzes.impl.QuestionInstanceImpl.base64;
	}
	,storeImageVariable: function(v) {
		var filename;
		if(com.wiris.settings.PlatformSettings.IS_JAVASCRIPT) {
			filename = haxe.Md5.encode(v.content) + ".b64";
			var s = com.wiris.system.Storage.newStorage(filename);
			if(!s.exists()) s.write(v.content);
			if(!s.exists()) return v;
		} else {
			var base64 = this.getBase64Code();
			var value = StringTools.replace(v.content,"=","");
			var b = base64.decodeBytes(haxe.io.Bytes.ofString(value));
			filename = haxe.Md5.encode(value) + ".png";
			var cache = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getImagesCache();
			cache.set(filename,b);
		}
		var w = new com.wiris.quizzes.impl.Variable();
		w.type = com.wiris.quizzes.impl.MathContent.TYPE_IMAGE_REF;
		w.content = filename;
		w.name = v.name;
		return w;
	}
	,isCompoundAnswer: function() {
		return this.compoundChecks != null;
	}
	,isCompoundAnswerSingleCheck: function(check) {
		var id = check.getCorrectAnswer();
		if(id == null) return false;
		if(id.indexOf("c") > -1) return true;
		var index = Std.parseInt(id);
		return index >= 1000;
	}
	,isCompoundAnswerChecks: function(checks) {
		if(checks != null && checks.length > 0) {
			var _g = 0;
			while(_g < checks.length) {
				var check = checks[_g];
				++_g;
				if(this.isCompoundAnswerSingleCheck(check)) return true;
			}
		}
		return false;
	}
	,collapseCompoundAnswerChecks: function(checks) {
		this.compoundChecks = new Hash();
		var _g = 0;
		while(_g < checks.length) {
			var c = checks[_g];
			++_g;
			if(!this.isCompoundAnswerSingleCheck(c)) continue;
			var correctAnswers = c.getCorrectAnswers();
			var answers = c.getAnswers();
			var pairs = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getPairings(c.getCorrectAnswers().length,c.getAnswers().length);
			var j;
			var _g2 = 0, _g1 = pairs.length;
			while(_g2 < _g1) {
				var j1 = _g2++;
				var pair = pairs[j1];
				var correctAnswer = this.updateCompoundId(correctAnswers[pair[0]]);
				var userAnswer = this.updateCompoundId(answers[pair[1]]);
				if(!this.compoundChecks.exists(userAnswer)) this.compoundChecks.set(userAnswer,new Hash());
				var answerChecks = this.compoundChecks.get(userAnswer);
				if(!answerChecks.exists(correctAnswer)) answerChecks.set(correctAnswer,new Array());
				var pairchecks = answerChecks.get(correctAnswer);
				pairchecks.push(c);
			}
			var idAnswer = c.getAnswer();
			if(idAnswer.indexOf("_c") > 0) c.setAnswer(HxOverrides.substr(idAnswer,0,idAnswer.indexOf("_c"))); else {
				var numAnswer = Std.parseInt(idAnswer);
				if(numAnswer < 1000) c.setAnswer(idAnswer); else {
					numAnswer = Math.floor((numAnswer - 1000) / 1000.0);
					c.setAnswer("" + numAnswer);
				}
			}
			var correctAnswerId = c.getCorrectAnswer();
			if(correctAnswerId.indexOf("_c") > 0) c.setCorrectAnswer(HxOverrides.substr(correctAnswerId,0,correctAnswerId.indexOf("_c"))); else {
				var numCA = Std.parseInt(correctAnswerId);
				if(numCA < 1000) c.setCorrectAnswer(correctAnswerId); else {
					numCA = Math.floor((numCA - 1000) / 1000.0);
					c.setCorrectAnswer("" + numCA);
				}
			}
		}
	}
	,compare: function(a,b) {
		return Std.parseInt(a.get("ordinal")) > Std.parseInt(b.get("ordinal"))?1:-1;
	}
	,parseCompoundGraphicalAssertionChecks: function(checks) {
		var parsedChecks = new Array();
		var assertionsInfo = new Hash();
		var _g = 0;
		while(_g < checks.length) {
			var c = checks[_g];
			++_g;
			if(c.getCorrectAnswer().indexOf("cg") == -1) {
				parsedChecks.push(c);
				continue;
			}
			var strs = c.getCorrectAnswer().split("_");
			var correctAnswer = strs[0];
			var elemCount = HxOverrides.substr(strs[1],2,null);
			var elemIdParts = new Array();
			var _g2 = 2, _g1 = strs.length;
			while(_g2 < _g1) {
				var i = _g2++;
				elemIdParts.push(strs[i]);
			}
			var elemId = elemIdParts.join("_");
			var answer = c.getAnswer();
			if(!assertionsInfo.exists(c.assertion + "_" + correctAnswer + "_" + answer)) assertionsInfo.set(c.assertion + "_" + correctAnswer + "_" + answer,new Array());
			var piece = new Hash();
			piece.set("elemId",elemId);
			piece.set("ordinal",elemCount);
			piece.set("grade",c.value + "");
			piece.set("correctAnswer",correctAnswer);
			piece.set("answer",answer);
			assertionsInfo.get(c.assertion + "_" + correctAnswer + "_" + answer).push(piece);
		}
		var it = assertionsInfo.keys();
		while(it.hasNext()) {
			var assertion = it.next();
			var pieces = assertionsInfo.get(assertion);
			var correctAnswer = pieces[0].get("correctAnswer");
			var answer = pieces[0].get("answer");
			com.wiris.util.type.Arrays.sort(pieces,this);
			var grade_prev = 0.0;
			var _g1 = 0, _g = pieces.length;
			while(_g1 < _g) {
				var i = _g1++;
				var piece = pieces[i];
				var grade = Std.parseFloat(piece.get("grade"));
				var elemId = piece.get("elemId");
				var c = new com.wiris.quizzes.impl.AssertionCheckImpl();
				c.assertion = assertion;
				c.value = grade > 0.99 || grade > grade_prev?1:0;
				c.setAnswer(answer + "_cg" + elemId);
				c.setCorrectAnswer(correctAnswer + "_cg" + elemId);
				grade_prev = grade;
				parsedChecks.push(c);
			}
			var cc = new com.wiris.quizzes.impl.AssertionCheckImpl();
			cc.assertion = assertion;
			cc.value = grade_prev > 0.99?1:0;
			cc.setAnswer(answer);
			cc.setCorrectAnswer(correctAnswer);
			parsedChecks.push(cc);
		}
		return parsedChecks;
	}
	,isCompoundGraphicalAnswerChecks: function(checks) {
		if(checks != null) {
			var _g = 0;
			while(_g < checks.length) {
				var check = checks[_g];
				++_g;
				if(check.getCorrectAnswer().indexOf("cg") == -1) return true;
			}
		}
		return false;
	}
	,updateCompoundId: function(id) {
		if(id.indexOf("_c") > -1) return id;
		var num = Std.parseInt(id);
		if(num < 1000) return id;
		var index = Math.floor((num - 1000) / 1000.0);
		var compoundIndex = num % 1000;
		return index + "_c" + compoundIndex;
	}
	,hasHandwritingConstraints: function() {
		return this.handConstraints != null || this.getLocalDataImpl(com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_HANDWRITING_CONSTRAINTS) != null || this.question != null;
	}
	,update: function(response) {
		var questionResponseImpl = response;
		if(questionResponseImpl != null && questionResponseImpl.results != null) {
			var variables = false;
			var checks = false;
			var i;
			var _g1 = 0, _g = questionResponseImpl.results.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var result = questionResponseImpl.results[i1];
				var s = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getSerializer();
				var tag = s.getTagName(result);
				var j;
				if(tag == com.wiris.quizzes.impl.ResultGetVariables.tagName) {
					variables = true;
					var variablesResult = result;
					var resultVars = variablesResult.variables;
					var _g3 = 0, _g2 = resultVars.length;
					while(_g3 < _g2) {
						var j1 = _g3++;
						var variable = resultVars[j1];
						if(variable.type == com.wiris.quizzes.impl.MathContent.TYPE_IMAGE) resultVars[j1] = this.storeImageVariable(variable);
					}
					this.variables = this.variablesToHash(variablesResult.variables,this.variables);
				} else if(tag == com.wiris.quizzes.impl.ResultGetCheckAssertions.tagName) {
					if(!checks) {
						checks = true;
						this.checks = null;
					}
					var assertionsResult = result;
					var resultChecks = assertionsResult.checks;
					if(this.isCompoundGraphicalAnswerChecks(resultChecks)) resultChecks = this.parseCompoundGraphicalAssertionChecks(resultChecks);
					if(this.isCompoundAnswerChecks(resultChecks)) this.collapseCompoundAnswerChecks(resultChecks);
					this.checks = this.checksToHash(resultChecks,this.checks);
				}
			}
			if(variables && this.hasHandwritingConstraints()) this.getHandwritingConstraints().addQuestionInstanceConstraints(this);
		}
	}
	,expandVariablesTextEval: function(text) {
		var h = new com.wiris.quizzes.impl.HTMLTools();
		h.setPlotterLoadingSrc(com.wiris.quizzes.impl.QuizzesImpl.getInstance().getResourceUrl("plotter_loading.png"));
		h.setProxyUrl(com.wiris.quizzes.impl.QuizzesImpl.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL));
		if(this.variables == null || this.variables.get(com.wiris.quizzes.impl.MathContent.TYPE_TEXT_EVAL) == null) return this.expandVariablesText(text); else {
			var newvars = new Hash();
			this.addAllHashElements(this.variables.get(com.wiris.quizzes.impl.MathContent.TYPE_TEXT),newvars);
			this.addAllHashElements(this.variables.get(com.wiris.quizzes.impl.MathContent.TYPE_TEXT_EVAL),newvars);
			return h.expandVariablesText(text,newvars);
		}
	}
	,expandVariablesText: function(text) {
		if(text == null) return null;
		var h = new com.wiris.quizzes.impl.HTMLTools();
		h.setAnswerKeyword(this.getAnswerParameterName());
		h.setPlotterLoadingSrc(com.wiris.quizzes.impl.QuizzesImpl.getInstance().getResourceUrl("plotter_loading.png"));
		h.setProxyUrl(com.wiris.quizzes.impl.QuizzesImpl.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL));
		text = h.extractActionExpressions(text,null);
		if(com.wiris.quizzes.impl.MathContent.getMathType(text) == com.wiris.quizzes.impl.MathContent.TYPE_MATHML) text = h.mathMLToText(text);
		if(this.variables != null && this.variables.get(com.wiris.quizzes.impl.MathContent.TYPE_TEXT) != null) {
			var textvars = this.variables.get(com.wiris.quizzes.impl.MathContent.TYPE_TEXT);
			text = h.expandVariablesText(text,textvars);
		}
		if(this.userData.answers != null) text = h.expandAnswersText(text,this.userData.answers,this.isCompoundAnswer());
		return text;
	}
	,addAllHashElements: function(src,dest) {
		if(src != null) {
			var it = src.keys();
			while(it.hasNext()) {
				var name = it.next();
				dest.set(name,src.get(name));
			}
		}
	}
	,expandVariablesMathMLEval: function(equation) {
		var h = new com.wiris.quizzes.impl.HTMLTools();
		h.setPlotterLoadingSrc(com.wiris.quizzes.impl.QuizzesImpl.getInstance().getResourceUrl("plotter_loading.png"));
		h.setProxyUrl(com.wiris.quizzes.impl.QuizzesImpl.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL));
		if(this.variables == null || this.variables.get(com.wiris.quizzes.impl.MathContent.TYPE_MATHML_EVAL) == null) return this.expandVariablesMathML(equation); else {
			var vars = new Hash();
			var newvars = new Hash();
			vars.set(com.wiris.quizzes.impl.MathContent.TYPE_MATHML,newvars);
			this.addAllHashElements(this.variables.get(com.wiris.quizzes.impl.MathContent.TYPE_MATHML),newvars);
			this.addAllHashElements(this.variables.get(com.wiris.quizzes.impl.MathContent.TYPE_MATHML_EVAL),newvars);
			if(com.wiris.quizzes.impl.MathContent.getMathType(equation) == com.wiris.quizzes.impl.MathContent.TYPE_TEXT) equation = h.textToMathML(equation);
			return h.expandVariables(equation,vars);
		}
	}
	,getAnswerParameterName: function() {
		if(this.question == null || !("true" == this.question.getProperty(com.wiris.quizzes.api.PropertyName.STUDENT_ANSWER_PARAMETER))) return null;
		var keyword = this.question.getProperty(com.wiris.quizzes.api.PropertyName.STUDENT_ANSWER_PARAMETER_NAME);
		if(keyword == this.question.getImpl().defaultOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER_NAME)) {
			var lang = com.wiris.quizzes.impl.CalcDocumentTools.casSessionLang(this.question.getAlgorithm());
			if(lang != null && !(lang == com.wiris.quizzes.impl.QuestionInstanceImpl.DEF_ALGORITHM_LANGUAGE)) keyword = com.wiris.quizzes.impl.QuizzesTranslator.getInstance(lang).t(keyword);
		}
		return keyword;
	}
	,expandVariablesMathML: function(equation) {
		var h = new com.wiris.quizzes.impl.HTMLTools();
		h.setPlotterLoadingSrc(com.wiris.quizzes.impl.QuizzesImpl.getInstance().getResourceUrl("plotter_loading.png"));
		h.setProxyUrl(com.wiris.quizzes.impl.QuizzesImpl.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL));
		equation = h.extractActionExpressions(equation,null);
		if(com.wiris.quizzes.impl.MathContent.getMathType(equation) == com.wiris.quizzes.impl.MathContent.TYPE_TEXT) equation = h.textToMathML(equation);
		h.setAnswerKeyword(this.getAnswerParameterName());
		equation = h.expandVariables(equation,this.variables);
		equation = h.expandAnswers(equation,this.userData.answers,this.isCompoundAnswer());
		return equation;
	}
	,expandVariables: function(text) {
		if(text == null) return null;
		var h = new com.wiris.quizzes.impl.HTMLTools();
		h.setItemSeparator(this.getItemSeparator());
		h.setAnswerKeyword(this.getAnswerParameterName());
		h.setPlotterLoadingSrc(com.wiris.quizzes.impl.QuizzesImpl.getInstance().getResourceUrl("plotter_loading.png"));
		h.setProxyUrl(com.wiris.quizzes.impl.QuizzesImpl.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL));
		text = h.expandVariables(text,this.variables);
		h.setAnswerKeyword(this.getAnswerParameterName());
		text = h.expandAnswers(text,this.userData.answers,this.isCompoundAnswer());
		return text;
	}
	,getItemSeparator: function() {
		if(this.question != null) {
			var itemSeparator = this.question.getImpl().getItemSeparator();
			if(itemSeparator != null) return itemSeparator;
		}
		return ",";
	}
	,defaultLocalData: function(name) {
		return null;
	}
	,getLocalDataImpl: function(name) {
		if(this.localData != null) {
			var i;
			var _g1 = 0, _g = this.localData.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				if(this.localData[i1].name == name) return this.localData[i1].value;
			}
		}
		return this.defaultLocalData(name);
	}
	,getProperty: function(name) {
		var pname = com.wiris.quizzes.impl.QuizzesEnumUtils.propertyName2String(name);
		return pname != null?this.getLocalData(pname):null;
	}
	,setProperty: function(name,value) {
		var pname = com.wiris.quizzes.impl.QuizzesEnumUtils.propertyName2String(name);
		if(name != null) this.setLocalData(pname,value);
	}
	,getLocalData: function(name) {
		if(name == com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_HANDWRITING_CONSTRAINTS) {
			if(this.hasHandwritingConstraints()) return this.getHandwritingConstraints().getNegativeConstraints().toJSON(); else return null;
		}
		return this.getLocalDataImpl(name);
	}
	,setLocalDataImpl: function(name,value,parseHandwritingConstraints) {
		if(this.localData == null) this.localData = new Array();
		var data = new com.wiris.quizzes.impl.LocalData();
		data.name = name;
		data.value = value;
		var i;
		var found = false;
		var _g1 = 0, _g = this.localData.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(this.localData[i1].name == name) {
				this.localData[i1] = data;
				found = true;
			}
		}
		if(!found) this.localData.push(data);
		if(parseHandwritingConstraints && name == com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_HANDWRITING_CONSTRAINTS) this.handConstraints = com.wiris.quizzes.impl.HandwritingConstraints.readHandwritingConstraints(value);
	}
	,setLocalData: function(name,value) {
		this.setLocalDataImpl(name,value,true);
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.QuestionInstanceImpl();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.QuestionInstanceImpl.tagName);
		this.userData = s.serializeChildName(this.userData,com.wiris.quizzes.impl.UserData.TAGNAME);
		this.setChecksCompoundAnswers();
		var a = s.serializeArrayName(this.hashToChecks(this.checks),"checks");
		if(this.isCompoundAnswerChecks(a)) this.collapseCompoundAnswerChecks(a);
		this.checks = this.checksToHash(a,null);
		this.variables = this.variablesToHash(s.serializeArrayName(this.hashToVariables(this.variables,null),"variables"),null);
		this.serializeHandConstraints();
		this.localData = s.serializeArrayName(this.localData,"localData");
		s.endTag();
	}
	,handConstraints: null
	,question: null
	,compoundChecks: null
	,localData: null
	,checks: null
	,variables: null
	,userData: null
	,__class__: com.wiris.quizzes.impl.QuestionInstanceImpl
});
com.wiris.quizzes.impl.QuestionLazy = $hxClasses["com.wiris.quizzes.impl.QuestionLazy"] = function(xml) {
	com.wiris.quizzes.impl.QuestionInternal.call(this);
	var s = xml.indexOf("<question");
	if(s > 0) xml = HxOverrides.substr(xml,s,null);
	s = xml.lastIndexOf(">");
	if(s < xml.length - 1) xml = HxOverrides.substr(xml,0,s);
	s = xml.indexOf(">") + 1;
	var tag = HxOverrides.substr(xml,0,s);
	xml = HxOverrides.substr(xml,s,null);
	s = xml.lastIndexOf("<");
	if(s != -1) xml = HxOverrides.substr(xml,0,s);
	this.xml = xml;
	if(StringTools.startsWith(tag,"<question id")) {
		s = tag.indexOf("\"") + 1;
		var e = tag.indexOf("\"",s);
		this.id = HxOverrides.substr(tag,s,e - s);
	}
};
com.wiris.quizzes.impl.QuestionLazy.__name__ = ["com","wiris","quizzes","impl","QuestionLazy"];
com.wiris.quizzes.impl.QuestionLazy.__super__ = com.wiris.quizzes.impl.QuestionInternal;
com.wiris.quizzes.impl.QuestionLazy.prototype = $extend(com.wiris.quizzes.impl.QuestionInternal.prototype,{
	getDeprecationWarnings: function() {
		return this.getImpl().getDeprecationWarnings();
	}
	,addNewSlotFromModel: function(slot) {
		return this.getImpl().addNewSlotFromModel(slot);
	}
	,removeSlot: function(slot) {
		this.getImpl().removeSlot(slot);
	}
	,addNewSlot: function() {
		return this.getImpl().addNewSlot();
	}
	,getSlots: function() {
		return this.getImpl().getSlots();
	}
	,getImpl: function() {
		if(this.question == null) {
			var s = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getSerializer();
			var elem = s.read("<question>" + this.xml + "</question>");
			var tag = s.getTagName(elem);
			if(!(tag == "question")) throw "Unexpected root tag " + tag + ". Expected question.";
			this.question = elem;
			this.question.id = this.id;
			this.question.updateSlots();
		}
		return this.question;
	}
	,onSerialize: function(s) {
		if(this.question != null) this.question.onSerialize(s); else {
			s.beginTag("question");
			s.cacheAttribute("id",this.id,null);
			this.xml = s.rawXml(this.xml);
			s.endTag();
		}
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.QuestionImpl();
	}
	,setId: function(id) {
		if(this.question != null) this.question.setId(id); else this.id = id;
	}
	,hasId: function() {
		if(this.question != null) return this.question.hasId(); else return this.id != null;
	}
	,getProperty: function(name) {
		return this.getImpl().getProperty(name);
	}
	,setProperty: function(name,value) {
		this.getImpl().setProperty(name,value);
	}
	,getAlgorithm: function() {
		return this.getImpl().getAlgorithm();
	}
	,setAlgorithm: function(session) {
		this.getImpl().setAlgorithm(session);
	}
	,getCorrectAnswer: function(index) {
		return this.getImpl().getCorrectAnswer(index);
	}
	,getCorrectAnswersLength: function() {
		return this.getImpl().getCorrectAnswersLength();
	}
	,setCorrectAnswer: function(index,answer) {
		this.getImpl().setCorrectAnswer(index,answer);
	}
	,getAnswerFieldType: function() {
		return this.getImpl().getAnswerFieldType();
	}
	,setAnswerFieldType: function(type) {
		this.getImpl().setAnswerFieldType(type);
	}
	,setOption: function(name,value) {
		this.getImpl().setOption(name,value);
	}
	,addAssertion: function(name,correctAnswer,studentAnswer,parameters) {
		this.getImpl().addAssertion(name,correctAnswer,studentAnswer,parameters);
	}
	,getStudentQuestion: function() {
		return this.getImpl().getStudentQuestion();
	}
	,question: null
	,id: null
	,xml: null
	,__class__: com.wiris.quizzes.impl.QuestionLazy
});
com.wiris.quizzes.impl.QuestionRequestImpl = $hxClasses["com.wiris.quizzes.impl.QuestionRequestImpl"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
};
com.wiris.quizzes.impl.QuestionRequestImpl.__name__ = ["com","wiris","quizzes","impl","QuestionRequestImpl"];
com.wiris.quizzes.impl.QuestionRequestImpl.__interfaces__ = [com.wiris.quizzes.api.QuestionRequest];
com.wiris.quizzes.impl.QuestionRequestImpl.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.QuestionRequestImpl.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	isEmpty: function() {
		return this.processes == null || this.processes.length == 0;
	}
	,addMetaProperty: function(name,value) {
		if(this.meta == null) this.meta = new Array();
		var p = new com.wiris.quizzes.impl.Property();
		p.name = name;
		p.value = value;
		this.meta.push(p);
	}
	,addProcess: function(p) {
		if(this.processes == null) this.processes = new Array();
		if(js.Boot.__instanceof(p,com.wiris.quizzes.impl.ProcessGetVariables)) this.processes.splice(0,0,p); else this.processes.push(p);
	}
	,variables: function(names,type) {
		var p = new com.wiris.quizzes.impl.ProcessGetVariables();
		var sb = new StringBuf();
		var i;
		var _g1 = 0, _g = names.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(i1 != 0) sb.b += Std.string(",");
			sb.b += Std.string(names[i1]);
		}
		p.names = sb.b;
		p.type = type;
		this.addProcess(p);
	}
	,checkAssertions: function() {
		var p = new com.wiris.quizzes.impl.ProcessGetCheckAssertions();
		this.addProcess(p);
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.QuestionRequestImpl();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.QuestionRequestImpl.tagName);
		this.question = s.serializeChildName(this.question,com.wiris.quizzes.impl.QuestionImpl.TAGNAME);
		this.userData = s.serializeChildName(this.userData,com.wiris.quizzes.impl.UserData.TAGNAME);
		this.processes = s.serializeArrayName(this.processes,"processes");
		this.meta = s.serializeArrayName(this.meta,"meta");
		s.endTag();
	}
	,meta: null
	,processes: null
	,userData: null
	,question: null
	,__class__: com.wiris.quizzes.impl.QuestionRequestImpl
});
com.wiris.quizzes.impl.QuestionResponseImpl = $hxClasses["com.wiris.quizzes.impl.QuestionResponseImpl"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
};
com.wiris.quizzes.impl.QuestionResponseImpl.__name__ = ["com","wiris","quizzes","impl","QuestionResponseImpl"];
com.wiris.quizzes.impl.QuestionResponseImpl.__interfaces__ = [com.wiris.quizzes.api.QuestionResponse];
com.wiris.quizzes.impl.QuestionResponseImpl.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.QuestionResponseImpl.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.QuestionResponseImpl();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.QuestionResponseImpl.tagName);
		this.results = s.serializeArray(this.results,null);
		s.endTag();
	}
	,results: null
	,__class__: com.wiris.quizzes.impl.QuestionResponseImpl
});
com.wiris.quizzes.impl.QuizzesEnumUtils = $hxClasses["com.wiris.quizzes.impl.QuizzesEnumUtils"] = function() {
};
com.wiris.quizzes.impl.QuizzesEnumUtils.__name__ = ["com","wiris","quizzes","impl","QuizzesEnumUtils"];
com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxNames = null;
com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames = null;
com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxName2String = function(name) {
	return com.wiris.util.type.HashUtils.getKey(name,com.wiris.quizzes.impl.QuizzesEnumUtils.getSyntaxNamesHash());
}
com.wiris.quizzes.impl.QuizzesEnumUtils.string2SyntaxName = function(name) {
	return com.wiris.quizzes.impl.QuizzesEnumUtils.getSyntaxNamesHash().get(name);
}
com.wiris.quizzes.impl.QuizzesEnumUtils.getSyntaxNamesHash = function() {
	if(com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxNames == null) {
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxNames = new Hash();
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxNames.set(com.wiris.quizzes.impl.Assertion.SYNTAX_MATH,com.wiris.quizzes.api.assertion.SyntaxName.MATH);
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxNames.set(com.wiris.quizzes.impl.Assertion.SYNTAX_GRAPHIC,com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC);
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxNames.set(com.wiris.quizzes.impl.Assertion.SYNTAX_STRING,com.wiris.quizzes.api.assertion.SyntaxName.STRING);
	}
	return com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxNames;
}
com.wiris.quizzes.impl.QuizzesEnumUtils.getSyntaxParameterNamesHash = function() {
	if(com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames == null) {
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames = new Hash();
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_CONSTANTS,com.wiris.quizzes.api.assertion.SyntaxParameterName.CONSTANTS);
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_FUNCTIONS,com.wiris.quizzes.api.assertion.SyntaxParameterName.FUNCTIONS);
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_GROUP_OPERATORS,com.wiris.quizzes.api.assertion.SyntaxParameterName.GROUP_OPERATORS);
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_LIST_OPERATORS,com.wiris.quizzes.api.assertion.SyntaxParameterName.LIST_OPERATORS);
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_UNITS,com.wiris.quizzes.api.assertion.SyntaxParameterName.UNITS);
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_UNIT_PREFIXES,com.wiris.quizzes.api.assertion.SyntaxParameterName.UNIT_PREFIXES);
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_MIXED_FRACTIONS,com.wiris.quizzes.api.assertion.SyntaxParameterName.MIXED_FRACTIONS);
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_ITEM_SEPARATORS,com.wiris.quizzes.api.assertion.SyntaxParameterName.ITEM_SEPARATORS);
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_DECIMAL_SEPARATORS,com.wiris.quizzes.api.assertion.SyntaxParameterName.DECIMAL_SEPARATORS);
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_DIGIT_GROUP_SEPARATORS,com.wiris.quizzes.api.assertion.SyntaxParameterName.DIGIT_GROUP_SEPARATORS);
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_NO_BRACKETS_LIST,com.wiris.quizzes.api.assertion.SyntaxParameterName.NO_BRACKETS_LIST);
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_INTERVALS,com.wiris.quizzes.api.assertion.SyntaxParameterName.INTERVALS);
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_RATIO,com.wiris.quizzes.api.assertion.SyntaxParameterName.RATIO);
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_SCIENTIFIC_NOTATION,com.wiris.quizzes.api.assertion.SyntaxParameterName.SCIENTIFIC_NOTATION);
		com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_GRAPH_MODE,com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE);
	}
	return com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterNames;
}
com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterName2String = function(name) {
	var h = com.wiris.quizzes.impl.QuizzesEnumUtils.getSyntaxParameterNamesHash();
	return com.wiris.util.type.HashUtils.getKey(name,h);
}
com.wiris.quizzes.impl.QuizzesEnumUtils.string2SyntaxParameterName = function(name) {
	return com.wiris.quizzes.impl.QuizzesEnumUtils.getSyntaxParameterNamesHash().get(name);
}
com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonNames = null;
com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterNames = null;
com.wiris.quizzes.impl.QuizzesEnumUtils.getComparisonNamesHash = function() {
	if(com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonNames == null) {
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonNames = new Hash();
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonNames.set(com.wiris.quizzes.impl.Assertion.EQUIVALENT_SYMBOLIC,com.wiris.quizzes.api.assertion.ComparisonName.MATHEMATICALLY_EQUAL);
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonNames.set(com.wiris.quizzes.impl.Assertion.EQUIVALENT_LITERAL,com.wiris.quizzes.api.assertion.ComparisonName.LITERALLY_EQUAL);
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonNames.set(com.wiris.quizzes.impl.Assertion.EQUIVALENT_EQUATIONS,com.wiris.quizzes.api.assertion.ComparisonName.EQUIVALENT_EQUATIONS);
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonNames.set(com.wiris.quizzes.impl.Assertion.EQUIVALENT_ALL,com.wiris.quizzes.api.assertion.ComparisonName.ANY_ANSWER);
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonNames.set(com.wiris.quizzes.impl.Assertion.EQUIVALENT_FUNCTION,com.wiris.quizzes.api.assertion.ComparisonName.GRADING_FUNCTION);
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonNames.set(com.wiris.quizzes.impl.Assertion.EQUIVALENT_GRAPHIC,com.wiris.quizzes.api.assertion.ComparisonName.GRAPHICALLY_EQUAL);
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonNames.set(com.wiris.quizzes.impl.Assertion.EQUIVALENT_SKETCH,com.wiris.quizzes.api.assertion.ComparisonName.SKETCH_EQUAL);
	}
	return com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonNames;
}
com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonName2String = function(name) {
	return com.wiris.util.type.HashUtils.getKey(name,com.wiris.quizzes.impl.QuizzesEnumUtils.getComparisonNamesHash());
}
com.wiris.quizzes.impl.QuizzesEnumUtils.string2ComparisonName = function(name) {
	return com.wiris.quizzes.impl.QuizzesEnumUtils.getComparisonNamesHash().get(name);
}
com.wiris.quizzes.impl.QuizzesEnumUtils.getComparisonParameterNamesHash = function() {
	if(com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterNames == null) {
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterNames = new Hash();
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_ORDER_MATTERS,com.wiris.quizzes.api.assertion.ComparisonParameterName.ORDER_MATTERS);
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_REPETITION_MATTERS,com.wiris.quizzes.api.assertion.ComparisonParameterName.REPETITION_MATTERS);
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE,com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE);
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE_DIGITS,com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE_DIGITS);
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_RELATIVE_TOLERANCE,com.wiris.quizzes.api.assertion.ComparisonParameterName.RELATIVE_TOLERANCE);
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_NAME,com.wiris.quizzes.api.assertion.ComparisonParameterName.FUNCTION_NAME);
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_USE_CASE,com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_CASES);
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_USE_SPACES,com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_SPACES);
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_ELEMENTS_TO_GRADE,com.wiris.quizzes.api.assertion.ComparisonParameterName.ELEMENTS_TO_GRADE);
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_NOT_EVALUATE,com.wiris.quizzes.api.assertion.ComparisonParameterName.NOT_EVALUATE);
		com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_FUNCTION_ARGUMENT_MODE,com.wiris.quizzes.api.assertion.ComparisonParameterName.FUNCTION_ARGUMENT_MODE);
	}
	return com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterNames;
}
com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonParameterName2String = function(name) {
	return com.wiris.util.type.HashUtils.getKey(name,com.wiris.quizzes.impl.QuizzesEnumUtils.getComparisonParameterNamesHash());
}
com.wiris.quizzes.impl.QuizzesEnumUtils.string2ComparisonParameterName = function(name) {
	return com.wiris.quizzes.impl.QuizzesEnumUtils.getComparisonParameterNamesHash().get(name);
}
com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames = null;
com.wiris.quizzes.impl.QuizzesEnumUtils.validationParameterNames = null;
com.wiris.quizzes.impl.QuizzesEnumUtils.getValidationNamesHash = function() {
	if(com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames == null) {
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames = new Hash();
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames.set(com.wiris.quizzes.impl.Assertion.CHECK_SYMBOLIC,com.wiris.quizzes.api.assertion.ValidationName.CHECK_SYMBOLIC);
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames.set(com.wiris.quizzes.impl.Assertion.CHECK_SCIENTIFIC_NOTATION,com.wiris.quizzes.api.assertion.ValidationName.CHECK_SCIENTIFIC_NOTATION);
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames.set(com.wiris.quizzes.impl.Assertion.CHECK_DECIMAL_NOTATION,com.wiris.quizzes.api.assertion.ValidationName.CHECK_DECIMAL_NOTATION);
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames.set(com.wiris.quizzes.impl.Assertion.CHECK_SIMPLIFIED,com.wiris.quizzes.api.assertion.ValidationName.CHECK_SIMPLIFIED);
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames.set(com.wiris.quizzes.impl.Assertion.CHECK_EXPANDED,com.wiris.quizzes.api.assertion.ValidationName.CHECK_EXPANDED);
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames.set(com.wiris.quizzes.impl.Assertion.CHECK_FACTORIZED,com.wiris.quizzes.api.assertion.ValidationName.CHECK_FACTORIZED);
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames.set(com.wiris.quizzes.impl.Assertion.CHECK_NO_COMMON_FACTOR,com.wiris.quizzes.api.assertion.ValidationName.CHECK_NO_COMMON_FACTOR);
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames.set(com.wiris.quizzes.impl.Assertion.CHECK_COMMON_DENOMINATOR,com.wiris.quizzes.api.assertion.ValidationName.CHECK_COMMON_DENOMINATOR);
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames.set(com.wiris.quizzes.impl.Assertion.CHECK_RATIONALIZED,com.wiris.quizzes.api.assertion.ValidationName.CHECK_RATIONALIZED);
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames.set(com.wiris.quizzes.impl.Assertion.CHECK_MINIMAL_RADICANDS,com.wiris.quizzes.api.assertion.ValidationName.CHECK_MINIMAL_RADICANDS);
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames.set(com.wiris.quizzes.impl.Assertion.CHECK_EQUIVALENT_UNITS,com.wiris.quizzes.api.assertion.ValidationName.CHECK_EQUIVALENT_UNITS);
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames.set(com.wiris.quizzes.impl.Assertion.CHECK_PRECISION,com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION);
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames.set(com.wiris.quizzes.impl.Assertion.CHECK_COLOR,com.wiris.quizzes.api.assertion.ValidationName.CHECK_COLOR);
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames.set(com.wiris.quizzes.impl.Assertion.CHECK_LINESTYLE,com.wiris.quizzes.api.assertion.ValidationName.CHECK_LINE_STYLE);
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames.set(com.wiris.quizzes.impl.Assertion.CHECK_NO_SUPERFLUOUS,com.wiris.quizzes.api.assertion.ValidationName.CHECK_NO_SUPERFLUOUS);
	}
	return com.wiris.quizzes.impl.QuizzesEnumUtils.validationNames;
}
com.wiris.quizzes.impl.QuizzesEnumUtils.validationName2String = function(name) {
	return com.wiris.util.type.HashUtils.getKey(name,com.wiris.quizzes.impl.QuizzesEnumUtils.getValidationNamesHash());
}
com.wiris.quizzes.impl.QuizzesEnumUtils.string2ValidationName = function(name) {
	return com.wiris.quizzes.impl.QuizzesEnumUtils.getValidationNamesHash().get(name);
}
com.wiris.quizzes.impl.QuizzesEnumUtils.getValidationParameterNamesHash = function() {
	if(com.wiris.quizzes.impl.QuizzesEnumUtils.validationParameterNames == null) {
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationParameterNames = new Hash();
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_MAX,com.wiris.quizzes.api.assertion.ValidationParameterName.MAX);
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_MIN,com.wiris.quizzes.api.assertion.ValidationParameterName.MIN);
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_RELATIVE,com.wiris.quizzes.api.assertion.ValidationParameterName.RELATIVE);
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_ALLOW_PREFIXES,com.wiris.quizzes.api.assertion.ValidationParameterName.ALLOW_PREFIXES);
		com.wiris.quizzes.impl.QuizzesEnumUtils.validationParameterNames.set(com.wiris.quizzes.impl.Assertion.PARAM_ELEMENTS_TO_GRADE,com.wiris.quizzes.api.assertion.ValidationParameterName.ELEMENTS_TO_GRADE);
	}
	return com.wiris.quizzes.impl.QuizzesEnumUtils.validationParameterNames;
}
com.wiris.quizzes.impl.QuizzesEnumUtils.validationParameterName2String = function(name) {
	return com.wiris.util.type.HashUtils.getKey(name,com.wiris.quizzes.impl.QuizzesEnumUtils.getValidationParameterNamesHash());
}
com.wiris.quizzes.impl.QuizzesEnumUtils.string2ValidationParameterName = function(name) {
	return com.wiris.quizzes.impl.QuizzesEnumUtils.getValidationParameterNamesHash().get(name);
}
com.wiris.quizzes.impl.QuizzesEnumUtils.answerFieldTypes = null;
com.wiris.quizzes.impl.QuizzesEnumUtils.getAnswerFieldTypes = function() {
	if(com.wiris.quizzes.impl.QuizzesEnumUtils.answerFieldTypes == null) {
		com.wiris.quizzes.impl.QuizzesEnumUtils.answerFieldTypes = new Hash();
		com.wiris.quizzes.impl.QuizzesEnumUtils.answerFieldTypes.set(com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_INPUT_FIELD_INLINE_EDITOR,com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR);
		com.wiris.quizzes.impl.QuizzesEnumUtils.answerFieldTypes.set(com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_INPUT_FIELD_INLINE_HAND,com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR);
		com.wiris.quizzes.impl.QuizzesEnumUtils.answerFieldTypes.set(com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_INPUT_FIELD_POPUP_EDITOR,com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR);
		com.wiris.quizzes.impl.QuizzesEnumUtils.answerFieldTypes.set(com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_INPUT_FIELD_PLAIN_TEXT,com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD);
		com.wiris.quizzes.impl.QuizzesEnumUtils.answerFieldTypes.set(com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_INPUT_FIELD_INLINE_GRAPH,com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR);
	}
	return com.wiris.quizzes.impl.QuizzesEnumUtils.answerFieldTypes;
}
com.wiris.quizzes.impl.QuizzesEnumUtils.string2answerFieldType = function(a) {
	return com.wiris.quizzes.impl.QuizzesEnumUtils.getAnswerFieldTypes().get(a);
}
com.wiris.quizzes.impl.QuizzesEnumUtils.answerFieldType2String = function(a) {
	return com.wiris.util.type.HashUtils.getKey(a,com.wiris.quizzes.impl.QuizzesEnumUtils.getAnswerFieldTypes());
}
com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames = null;
com.wiris.quizzes.impl.QuizzesEnumUtils.getPropertyNames = function() {
	if(com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames == null) {
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames = new Hash();
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER,com.wiris.quizzes.api.PropertyName.STUDENT_ANSWER_PARAMETER);
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER_NAME,com.wiris.quizzes.api.PropertyName.STUDENT_ANSWER_PARAMETER_NAME);
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.api.QuizzesConstants.PROPERTY_ANSWER_FIELD_TYPE,com.wiris.quizzes.api.PropertyName.ANSWER_FIELD_TYPE);
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.api.QuizzesConstants.PROPERTY_COMPOUND_ANSWER,com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER);
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.api.QuizzesConstants.PROPERTY_COMPOUND_ANSWER_GRADE,com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE);
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.api.QuizzesConstants.PROPERTY_COMPOUND_ANSWER_GRADE_DISTRIBUTION,com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE_DISTRIBUTION);
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.api.QuizzesConstants.PROPERTY_SHOW_CAS,com.wiris.quizzes.api.PropertyName.SHOW_CAS);
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.api.QuizzesConstants.PROPERTY_CAS_SESSION,com.wiris.quizzes.api.PropertyName.CAS_SESSION);
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.api.QuizzesConstants.PROPERTY_SHOW_AUXILIARY_TEXT_INPUT,com.wiris.quizzes.api.PropertyName.SHOW_AUXILIARY_TEXT_INPUT);
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.api.QuizzesConstants.PROPERTY_AUXILIARY_TEXT,com.wiris.quizzes.api.PropertyName.AUXILIARY_TEXT);
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.api.QuizzesConstants.PARAMETER_USER_ID,com.wiris.quizzes.api.PropertyName.USER_ID);
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_HANDWRITING_CONSTRAINTS,com.wiris.quizzes.api.PropertyName.HANDWRITING_CONSTRAINTS);
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_GRAPH_TOOLBAR,com.wiris.quizzes.api.PropertyName.GRAPH_TOOLBAR);
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.impl.LocalData.KEY_AUXILIARY_CAS_HIDE_FILE_MENU,com.wiris.quizzes.api.PropertyName.AUXILIARY_CAS_HIDE_FILE_MENU);
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.impl.LocalData.KEY_ELEMENTS_TO_HANDWRITE,com.wiris.quizzes.api.PropertyName.ELEMENTS_TO_HANDWRITE);
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.impl.LocalData.KEY_GRAPH_LOCK_INITIAL_CONTENT,com.wiris.quizzes.api.PropertyName.GRAPH_LOCK_INITIAL_CONTENT);
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.impl.LocalData.KEY_GRAPH_SHOW_NAME_IN_LABEL,com.wiris.quizzes.api.PropertyName.GRAPH_SHOW_NAME_IN_LABEL);
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.impl.LocalData.KEY_GRAPH_SHOW_VALUE_IN_LABEL,com.wiris.quizzes.api.PropertyName.GRAPH_SHOW_VALUE_IN_LABEL);
		com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames.set(com.wiris.quizzes.impl.LocalData.KEY_GRAPH_MAGNETIC_GRID,com.wiris.quizzes.api.PropertyName.GRAPH_MAGNETIC_GRID);
	}
	return com.wiris.quizzes.impl.QuizzesEnumUtils.propertyNames;
}
com.wiris.quizzes.impl.QuizzesEnumUtils.string2PropertyName = function(name) {
	return com.wiris.quizzes.impl.QuizzesEnumUtils.getPropertyNames().get(name);
}
com.wiris.quizzes.impl.QuizzesEnumUtils.propertyName2String = function(name) {
	return com.wiris.util.type.HashUtils.getKey(name,com.wiris.quizzes.impl.QuizzesEnumUtils.getPropertyNames());
}
com.wiris.quizzes.impl.QuizzesEnumUtils.graphModes = null;
com.wiris.quizzes.impl.QuizzesEnumUtils.getGraphModes = function() {
	if(com.wiris.quizzes.impl.QuizzesEnumUtils.graphModes == null) {
		com.wiris.quizzes.impl.QuizzesEnumUtils.graphModes = new Hash();
		com.wiris.quizzes.impl.QuizzesEnumUtils.graphModes.set(com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD,com.wiris.util.geometry.GraphMode.STANDARD);
		com.wiris.quizzes.impl.QuizzesEnumUtils.graphModes.set(com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH,com.wiris.util.geometry.GraphMode.SKETCH);
		com.wiris.quizzes.impl.QuizzesEnumUtils.graphModes.set(com.wiris.quizzes.impl.Assertion.GRAPH_MODE_PIE_CHART,com.wiris.util.geometry.GraphMode.PIE_CHART);
		com.wiris.quizzes.impl.QuizzesEnumUtils.graphModes.set(com.wiris.quizzes.impl.Assertion.GRAPH_MODE_BAR_CHART,com.wiris.util.geometry.GraphMode.BAR_CHART);
		com.wiris.quizzes.impl.QuizzesEnumUtils.graphModes.set(com.wiris.quizzes.impl.Assertion.GRAPH_MODE_LINE_CHART,com.wiris.util.geometry.GraphMode.LINE_CHART);
	}
	return com.wiris.quizzes.impl.QuizzesEnumUtils.graphModes;
}
com.wiris.quizzes.impl.QuizzesEnumUtils.string2GraphMode = function(mode) {
	return com.wiris.quizzes.impl.QuizzesEnumUtils.getGraphModes().get(mode);
}
com.wiris.quizzes.impl.QuizzesEnumUtils.prototype = {
	__class__: com.wiris.quizzes.impl.QuizzesEnumUtils
}
com.wiris.quizzes.impl.QuizzesServiceMultipleListener = $hxClasses["com.wiris.quizzes.impl.QuizzesServiceMultipleListener"] = function() { }
com.wiris.quizzes.impl.QuizzesServiceMultipleListener.__name__ = ["com","wiris","quizzes","impl","QuizzesServiceMultipleListener"];
com.wiris.quizzes.impl.QuizzesServiceMultipleListener.prototype = {
	onResponse: null
	,__class__: com.wiris.quizzes.impl.QuizzesServiceMultipleListener
}
com.wiris.quizzes.impl.QuizzesServiceSingleListener = $hxClasses["com.wiris.quizzes.impl.QuizzesServiceSingleListener"] = function(listener) {
	this.listener = listener;
};
com.wiris.quizzes.impl.QuizzesServiceSingleListener.__name__ = ["com","wiris","quizzes","impl","QuizzesServiceSingleListener"];
com.wiris.quizzes.impl.QuizzesServiceSingleListener.__interfaces__ = [com.wiris.quizzes.impl.QuizzesServiceMultipleListener];
com.wiris.quizzes.impl.QuizzesServiceSingleListener.prototype = {
	onResponse: function(mqs) {
		var qs;
		if(mqs.questionResponses.length == 0) qs = new com.wiris.quizzes.impl.QuestionResponseImpl(); else qs = mqs.questionResponses[0];
		this.listener.onResponse(qs);
	}
	,listener: null
	,__class__: com.wiris.quizzes.impl.QuizzesServiceSingleListener
}
com.wiris.quizzes.impl.QuizzesServiceSyncListener = $hxClasses["com.wiris.quizzes.impl.QuizzesServiceSyncListener"] = function() {
};
com.wiris.quizzes.impl.QuizzesServiceSyncListener.__name__ = ["com","wiris","quizzes","impl","QuizzesServiceSyncListener"];
com.wiris.quizzes.impl.QuizzesServiceSyncListener.__interfaces__ = [com.wiris.quizzes.impl.QuizzesServiceMultipleListener];
com.wiris.quizzes.impl.QuizzesServiceSyncListener.prototype = {
	onResponse: function(mqs) {
		this.mqs = mqs;
	}
	,mqs: null
	,__class__: com.wiris.quizzes.impl.QuizzesServiceSyncListener
}
com.wiris.quizzes.impl.QuizzesTranslator = $hxClasses["com.wiris.quizzes.impl.QuizzesTranslator"] = function(lang,source) {
	this.lang = lang;
	this.strings = new Hash();
	var i = 0;
	while(i < source.length && !(source[i][0] == "lang" && source[i][1] == lang)) i++;
	while(i < source.length && !(source[i][0] == "lang" && !(source[i][1] == lang))) {
		this.strings.set(source[i][0],source[i][1]);
		i++;
	}
};
com.wiris.quizzes.impl.QuizzesTranslator.__name__ = ["com","wiris","quizzes","impl","QuizzesTranslator"];
com.wiris.quizzes.impl.QuizzesTranslator.getInstance = function(lang) {
	if(com.wiris.quizzes.impl.QuizzesTranslator.languages == null) com.wiris.quizzes.impl.QuizzesTranslator.languages = new Hash();
	lang = com.wiris.quizzes.impl.QuizzesTranslator.getBestMatch(lang);
	if(lang == null) throw "No languages defined.";
	if(!com.wiris.quizzes.impl.QuizzesTranslator.languages.exists(lang)) {
		var translator = new com.wiris.quizzes.impl.QuizzesTranslator(lang,com.wiris.quizzes.impl.Strings.lang);
		com.wiris.quizzes.impl.QuizzesTranslator.languages.set(lang,translator);
	}
	return com.wiris.quizzes.impl.QuizzesTranslator.languages.get(lang);
}
com.wiris.quizzes.impl.QuizzesTranslator.getBestMatch = function(lang) {
	var a = com.wiris.quizzes.impl.QuizzesTranslator.getAvailableLanguages();
	if(com.wiris.util.type.Arrays.contains(a,lang)) return lang;
	var i;
	if((i = lang.indexOf("_")) != -1) {
		lang = HxOverrides.substr(lang,0,i);
		if(com.wiris.util.type.Arrays.contains(a,lang)) return lang;
	}
	var _g1 = 0, _g = a.length;
	while(_g1 < _g) {
		var i1 = _g1++;
		if(StringTools.startsWith(a[i1],lang + "_")) return a[i1];
	}
	if(com.wiris.util.type.Arrays.contains(a,"en")) return "en";
	if(a.length > 0) return a[0];
	return null;
}
com.wiris.quizzes.impl.QuizzesTranslator.getAvailableLanguages = function() {
	if(com.wiris.quizzes.impl.QuizzesTranslator.available == null) {
		com.wiris.quizzes.impl.QuizzesTranslator.available = new Array();
		var i;
		var _g1 = 0, _g = com.wiris.quizzes.impl.Strings.lang.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(com.wiris.quizzes.impl.Strings.lang[i1][0] == "lang") com.wiris.quizzes.impl.QuizzesTranslator.available.push(com.wiris.quizzes.impl.Strings.lang[i1][1]);
		}
	}
	return com.wiris.quizzes.impl.QuizzesTranslator.available;
}
com.wiris.quizzes.impl.QuizzesTranslator.prototype = {
	t: function(code) {
		if(this.strings.exists(code)) code = this.strings.get(code); else if(!(this.lang == "en")) code = com.wiris.quizzes.impl.QuizzesTranslator.getInstance("en").t(code);
		return code;
	}
	,lang: null
	,strings: null
	,__class__: com.wiris.quizzes.impl.QuizzesTranslator
}
com.wiris.quizzes.impl.QuizzesUIBuilderImpl = $hxClasses["com.wiris.quizzes.impl.QuizzesUIBuilderImpl"] = function() {
};
com.wiris.quizzes.impl.QuizzesUIBuilderImpl.__name__ = ["com","wiris","quizzes","impl","QuizzesUIBuilderImpl"];
com.wiris.quizzes.impl.QuizzesUIBuilderImpl.__interfaces__ = [com.wiris.quizzes.api.ui.QuizzesUIBuilder];
com.wiris.quizzes.impl.QuizzesUIBuilderImpl.prototype = {
	getAuthorAnswerFromCorrectAnswerIndex: function(slot,correctAnswer) {
		if(correctAnswer < 0) throw "Invalid correct answer!";
		var authorAnswers = slot.getAuthorAnswers();
		var _g = 0;
		while(_g < authorAnswers.length) {
			var aa = authorAnswers[_g];
			++_g;
			var aai = aa;
			if(aai.id != null && Std.parseInt(aai.id) == correctAnswer) return aai;
		}
		while(true) {
			var aa = slot.addNewAuthorAnswer("");
			var id = Std.parseInt(aa.id);
			if(id == correctAnswer) return aa; else if(id > correctAnswer) throw "Invalid correct answer!";
		}
	}
	,getSlotFromStudentAnswerIndex: function(question,studentAnswer) {
		if(studentAnswer < 0) throw "Invalid student answer!";
		var slots = question.getSlots();
		var _g = 0;
		while(_g < slots.length) {
			var s = slots[_g];
			++_g;
			var si = s;
			if(si.id != null && Std.parseInt(si.id) == studentAnswer) return si;
		}
		while(true) {
			var s = question.addNewSlot();
			var id = Std.parseInt(s.id);
			if(id == studentAnswer) return s; else if(id > studentAnswer) throw "Invalid student answer!";
		}
	}
	,replaceFields: function(question,instance,element) {
		var instanceImpl = instance;
		instanceImpl.question = question;
		com.wiris.quizzes.api.Quizzes.getInstance().getQuizzesComponentBuilder().replaceFields(question,instance,element);
	}
	,getMathViewer: function() {
		return com.wiris.quizzes.api.Quizzes.getInstance().getQuizzesComponentBuilder().getMathViewer();
	}
	,newAuxiliarCasField: function(question,instance,index) {
		var instanceImpl = instance;
		instanceImpl.question = question;
		var slot = this.getSlotFromStudentAnswerIndex(question,index);
		return com.wiris.quizzes.api.Quizzes.getInstance().getQuizzesComponentBuilder().newAuxiliaryCasField(instance,slot);
	}
	,newEmbeddedAnswersEditor: function(question,instance) {
		return com.wiris.quizzes.api.Quizzes.getInstance().getQuizzesComponentBuilder().newEmbeddedAnswersEditor(question,instance);
	}
	,newAuthoringField: function(question,instance,correctAnswer,userAnswer) {
		var slot = this.getSlotFromStudentAnswerIndex(question,userAnswer);
		var authorAnswer = this.getAuthorAnswerFromCorrectAnswerIndex(slot,correctAnswer);
		return com.wiris.quizzes.api.Quizzes.getInstance().getQuizzesComponentBuilder().newAuthoringField(question,slot,authorAnswer);
	}
	,newAnswerField: function(question,instance,index) {
		var instanceImpl = instance;
		instanceImpl.question = question;
		var slot = this.getSlotFromStudentAnswerIndex(question,index);
		return com.wiris.quizzes.api.Quizzes.getInstance().getQuizzesComponentBuilder().newAnswerField(instance,slot);
	}
	,newAnswerFeedback: function(question,instance,correctAnswer,studentAnswer) {
		var instanceImpl = instance;
		instanceImpl.question = question;
		var slot = this.getSlotFromStudentAnswerIndex(question,studentAnswer);
		var authorAnswer = this.getAuthorAnswerFromCorrectAnswerIndex(slot,correctAnswer);
		return com.wiris.quizzes.api.Quizzes.getInstance().getQuizzesComponentBuilder().newAnswerFeedback(instance,slot,authorAnswer);
	}
	,setLanguage: function(lang) {
		com.wiris.quizzes.api.Quizzes.getInstance().getQuizzesComponentBuilder().setLanguage(lang);
	}
	,__class__: com.wiris.quizzes.impl.QuizzesUIBuilderImpl
}
com.wiris.quizzes.impl.Result = $hxClasses["com.wiris.quizzes.impl.Result"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
};
com.wiris.quizzes.impl.Result.__name__ = ["com","wiris","quizzes","impl","Result"];
com.wiris.quizzes.impl.Result.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.Result.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	onSerializeInner: function(s) {
		this.errors = s.serializeArray(this.errors,com.wiris.quizzes.impl.ResultError.tagName);
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.Result();
	}
	,onSerialize: function(s) {
	}
	,errors: null
	,__class__: com.wiris.quizzes.impl.Result
});
com.wiris.quizzes.impl.ResultError = $hxClasses["com.wiris.quizzes.impl.ResultError"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
};
com.wiris.quizzes.impl.ResultError.__name__ = ["com","wiris","quizzes","impl","ResultError"];
com.wiris.quizzes.impl.ResultError.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.ResultError.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.ResultError.tagName);
		this.type = s.attributeString("type",this.type,null);
		this.id = s.attributeString("id",this.id,null);
		this.location = s.serializeChild(this.location);
		this.detail = s.childString("detail",this.detail,null);
		s.endTag();
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.ResultError();
	}
	,id: null
	,type: null
	,detail: null
	,location: null
	,__class__: com.wiris.quizzes.impl.ResultError
});
com.wiris.quizzes.impl.ResultErrorLocation = $hxClasses["com.wiris.quizzes.impl.ResultErrorLocation"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
	this.fromline = -1;
	this.toline = -1;
	this.fromcolumn = -1;
	this.tocolumn = -1;
};
com.wiris.quizzes.impl.ResultErrorLocation.__name__ = ["com","wiris","quizzes","impl","ResultErrorLocation"];
com.wiris.quizzes.impl.ResultErrorLocation.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.ResultErrorLocation.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.ResultErrorLocation.tagName);
		this.element = s.attributeString("element",this.element,null);
		this.elementid = s.attributeString("ref",this.elementid,null);
		this.fromline = s.attributeInt("fromline",this.fromline,-1);
		this.toline = s.attributeInt("toline",this.toline,-1);
		this.fromcolumn = s.attributeInt("fromcolumn",this.fromcolumn,-1);
		this.tocolumn = s.attributeInt("tocolumn",this.tocolumn,-1);
		s.endTag();
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.ResultErrorLocation();
	}
	,tocolumn: null
	,fromcolumn: null
	,toline: null
	,fromline: null
	,elementid: null
	,element: null
	,__class__: com.wiris.quizzes.impl.ResultErrorLocation
});
com.wiris.quizzes.impl.ResultGetCheckAssertions = $hxClasses["com.wiris.quizzes.impl.ResultGetCheckAssertions"] = function() {
	com.wiris.quizzes.impl.Result.call(this);
};
com.wiris.quizzes.impl.ResultGetCheckAssertions.__name__ = ["com","wiris","quizzes","impl","ResultGetCheckAssertions"];
com.wiris.quizzes.impl.ResultGetCheckAssertions.__super__ = com.wiris.quizzes.impl.Result;
com.wiris.quizzes.impl.ResultGetCheckAssertions.prototype = $extend(com.wiris.quizzes.impl.Result.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.ResultGetCheckAssertions();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.ResultGetCheckAssertions.tagName);
		this.onSerializeInner(s);
		this.checks = s.serializeArray(this.checks,com.wiris.quizzes.impl.AssertionCheckImpl.tagName);
		s.endTag();
	}
	,checks: null
	,__class__: com.wiris.quizzes.impl.ResultGetCheckAssertions
});
com.wiris.quizzes.impl.ResultGetFeaturedAssertions = $hxClasses["com.wiris.quizzes.impl.ResultGetFeaturedAssertions"] = function() {
	com.wiris.quizzes.impl.Result.call(this);
};
com.wiris.quizzes.impl.ResultGetFeaturedAssertions.__name__ = ["com","wiris","quizzes","impl","ResultGetFeaturedAssertions"];
com.wiris.quizzes.impl.ResultGetFeaturedAssertions.__super__ = com.wiris.quizzes.impl.Result;
com.wiris.quizzes.impl.ResultGetFeaturedAssertions.prototype = $extend(com.wiris.quizzes.impl.Result.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.ResultGetFeaturedAssertions();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.ResultGetFeaturedAssertions.tagName);
		this.onSerializeInner(s);
		this.assertions = s.serializeArray(this.assertions,com.wiris.quizzes.impl.Assertion.tagName);
		s.endTag();
	}
	,assertions: null
	,__class__: com.wiris.quizzes.impl.ResultGetFeaturedAssertions
});
com.wiris.quizzes.impl.ResultGetFeaturedSyntaxAssertions = $hxClasses["com.wiris.quizzes.impl.ResultGetFeaturedSyntaxAssertions"] = function() {
	com.wiris.quizzes.impl.Result.call(this);
};
com.wiris.quizzes.impl.ResultGetFeaturedSyntaxAssertions.__name__ = ["com","wiris","quizzes","impl","ResultGetFeaturedSyntaxAssertions"];
com.wiris.quizzes.impl.ResultGetFeaturedSyntaxAssertions.__super__ = com.wiris.quizzes.impl.Result;
com.wiris.quizzes.impl.ResultGetFeaturedSyntaxAssertions.prototype = $extend(com.wiris.quizzes.impl.Result.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.ResultGetFeaturedSyntaxAssertions();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.ResultGetFeaturedSyntaxAssertions.tagName);
		this.onSerializeInner(s);
		this.assertions = s.serializeArray(this.assertions,com.wiris.quizzes.impl.Assertion.tagName);
		s.endTag();
	}
	,assertions: null
	,__class__: com.wiris.quizzes.impl.ResultGetFeaturedSyntaxAssertions
});
com.wiris.quizzes.impl.ResultGetTranslation = $hxClasses["com.wiris.quizzes.impl.ResultGetTranslation"] = function() {
	com.wiris.quizzes.impl.Result.call(this);
};
com.wiris.quizzes.impl.ResultGetTranslation.__name__ = ["com","wiris","quizzes","impl","ResultGetTranslation"];
com.wiris.quizzes.impl.ResultGetTranslation.__super__ = com.wiris.quizzes.impl.Result;
com.wiris.quizzes.impl.ResultGetTranslation.prototype = $extend(com.wiris.quizzes.impl.Result.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.ResultGetTranslation();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.ResultGetTranslation.tagName);
		this.onSerializeInner(s);
		this.wirisCasSession = s.childString("wirisCasSession",this.wirisCasSession,null);
		this.namechanges = s.serializeArray(this.namechanges,com.wiris.quizzes.impl.TranslationNameChange.tagName);
		s.endTag();
	}
	,namechanges: null
	,wirisCasSession: null
	,__class__: com.wiris.quizzes.impl.ResultGetTranslation
});
com.wiris.quizzes.impl.ResultGetVariables = $hxClasses["com.wiris.quizzes.impl.ResultGetVariables"] = function() {
	com.wiris.quizzes.impl.Result.call(this);
};
com.wiris.quizzes.impl.ResultGetVariables.__name__ = ["com","wiris","quizzes","impl","ResultGetVariables"];
com.wiris.quizzes.impl.ResultGetVariables.__super__ = com.wiris.quizzes.impl.Result;
com.wiris.quizzes.impl.ResultGetVariables.prototype = $extend(com.wiris.quizzes.impl.Result.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.ResultGetVariables();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.ResultGetVariables.tagName);
		this.onSerializeInner(s);
		this.variables = s.serializeArray(this.variables,com.wiris.quizzes.impl.Variable.tagName);
		s.endTag();
	}
	,variables: null
	,__class__: com.wiris.quizzes.impl.ResultGetVariables
});
com.wiris.quizzes.impl.ResultStoreQuestion = $hxClasses["com.wiris.quizzes.impl.ResultStoreQuestion"] = function() {
	com.wiris.quizzes.impl.Result.call(this);
};
com.wiris.quizzes.impl.ResultStoreQuestion.__name__ = ["com","wiris","quizzes","impl","ResultStoreQuestion"];
com.wiris.quizzes.impl.ResultStoreQuestion.__super__ = com.wiris.quizzes.impl.Result;
com.wiris.quizzes.impl.ResultStoreQuestion.prototype = $extend(com.wiris.quizzes.impl.Result.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.ResultStoreQuestion();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.ResultStoreQuestion.tagName);
		this.onSerializeInner(s);
		this.id = s.childString("id",this.id,null);
		s.endTag();
	}
	,id: null
	,__class__: com.wiris.quizzes.impl.ResultStoreQuestion
});
com.wiris.quizzes.impl.SharedVariables = $hxClasses["com.wiris.quizzes.impl.SharedVariables"] = function() {
	this.cache = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getVariablesCache();
	this.locker = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getLockProvider();
};
com.wiris.quizzes.impl.SharedVariables.__name__ = ["com","wiris","quizzes","impl","SharedVariables"];
com.wiris.quizzes.impl.SharedVariables.prototype = {
	getCacheKey: function(name) {
		return name + ".var";
	}
	,unlockVariable: function(name) {
		if(com.wiris.quizzes.impl.SharedVariables.h != null) {
			var l = com.wiris.quizzes.impl.SharedVariables.h.get(name);
			if(l != null) {
				com.wiris.quizzes.impl.SharedVariables.h.remove(name);
				l.release();
			}
		}
	}
	,lockVariable: function(name) {
		var l = this.locker.getLock(this.getCacheKey(name));
		if(com.wiris.quizzes.impl.SharedVariables.h == null) com.wiris.quizzes.impl.SharedVariables.h = new Hash();
		com.wiris.quizzes.impl.SharedVariables.h.set(name,l);
	}
	,setVariable: function(name,value) {
		var b = haxe.io.Bytes.ofData(com.wiris.system.Utf8.toBytes(value));
		this.cache.set(this.getCacheKey(name),b);
	}
	,getVariable: function(name) {
		var b = this.cache.get(this.getCacheKey(name));
		return b != null?com.wiris.system.Utf8.fromBytes(b.b):null;
	}
	,locker: null
	,cache: null
	,__class__: com.wiris.quizzes.impl.SharedVariables
}
com.wiris.quizzes.impl.SlotImpl = $hxClasses["com.wiris.quizzes.impl.SlotImpl"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
	this.syntax = com.wiris.quizzes.impl.SyntaxAssertion.getDefaultSyntax();
	this.initialContent = new com.wiris.quizzes.impl.InitialContent();
	this.initialContent.set("");
	this.authorAnswers = new Array();
	this.localData = new Array();
};
com.wiris.quizzes.impl.SlotImpl.__name__ = ["com","wiris","quizzes","impl","SlotImpl"];
com.wiris.quizzes.impl.SlotImpl.__interfaces__ = [com.wiris.quizzes.api.Slot];
com.wiris.quizzes.impl.SlotImpl.newWithQuestionCallback = function(question) {
	var slot = new com.wiris.quizzes.impl.SlotImpl();
	slot.question = question;
	return slot;
}
com.wiris.quizzes.impl.SlotImpl.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.SlotImpl.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	syntacticAssertionToURL: function(a) {
		var sb = new StringBuf();
		if(a.getName() == com.wiris.quizzes.api.assertion.SyntaxName.MATH) sb.b += Std.string("Math"); else if(a.getName() == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC) sb.b += Std.string("Graphic"); else if(a.getName() == com.wiris.quizzes.api.assertion.SyntaxName.STRING) sb.b += Std.string("String");
		if(a.parameters != null && a.parameters.length > 0) {
			sb.b += Std.string("?");
			var i;
			var _g1 = 0, _g = a.parameters.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var p = a.parameters[i1];
				if(i1 > 0) sb.b += Std.string("&");
				sb.b += Std.string(StringTools.urlEncode(p.name));
				sb.b += Std.string("=");
				sb.b += Std.string(StringTools.urlEncode(p.content));
			}
		}
		return sb.b;
	}
	,getGrammarUrl: function() {
		var prefix = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.SERVICE_URL);
		prefix += "/grammar/";
		var url = null;
		if(this.syntax != null) url = prefix + this.syntacticAssertionToURL(this.syntax);
		if(url == null) url = prefix + "Math";
		return url;
	}
	,isSlotCompoundAnswer: function() {
		return this.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER) == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE;
	}
	,removeProperty: function(name) {
		this.question.id = null;
		com.wiris.quizzes.impl.QuestionImpl.removeLocalDataFromArray(com.wiris.quizzes.impl.QuizzesEnumUtils.propertyName2String(name),this.localData);
	}
	,getAnswerFieldType: function() {
		var stringType = this.getProperty(com.wiris.quizzes.api.PropertyName.ANSWER_FIELD_TYPE);
		return com.wiris.quizzes.impl.QuizzesEnumUtils.string2answerFieldType(stringType);
	}
	,importSlot: function(slot) {
		this.id = slot.id;
		this.syntax = slot.syntax;
		this.authorAnswers = slot.authorAnswers;
		this.initialContent = slot.initialContent;
		this.localData = slot.localData;
		this.question = slot.question;
	}
	,setInitialContent: function(content) {
		this.initialContent.set(content);
	}
	,getInitialContent: function() {
		return this.initialContent.content;
	}
	,setSyntax: function(type) {
		if(type == null || type == this.syntax.getName()) return this.syntax;
		this.question.id = null;
		this.syntax.setName(type);
		if(type == com.wiris.quizzes.api.assertion.SyntaxName.STRING && this.getAnswerFieldType() != com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD) this.setAnswerFieldType(com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD); else if(type == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC && this.getAnswerFieldType() != com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR) this.setAnswerFieldType(com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR); else if(this.getAnswerFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR) this.setAnswerFieldType(com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR);
		this.syntax.parameters = new Array();
		return this.syntax;
	}
	,getSyntax: function() {
		return this.syntax;
	}
	,getProperty: function(name) {
		var key = com.wiris.quizzes.impl.QuizzesEnumUtils.propertyName2String(name);
		if(!com.wiris.util.type.Arrays.containsArray(com.wiris.quizzes.impl.LocalData.keys,key)) throw "Property " + key + " is not supported in Slot. Please get it from the Question object instead.";
		var ld = com.wiris.quizzes.impl.QuestionImpl.getLocalDataFromArray(key,this.localData);
		return ld != null?ld:this.question.getProperty(name);
	}
	,setAnswerFieldType: function(type) {
		if(type != null) this.setProperty(com.wiris.quizzes.api.PropertyName.ANSWER_FIELD_TYPE,com.wiris.quizzes.impl.QuizzesEnumUtils.answerFieldType2String(type)); else throw "Null answer field type!";
	}
	,setLocalData: function(key,value) {
		if(this.localData == null) this.localData = new Array();
		com.wiris.quizzes.impl.QuestionImpl.setLocalDataToArray(key,value,this.localData);
	}
	,setProperty: function(name,value) {
		var key = com.wiris.quizzes.impl.QuizzesEnumUtils.propertyName2String(name);
		if(!com.wiris.util.type.Arrays.containsArray(com.wiris.quizzes.impl.LocalData.keys,key)) throw "Property " + key + " is not supported in Slot. Please set it to the Question object instead.";
		this.setLocalData(key,value);
	}
	,removeAuthorAnswer: function(answer) {
		if(HxOverrides.remove(this.authorAnswers,answer)) this.question.authorAnswerRemoved(answer);
	}
	,addAuthorAnswerImpl: function(aa) {
		this.authorAnswers.push(aa);
		this.question.authorAnswerAdded(aa,this);
		return aa;
	}
	,addNewAuthorAnswer: function(value) {
		var aa = com.wiris.quizzes.impl.AuthorAnswerImpl.newWithQuestionCallback(this.question,this);
		value = com.wiris.util.xml.MathMLUtils.convertEditor2Newlines(value);
		aa.value.set(value);
		return this.addAuthorAnswerImpl(aa);
	}
	,getAuthorAnswers: function() {
		var aa = new Array();
		aa = this.authorAnswers.slice();
		return aa;
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.SlotImpl();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.SlotImpl.TAGNAME);
		this.id = s.attributeString(com.wiris.quizzes.impl.SlotImpl.ATTRIBUTE_ID,this.id,"0");
		this.localData = s.serializeArrayName(this.localData,com.wiris.quizzes.impl.SlotImpl.LOCALDATA_TAGNAME);
		this.initialContent = s.serializeChildName(this.initialContent,com.wiris.quizzes.impl.InitialContent.TAGNAME);
		s.endTag();
	}
	,copyData: function(slotModel,copyAuthorAnswers) {
		var slot = slotModel;
		this.setInitialContent(slot.getInitialContent());
		this.syntax.importAssertionNameAndParams(slot.syntax.copy());
		if(slot.localData != null) {
			this.localData = new Array();
			var ldArray = slot.localData;
			var _g = 0;
			while(_g < ldArray.length) {
				var ld = ldArray[_g];
				++_g;
				this.setLocalData(ld.name,ld.value);
			}
		}
		var authorAnswers = slot.authorAnswers;
		if(copyAuthorAnswers && authorAnswers != null) {
			var _g = 0;
			while(_g < authorAnswers.length) {
				var aa = authorAnswers[_g];
				++_g;
				var aaClone = com.wiris.quizzes.impl.AuthorAnswerImpl.newWithQuestionCallback(this.question,this);
				aaClone.copy(aa);
				this.addAuthorAnswerImpl(aaClone);
			}
		}
	}
	,copy: function(slotModel) {
		this.copyData(slotModel,false);
		return this;
	}
	,question: null
	,localData: null
	,initialContent: null
	,authorAnswers: null
	,syntax: null
	,id: null
	,__class__: com.wiris.quizzes.impl.SlotImpl
});
com.wiris.quizzes.impl.Strings = $hxClasses["com.wiris.quizzes.impl.Strings"] = function() { }
com.wiris.quizzes.impl.Strings.__name__ = ["com","wiris","quizzes","impl","Strings"];
com.wiris.quizzes.impl.SyntaxAssertion = $hxClasses["com.wiris.quizzes.impl.SyntaxAssertion"] = function() {
	com.wiris.quizzes.impl.Assertion.call(this);
};
com.wiris.quizzes.impl.SyntaxAssertion.__name__ = ["com","wiris","quizzes","impl","SyntaxAssertion"];
com.wiris.quizzes.impl.SyntaxAssertion.__interfaces__ = [com.wiris.quizzes.api.assertion.Syntax];
com.wiris.quizzes.impl.SyntaxAssertion.fromAssertion = function(a) {
	var s = new com.wiris.quizzes.impl.SyntaxAssertion();
	s.correctAnswer = a.correctAnswer;
	s.answer = a.answer;
	s.parameters = a.parameters;
	s.name = com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxName2String(com.wiris.quizzes.impl.QuizzesEnumUtils.string2SyntaxName(a.name));
	return s;
}
com.wiris.quizzes.impl.SyntaxAssertion.getDefaultAnswerFieldType = function(name) {
	if(name == com.wiris.quizzes.api.assertion.SyntaxName.MATH) return com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR;
	return com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD;
}
com.wiris.quizzes.impl.SyntaxAssertion.getDefaultSyntax = function() {
	var s = new com.wiris.quizzes.impl.SyntaxAssertion();
	s.setName(com.wiris.quizzes.api.assertion.SyntaxName.MATH);
	s.setParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.DECIMAL_SEPARATORS,".,'");
	return s;
}
com.wiris.quizzes.impl.SyntaxAssertion.__super__ = com.wiris.quizzes.impl.Assertion;
com.wiris.quizzes.impl.SyntaxAssertion.prototype = $extend(com.wiris.quizzes.impl.Assertion.prototype,{
	removeParameter: function(name) {
		var value = this.getParameter(name);
		this.removeParam(com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterName2String(name));
		return value;
	}
	,getParameter: function(name) {
		return this.getParam(com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterName2String(name));
	}
	,setParameter: function(name,value) {
		this.setParam(com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxParameterName2String(name),value);
	}
	,setName: function(name) {
		this.name = com.wiris.quizzes.impl.QuizzesEnumUtils.syntaxName2String(name);
	}
	,getName: function() {
		return com.wiris.quizzes.impl.QuizzesEnumUtils.string2SyntaxName(this.name);
	}
	,__class__: com.wiris.quizzes.impl.SyntaxAssertion
});
com.wiris.quizzes.impl.TranslationNameChange = $hxClasses["com.wiris.quizzes.impl.TranslationNameChange"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
};
com.wiris.quizzes.impl.TranslationNameChange.__name__ = ["com","wiris","quizzes","impl","TranslationNameChange"];
com.wiris.quizzes.impl.TranslationNameChange.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.TranslationNameChange.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	newInstance: function() {
		return new com.wiris.quizzes.impl.TranslationNameChange();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.TranslationNameChange.tagName);
		this.newname = s.attributeString("new",this.newname,null);
		this.oldname = s.attributeString("old",this.oldname,null);
		s.endTag();
	}
	,newname: null
	,oldname: null
	,__class__: com.wiris.quizzes.impl.TranslationNameChange
});
com.wiris.quizzes.impl.UserData = $hxClasses["com.wiris.quizzes.impl.UserData"] = function() {
	com.wiris.util.xml.SerializableImpl.call(this);
	this.randomSeed = -1;
};
com.wiris.quizzes.impl.UserData.__name__ = ["com","wiris","quizzes","impl","UserData"];
com.wiris.quizzes.impl.UserData.__super__ = com.wiris.util.xml.SerializableImpl;
com.wiris.quizzes.impl.UserData.prototype = $extend(com.wiris.util.xml.SerializableImpl.prototype,{
	setParameter: function(name,value) {
		if(!new com.wiris.quizzes.impl.HTMLTools().isQuizzesIdentifier(name)) throw "Invalid parameter \"name\".";
		if(this.parameters == null) this.parameters = new Array();
		var i;
		var _g1 = 0, _g = this.parameters.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(this.parameters[i1].name == name) HxOverrides.remove(this.parameters,this.parameters[i1]);
		}
		if(value != null && !(value == "")) {
			var p = new com.wiris.quizzes.impl.Parameter();
			p.name = name;
			p.set(value);
			this.parameters.push(p);
		}
	}
	,ensureAnswerPlace: function(index) {
		if(index < 0) throw "Invalid index: " + index;
		if(this.answers == null) this.answers = new Array();
		while(this.answers.length <= index) this.answers.push(new com.wiris.quizzes.impl.Answer());
	}
	,getUserCompoundAnswer: function(index,compoundindex) {
		var a = this.answers[index];
		var compound = com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswer(a);
		return compound[compoundindex][1];
	}
	,setUserCompoundAnswer: function(index,compoundindex,content) {
		this.ensureAnswerPlace(index);
		if(compoundindex < 0) throw "Invalid compound index: " + compoundindex;
		var a = this.answers[index];
		a.id = "" + index;
		var compound;
		if(a.content == null || a.content.length == 0) compound = new Array(); else compound = com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswer(a);
		var i = compound.length;
		while(i <= compoundindex) {
			compound[i] = ["<math><mo>=</mo></math>","<math></math>"];
			i++;
		}
		if(com.wiris.quizzes.impl.MathContent.getMathType(content) == com.wiris.quizzes.impl.MathContent.TYPE_TEXT) content = new com.wiris.quizzes.impl.HTMLTools().textToMathML(content);
		compound[compoundindex][1] = content;
		var m = com.wiris.quizzes.impl.CompoundAnswerParser.joinCompoundAnswer(compound);
		a.type = m.type;
		a.content = m.content;
	}
	,setUserAnswer: function(index,content) {
		this.ensureAnswerPlace(index);
		var a = this.answers[index];
		a.id = "" + index;
		a.set(content);
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.UserData();
	}
	,onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.UserData.TAGNAME);
		this.randomSeed = s.childInt("randomSeed",this.randomSeed,-1);
		this.answers = s.serializeArrayName(this.answers,"answers");
		this.parameters = s.serializeArrayName(this.parameters,"parameters");
		s.endTag();
	}
	,parameters: null
	,answers: null
	,randomSeed: null
	,__class__: com.wiris.quizzes.impl.UserData
});
com.wiris.quizzes.impl.ValidationAssertion = $hxClasses["com.wiris.quizzes.impl.ValidationAssertion"] = function() {
	com.wiris.quizzes.impl.Assertion.call(this);
};
com.wiris.quizzes.impl.ValidationAssertion.__name__ = ["com","wiris","quizzes","impl","ValidationAssertion"];
com.wiris.quizzes.impl.ValidationAssertion.__interfaces__ = [com.wiris.quizzes.api.assertion.Validation];
com.wiris.quizzes.impl.ValidationAssertion.fromAssertion = function(a) {
	var v = new com.wiris.quizzes.impl.ValidationAssertion();
	v.correctAnswer = a.correctAnswer;
	v.answer = a.answer;
	v.parameters = a.parameters;
	v.name = com.wiris.quizzes.impl.QuizzesEnumUtils.validationName2String(com.wiris.quizzes.impl.QuizzesEnumUtils.string2ValidationName(a.name));
	return v;
}
com.wiris.quizzes.impl.ValidationAssertion.__super__ = com.wiris.quizzes.impl.Assertion;
com.wiris.quizzes.impl.ValidationAssertion.prototype = $extend(com.wiris.quizzes.impl.Assertion.prototype,{
	removeParameter: function(name) {
		var value = this.getParameter(name);
		this.removeParam(com.wiris.quizzes.impl.QuizzesEnumUtils.validationParameterName2String(name));
		return value;
	}
	,getParameter: function(name) {
		return this.getParam(com.wiris.quizzes.impl.QuizzesEnumUtils.validationParameterName2String(name));
	}
	,setParameter: function(name,value) {
		this.setParam(com.wiris.quizzes.impl.QuizzesEnumUtils.validationParameterName2String(name),value);
	}
	,setName: function(name) {
		this.name = com.wiris.quizzes.impl.QuizzesEnumUtils.validationName2String(name);
	}
	,getName: function() {
		return com.wiris.quizzes.impl.QuizzesEnumUtils.string2ValidationName(this.name);
	}
	,__class__: com.wiris.quizzes.impl.ValidationAssertion
});
com.wiris.quizzes.impl.Variable = $hxClasses["com.wiris.quizzes.impl.Variable"] = function() {
	com.wiris.quizzes.impl.MathContent.call(this);
};
com.wiris.quizzes.impl.Variable.__name__ = ["com","wiris","quizzes","impl","Variable"];
com.wiris.quizzes.impl.Variable.__super__ = com.wiris.quizzes.impl.MathContent;
com.wiris.quizzes.impl.Variable.prototype = $extend(com.wiris.quizzes.impl.MathContent.prototype,{
	onSerialize: function(s) {
		s.beginTag(com.wiris.quizzes.impl.Variable.tagName);
		this.name = s.attributeString("name",this.name,null);
		this.onSerializeInner(s);
		s.endTag();
	}
	,newInstance: function() {
		return new com.wiris.quizzes.impl.Variable();
	}
	,name: null
	,__class__: com.wiris.quizzes.impl.Variable
});
com.wiris.util.ui.component.Component = $hxClasses["com.wiris.util.ui.component.Component"] = function() {
	this.element = null;
	this.id = "";
	this.applicationClass = null;
	this.componentBuilder = null;
	this.visible = true;
	this.enabled = true;
	this.draggable = false;
	this.parent = null;
	this.childIndex = -1;
	this.classes = new Array();
	this.classes.push(com.wiris.util.ui.component.Component.CLASS_COMPONENT);
	this.style = new com.wiris.util.ui.Style(this);
	this.componentStateManager = new com.wiris.util.ui.component.ComponentStateManager(this);
	this.resetListeners();
	this.addFocusListener(this.componentStateManager);
	this.addKeyListener(this.componentStateManager);
	this.addMouseListener(this.componentStateManager);
	this.addTouchListener(this.componentStateManager);
};
com.wiris.util.ui.component.Component.__name__ = ["com","wiris","util","ui","component","Component"];
com.wiris.util.ui.component.Component.prototype = {
	fireTouchEvent: function(listener,e,touchEventType) {
		if(listener == null) return;
		if(com.wiris.util.ui.interaction.EventType.TOUCH_EVENT_MOVE == touchEventType) listener.touchMove(e); else if(com.wiris.util.ui.interaction.EventType.TOUCH_EVENT_PRESS == touchEventType) listener.touchPress(e); else if(com.wiris.util.ui.interaction.EventType.TOUCH_EVENT_RELEASE == touchEventType) listener.touchRelease(e);
	}
	,fireMouseMotionEvent: function(listener,e) {
		if(listener == null) return;
		listener.mouseMove(e);
	}
	,fireMouseEvent: function(listener,e,mouseEventType) {
		if(listener == null) return;
		if(com.wiris.util.ui.interaction.EventType.MOUSE_EVENT_CLICK == mouseEventType) listener.mouseClick(e); else if(com.wiris.util.ui.interaction.EventType.MOUSE_EVENT_DOUBLE_CLICK == mouseEventType) listener.mouseDoubleClick(e); else if(com.wiris.util.ui.interaction.EventType.MOUSE_EVENT_ENTER == mouseEventType) listener.mouseEnter(e); else if(com.wiris.util.ui.interaction.EventType.MOUSE_EVENT_EXIT == mouseEventType) listener.mouseExit(e); else if(com.wiris.util.ui.interaction.EventType.MOUSE_EVENT_PRESS == mouseEventType) listener.mousePress(e); else if(com.wiris.util.ui.interaction.EventType.MOUSE_EVENT_RELEASE == mouseEventType) listener.mouseRelease(e);
	}
	,fireKeyEvent: function(listener,e,keyEventType) {
		if(listener == null) return;
		if(com.wiris.util.ui.interaction.EventType.KEY_EVENT_KEY_PRESS == keyEventType) listener.keyPress(e); else if(com.wiris.util.ui.interaction.EventType.KEY_EVENT_KEY_RELEASE == keyEventType) listener.keyRelease(e); else if(com.wiris.util.ui.interaction.EventType.KEY_EVENT_KEY_TYPE == keyEventType) listener.keyType(e);
	}
	,fireFocusEvent: function(listener,e,focusEventType) {
		if(listener == null) return;
		if(com.wiris.util.ui.interaction.EventType.FOCUS_EVENT_FOCUS_GAINED == focusEventType) listener.focusGained(e); else if(com.wiris.util.ui.interaction.EventType.FOCUS_EVENT_FOCUS_LOST == focusEventType) listener.focusLost(e);
	}
	,fireDragAndDropEvent: function(listener,e,dragAndDropEventType) {
		if(listener == null) return;
		if(com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT_DRAG == dragAndDropEventType) listener.drag(e); else if(com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT_ENTER == dragAndDropEventType) listener.dragEnter(e); else if(com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT_START == dragAndDropEventType) listener.dragStart(e); else if(com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT_DROP == dragAndDropEventType) listener.drop(e); else if(com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT_OVER == dragAndDropEventType) listener.dragOver(e); else if(com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT_END == dragAndDropEventType) listener.dragEnd(e);
	}
	,fireComponentEvent: function(listener,e,componentEventType) {
		if(listener == null) return;
		if(com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT_DRAGGABLE_CHANGED == componentEventType) listener.draggableChanged(e); else if(com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT_ENABLED_CHANGED == componentEventType) listener.enabledChanged(e); else if(com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT_BLUR_REQUESTED == componentEventType) listener.blurRequested(e); else if(com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT_FOCUS_REQUESTED == componentEventType) listener.focusRequested(e); else if(com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT_STYLE_CHANGED == componentEventType) listener.styleChanged(e); else if(com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT_VISIBILITY_CHANGED == componentEventType) listener.visibilityChanged(e);
	}
	,fireChangeEvent: function(listener,e) {
		if(listener == null) return;
		listener.stateChanged(e);
	}
	,fireActionEvent: function(listener,e) {
		if(listener == null) return;
		listener.actionPerformed(e);
	}
	,fireEvent: function(e) {
		var eventType = e.getEventType();
		if(com.wiris.util.ui.interaction.EventType.ACTION_EVENT == eventType) {
			var actionEvent = e;
			var i = HxOverrides.iter(this.actionListeners);
			this.actionListenersLocked = true;
			while(i.hasNext() && e.isPropagating()) this.fireActionEvent(i.next(),actionEvent);
			var _g = 0, _g1 = this.actionListenersToRemove;
			while(_g < _g1.length) {
				var l = _g1[_g];
				++_g;
				HxOverrides.remove(this.actionListeners,l);
			}
			var _g = 0, _g1 = this.actionListenersToAdd;
			while(_g < _g1.length) {
				var l = _g1[_g];
				++_g;
				this.actionListeners.push(l);
			}
			this.actionListenersToRemove = new Array();
			this.actionListenersToAdd = new Array();
			this.actionListenersLocked = false;
			i = HxOverrides.iter(this.defaultActionListeners);
			while(i.hasNext() && !e.defaultIsPrevented()) this.fireActionEvent(i.next(),actionEvent);
		} else if(com.wiris.util.ui.interaction.EventType.CHANGE_EVENT == eventType) {
			var changeEvent = e;
			var i = HxOverrides.iter(this.changeListeners);
			while(i.hasNext() && e.isPropagating()) this.fireChangeEvent(i.next(),changeEvent);
			i = HxOverrides.iter(this.defaultChangeListeners);
			while(i.hasNext() && !e.defaultIsPrevented()) this.fireChangeEvent(i.next(),changeEvent);
		} else if(com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT == eventType) {
			var componentEvent = e;
			var componentEventType = componentEvent.getComponentEventType();
			var i = HxOverrides.iter(this.componentListeners);
			while(i.hasNext() && e.isPropagating()) this.fireComponentEvent(i.next(),componentEvent,componentEventType);
			i = HxOverrides.iter(this.defaultComponentListeners);
			while(i.hasNext() && !e.defaultIsPrevented()) this.fireComponentEvent(i.next(),componentEvent,componentEventType);
		} else if(com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT == eventType) {
			var dragAndDropEvent = e;
			var dragAndDropEventType = dragAndDropEvent.getDragAndDropEventType();
			var i = HxOverrides.iter(this.dragAndDropListeners);
			while(i.hasNext() && e.isPropagating()) this.fireDragAndDropEvent(i.next(),dragAndDropEvent,dragAndDropEventType);
			i = HxOverrides.iter(this.defaultDragAndDropListeners);
			while(i.hasNext() && !e.defaultIsPrevented()) this.fireDragAndDropEvent(i.next(),dragAndDropEvent,dragAndDropEventType);
		} else if(com.wiris.util.ui.interaction.EventType.FOCUS_EVENT == eventType) {
			var focusEvent = e;
			var focusEventType = focusEvent.getFocusEventType();
			var i = HxOverrides.iter(this.focusListeners);
			while(i.hasNext() && e.isPropagating()) this.fireFocusEvent(i.next(),focusEvent,focusEventType);
			i = HxOverrides.iter(this.defaultFocusListeners);
			while(i.hasNext() && !e.defaultIsPrevented()) this.fireFocusEvent(i.next(),focusEvent,focusEventType);
		} else if(com.wiris.util.ui.interaction.EventType.KEY_EVENT == eventType) {
			var keyEvent = e;
			var keyEventType = keyEvent.getKeyEventType();
			var i = HxOverrides.iter(this.keyListeners);
			while(i.hasNext() && e.isPropagating()) this.fireKeyEvent(i.next(),keyEvent,keyEventType);
			i = HxOverrides.iter(this.defaultKeyListeners);
			while(i.hasNext() && !e.defaultIsPrevented()) this.fireKeyEvent(i.next(),keyEvent,keyEventType);
		} else if(com.wiris.util.ui.interaction.EventType.MOUSE_EVENT == eventType) {
			var mouseEvent = e;
			var mouseEventType = mouseEvent.getMouseEventType();
			var i = HxOverrides.iter(this.mouseListeners);
			while(i.hasNext() && e.isPropagating()) this.fireMouseEvent(i.next(),mouseEvent,mouseEventType);
			i = HxOverrides.iter(this.defaultMouseListeners);
			while(i.hasNext() && !e.defaultIsPrevented()) this.fireMouseEvent(i.next(),mouseEvent,mouseEventType);
		} else if(com.wiris.util.ui.interaction.EventType.MOUSE_MOTION_EVENT == eventType) {
			var mouseMotionEvent = e;
			var i = HxOverrides.iter(this.mouseMotionListeners);
			while(i.hasNext() && e.isPropagating()) this.fireMouseMotionEvent(i.next(),mouseMotionEvent);
			i = HxOverrides.iter(this.defaultMouseMotionListeners);
			while(i.hasNext() && !e.defaultIsPrevented()) this.fireMouseMotionEvent(i.next(),mouseMotionEvent);
		} else if(com.wiris.util.ui.interaction.EventType.TOUCH_EVENT == eventType) {
			var touchEvent = e;
			var touchEventType = touchEvent.getTouchEventType();
			var i = HxOverrides.iter(this.touchListeners);
			while(i.hasNext() && e.isPropagating()) this.fireTouchEvent(i.next(),touchEvent,touchEventType);
			i = HxOverrides.iter(this.defaultTouchListeners);
			while(i.hasNext() && !e.defaultIsPrevented()) this.fireTouchEvent(i.next(),touchEvent,touchEventType);
		}
	}
	,changeStyle: function() {
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createComponentEvent(this,com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT_STYLE_CHANGED));
	}
	,changeState: function() {
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createChangeEvent(this));
	}
	,performAction: function(action) {
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createActionEvent(this,action));
	}
	,addDefaultDragAndDropListener: function(listener) {
		this.defaultDragAndDropListeners.push(listener);
		return this;
	}
	,removeDefaultKeyListener: function(listener) {
		HxOverrides.remove(this.defaultKeyListeners,listener);
		return this;
	}
	,addDefaultKeyListener: function(listener) {
		this.defaultKeyListeners.push(listener);
		return this;
	}
	,addDefaultFocusListener: function(listener) {
		this.defaultFocusListeners.push(listener);
		return this;
	}
	,addDefaultTouchListener: function(listener) {
		this.defaultTouchListeners.push(listener);
		return this;
	}
	,addDefaultMouseMotionListener: function(listener) {
		this.defaultMouseMotionListeners.push(listener);
		return this;
	}
	,removeDefaultMouseListener: function(listener) {
		HxOverrides.remove(this.defaultMouseListeners,listener);
		return this;
	}
	,addDefaultMouseListener: function(listener) {
		this.defaultMouseListeners.push(listener);
		return this;
	}
	,addDefaultChangeListener: function(listener) {
		this.defaultChangeListeners.push(listener);
		return this;
	}
	,addDefaultActionListener: function(listener) {
		this.defaultActionListeners.push(listener);
		return this;
	}
	,removeDefaultComponentListener: function(listener) {
		HxOverrides.remove(this.defaultComponentListeners,listener);
		return this;
	}
	,isDefaultComponentListener: function(listener) {
		return com.wiris.system.ArrayEx.contains(this.defaultComponentListeners,listener);
	}
	,addDefaultComponentListener: function(listener) {
		this.defaultComponentListeners.push(listener);
		return this;
	}
	,removeDragAndDropListener: function(listener) {
		HxOverrides.remove(this.dragAndDropListeners,listener);
		return this;
	}
	,addDragAndDropListener: function(listener) {
		this.dragAndDropListeners.push(listener);
		return this;
	}
	,removeKeyListener: function(listener) {
		HxOverrides.remove(this.keyListeners,listener);
		return this;
	}
	,addKeyListener: function(listener) {
		this.keyListeners.push(listener);
		return this;
	}
	,removeFocusListener: function(listener) {
		HxOverrides.remove(this.focusListeners,listener);
		return this;
	}
	,addFocusListener: function(listener) {
		this.focusListeners.push(listener);
		return this;
	}
	,removeTouchListener: function(listener) {
		HxOverrides.remove(this.touchListeners,listener);
		return this;
	}
	,addTouchListener: function(listener) {
		this.touchListeners.push(listener);
		return this;
	}
	,removeMouseMotionListener: function(listener) {
		HxOverrides.remove(this.mouseMotionListeners,listener);
		return this;
	}
	,addMouseMotionListener: function(listener) {
		this.mouseMotionListeners.push(listener);
		return this;
	}
	,removeMouseListener: function(listener) {
		HxOverrides.remove(this.mouseListeners,listener);
		return this;
	}
	,addMouseListener: function(listener) {
		this.mouseListeners.push(listener);
		return this;
	}
	,removeChangeListener: function(listener) {
		HxOverrides.remove(this.changeListeners,listener);
		return this;
	}
	,addChangeListener: function(listener) {
		this.changeListeners.push(listener);
		return this;
	}
	,removeActionListener: function(listener) {
		if(this.actionListenersLocked) this.actionListenersToRemove.push(listener); else HxOverrides.remove(this.actionListeners,listener);
		return this;
	}
	,isActionListener: function(listener) {
		if(this.actionListenersLocked) return com.wiris.system.ArrayEx.contains(this.actionListeners,listener) && !com.wiris.system.ArrayEx.contains(this.actionListenersToRemove,listener) || com.wiris.system.ArrayEx.contains(this.actionListenersToAdd,listener); else return com.wiris.system.ArrayEx.contains(this.actionListeners,listener);
	}
	,addActionListener: function(listener) {
		if(this.actionListenersLocked) this.actionListenersToAdd.push(listener); else this.actionListeners.push(listener);
		return this;
	}
	,removeComponentListener: function(listener) {
		HxOverrides.remove(this.componentListeners,listener);
		return this;
	}
	,isComponentListener: function(listener) {
		return com.wiris.system.ArrayEx.contains(this.componentListeners,listener);
	}
	,addComponentListener: function(listener) {
		this.componentListeners.push(listener);
		return this;
	}
	,setKeyScrollingEnabled: function(keyScrollingEnabled) {
		this.keyScrollingEnabled = keyScrollingEnabled;
	}
	,isKeyScrollingEnabled: function() {
		return this.keyScrollingEnabled;
	}
	,getTabIndex: function() {
		return this.tabindex;
	}
	,setTabIndex: function(index) {
		this.tabindex = index;
	}
	,getComputedStyle: function() {
		return this.computedStyle;
	}
	,setComputedStyle: function(computedStyle) {
		this.computedStyle = computedStyle;
		return this;
	}
	,getStyle: function() {
		return this.style;
	}
	,setStyle: function(style) {
		this.style = style;
		this.changeStyle();
		return this;
	}
	,setApplicationClass: function(className) {
		if(this.applicationClass != null) this.removeClass(this.applicationClass);
		this.applicationClass = className;
		this.addClass(com.wiris.util.ui.component.Component.CLASS_APP);
		return this.addClass(className);
	}
	,removeClass: function(className) {
		if(this.hasClass(className)) {
			HxOverrides.remove(this.classes,className);
			this.changeStyle();
		}
		return this;
	}
	,addClass: function(className) {
		if(!this.hasClass(className)) {
			this.classes.push(className);
			this.changeStyle();
		}
		return this;
	}
	,hasClass: function(className) {
		return com.wiris.system.ArrayEx.contains(this.classes,className);
	}
	,getApplicationClass: function() {
		if(this.applicationClass == null) {
			if(this.getParent() != null) return this.getParent().getApplicationClass();
		}
		return this.applicationClass;
	}
	,getApplication: function() {
		if(this.applicationClass == null) {
			if(this.getParent() != null) return this.getParent().getApplication();
		}
		return this;
	}
	,getClasses: function() {
		return this.classes;
	}
	,activate: function() {
	}
	,requestBlur: function() {
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createComponentEvent(this,com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT_BLUR_REQUESTED));
		return this;
	}
	,requestFocus: function() {
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createComponentEvent(this,com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT_FOCUS_REQUESTED));
		return this;
	}
	,setDraggable: function(draggable) {
		if(this.draggable == draggable) return this;
		this.draggable = draggable;
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createComponentEvent(this,com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT_DRAGGABLE_CHANGED));
		return this;
	}
	,setEnabled: function(enabled) {
		if(this.enabled == enabled) return this;
		this.enabled = enabled;
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createComponentEvent(this,com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT_ENABLED_CHANGED));
		return this;
	}
	,setVisible: function(visible) {
		if(this.visible == visible) return this;
		this.visible = visible;
		if(visible) this.removeClass(com.wiris.util.ui.component.Component.CLASS_HIDDEN); else this.addClass(com.wiris.util.ui.component.Component.CLASS_HIDDEN);
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createComponentEvent(this,com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT_VISIBILITY_CHANGED));
		return this;
	}
	,hasFocus: function() {
		return this.componentStateManager.hasFocus();
	}
	,hasHover: function() {
		return this.componentStateManager.hasHover();
	}
	,isDraggable: function() {
		return this.draggable;
	}
	,isEnabled: function() {
		return this.enabled;
	}
	,isVisible: function() {
		return this.visible;
	}
	,setComponentBuilder: function(builder) {
		this.componentBuilder = builder;
	}
	,getComponentBuilder: function() {
		return this.componentBuilder;
	}
	,setElement: function(element) {
		this.element = element;
	}
	,getElement: function() {
		return this.element;
	}
	,setChildIndex: function(index) {
		this.childIndex = index;
	}
	,getChildIndex: function() {
		return this.childIndex;
	}
	,removeFromParent: function() {
		if(this.getParent() != null && js.Boot.__instanceof(this.getParent(),com.wiris.util.ui.component.Panel)) {
			var parent = this.getParent();
			parent.removeComponent(this.getChildIndex());
		}
		return this;
	}
	,setParent: function(parent) {
		this.parent = parent;
	}
	,getParent: function() {
		return this.parent;
	}
	,isChild: function(component) {
		return false;
	}
	,getComponentsByClassName: function(className) {
		var result = new Array();
		if(this.hasClass(className)) result.push(this);
		return result;
	}
	,getComponentById: function(id) {
		if(this.id == id) return this;
		return null;
	}
	,getHoveredComponent: function() {
		if(this.hasHover()) return this;
		return null;
	}
	,getChildren: function() {
		return null;
	}
	,setId: function(id) {
		this.id = id;
		this.changeStyle();
		return this;
	}
	,getId: function() {
		return this.id;
	}
	,resetListeners: function() {
		this.componentListeners = new Array();
		this.actionListeners = new Array();
		this.changeListeners = new Array();
		this.mouseListeners = new Array();
		this.mouseMotionListeners = new Array();
		this.touchListeners = new Array();
		this.focusListeners = new Array();
		this.keyListeners = new Array();
		this.dragAndDropListeners = new Array();
		this.defaultComponentListeners = new Array();
		this.defaultActionListeners = new Array();
		this.defaultChangeListeners = new Array();
		this.defaultMouseListeners = new Array();
		this.defaultMouseMotionListeners = new Array();
		this.defaultTouchListeners = new Array();
		this.defaultFocusListeners = new Array();
		this.defaultKeyListeners = new Array();
		this.defaultDragAndDropListeners = new Array();
		this.actionListenersLocked = false;
		this.actionListenersToRemove = new Array();
		this.actionListenersToAdd = new Array();
	}
	,actionListenersToAdd: null
	,actionListenersToRemove: null
	,actionListenersLocked: null
	,defaultDragAndDropListeners: null
	,defaultKeyListeners: null
	,defaultFocusListeners: null
	,defaultTouchListeners: null
	,defaultMouseMotionListeners: null
	,defaultMouseListeners: null
	,defaultChangeListeners: null
	,defaultActionListeners: null
	,defaultComponentListeners: null
	,dragAndDropListeners: null
	,keyListeners: null
	,focusListeners: null
	,touchListeners: null
	,mouseMotionListeners: null
	,mouseListeners: null
	,changeListeners: null
	,actionListeners: null
	,componentListeners: null
	,componentStateManager: null
	,keyScrollingEnabled: null
	,computedStyle: null
	,style: null
	,classes: null
	,childIndex: null
	,parent: null
	,tabindex: null
	,draggable: null
	,enabled: null
	,visible: null
	,componentBuilder: null
	,applicationClass: null
	,id: null
	,element: null
	,__class__: com.wiris.util.ui.component.Component
}
com.wiris.util.ui.component.Panel = $hxClasses["com.wiris.util.ui.component.Panel"] = function() {
	com.wiris.util.ui.component.Component.call(this);
	this.getStyle().setCSSVariable("--indentation-level","0");
	this.components = new Array();
	this.componentTreeListeners = new Array();
	this.defaultComponentTreeListeners = new Array();
	this.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL);
};
com.wiris.util.ui.component.Panel.__name__ = ["com","wiris","util","ui","component","Panel"];
com.wiris.util.ui.component.Panel.__super__ = com.wiris.util.ui.component.Component;
com.wiris.util.ui.component.Panel.prototype = $extend(com.wiris.util.ui.component.Component.prototype,{
	setChildrenEnabled: function(enabled) {
		var i = HxOverrides.iter(this.getComponents());
		while(i.hasNext()) {
			var child = i.next();
			child.setEnabled(enabled);
			if(js.Boot.__instanceof(child,com.wiris.util.ui.component.Panel)) child.setChildrenEnabled(enabled);
		}
	}
	,getIndentationLevel: function() {
		return Std.parseInt(this.getStyle().getCSSVariable("--indentation-level"));
	}
	,setIndentationLevel: function(level) {
		this.getStyle().setCSSVariable("--indentation-level",level + "");
	}
	,removeAllComponents: function() {
		var n = this.components.length;
		while(n > 0) {
			this.removeComponent(0);
			--n;
		}
	}
	,removeComponent: function(index) {
		var component = this.components.splice(index,1)[0];
		component.setParent(null);
		component.setChildIndex(-1);
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createComponentTreeEvent(this,com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT_CHILD_REMOVED,component,index,-1));
	}
	,moveComponent: function(index,destination) {
		if(index != destination) {
			var component = this.components.splice(index,1)[0];
			var newDestination = index < destination?destination - 1:destination;
			this.components.splice(newDestination,0,component);
			var i = Math.min(index,destination);
			var n = Math.max(index,destination);
			while(i <= n && i < this.components.length) {
				this.components[i].setChildIndex(i);
				++i;
			}
			this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createComponentTreeEvent(this,com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT_CHILD_MOVED,component,index,destination));
		}
	}
	,insertComponentAtImpl: function(component,index) {
		var i = this.components.length - 1;
		while(i >= index) {
			this.components[i].setChildIndex(i + 1);
			--i;
		}
		this.components.splice(index,0,component);
		component.setParent(this);
		component.setChildIndex(index);
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createComponentTreeEvent(this,com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT_CHILD_ADDED,component,index,-1));
	}
	,addComponentImpl: function(component) {
		this.components.push(component);
		component.setParent(this);
		component.setChildIndex(this.components.length - 1);
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createComponentTreeEvent(this,com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT_CHILD_ADDED,component,this.components.length - 1,-1));
	}
	,fireComponentTreeEvent: function(listener,e,componentTreeEventType) {
		if(listener == null) return;
		if(com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT_CHILD_ADDED == componentTreeEventType) listener.childAdded(e); else if(com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT_CHILD_MOVED == componentTreeEventType) listener.childMoved(e); else if(com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT_CHILD_REMOVED == componentTreeEventType) listener.childRemoved(e);
	}
	,fireEvent: function(e) {
		var eventType = e.getEventType();
		if(com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT == eventType) {
			var componentTreeEvent = e;
			var componentTreeEventType = componentTreeEvent.getComponentTreeEventType();
			var i = HxOverrides.iter(this.componentTreeListeners);
			while(i.hasNext() && e.isPropagating()) this.fireComponentTreeEvent(i.next(),componentTreeEvent,componentTreeEventType);
			i = HxOverrides.iter(this.defaultComponentTreeListeners);
			while(i.hasNext() && !e.defaultIsPrevented()) this.fireComponentTreeEvent(i.next(),componentTreeEvent,componentTreeEventType);
		} else com.wiris.util.ui.component.Component.prototype.fireEvent.call(this,e);
	}
	,addDefaultComponentTreeListener: function(listener) {
		this.defaultComponentTreeListeners.push(listener);
		return this;
	}
	,removeComponentTreeListener: function(listener) {
		HxOverrides.remove(this.componentTreeListeners,listener);
		return this;
	}
	,addComponentTreeListener: function(listener) {
		this.componentTreeListeners.push(listener);
		return this;
	}
	,getComponentsByClassName: function(className) {
		var result = com.wiris.util.ui.component.Component.prototype.getComponentsByClassName.call(this,className);
		var i = HxOverrides.iter(this.components);
		while(i.hasNext()) {
			var component = i.next();
			var partialResult = component.getComponentsByClassName(className);
			var j = HxOverrides.iter(partialResult);
			while(j.hasNext()) result.push(j.next());
		}
		return result;
	}
	,isChild: function(component) {
		if(com.wiris.system.ArrayEx.contains(this.components,component)) return true;
		var i = HxOverrides.iter(this.components);
		while(i.hasNext()) {
			var candidate = i.next();
			if(candidate.isChild(component)) return true;
		}
		return false;
	}
	,getComponentById: function(id) {
		var i = HxOverrides.iter(this.components);
		while(i.hasNext()) {
			var component = i.next().getComponentById(id);
			if(component != null) return component;
		}
		return com.wiris.util.ui.component.Component.prototype.getComponentById.call(this,id);
	}
	,getHoveredComponent: function() {
		var i = HxOverrides.iter(this.components);
		while(i.hasNext()) {
			var component = i.next().getHoveredComponent();
			if(component != null) return component;
		}
		return com.wiris.util.ui.component.Component.prototype.getHoveredComponent.call(this);
	}
	,getChildren: function() {
		return this.getComponents();
	}
	,getComponents: function() {
		return this.components;
	}
	,defaultComponentTreeListeners: null
	,componentTreeListeners: null
	,components: null
	,__class__: com.wiris.util.ui.component.Panel
});
com.wiris.util.ui.component.FlowPanel = $hxClasses["com.wiris.util.ui.component.FlowPanel"] = function(direction) {
	com.wiris.util.ui.component.Panel.call(this);
	this.addClass(com.wiris.util.ui.component.FlowPanel.CLASS_FLOW_PANEL).addClass(com.wiris.util.ui.component.FlowPanel.DIRECTION_CLASSES[direction]);
	this.direction = direction;
};
com.wiris.util.ui.component.FlowPanel.__name__ = ["com","wiris","util","ui","component","FlowPanel"];
com.wiris.util.ui.component.FlowPanel.newWithChild = function(direction,child) {
	var panel = new com.wiris.util.ui.component.FlowPanel(direction);
	panel.addComponent(child);
	return panel;
}
com.wiris.util.ui.component.FlowPanel.surroundWithBorder = function(child,borderSizeTop,borderSizeRight,borderSizeBottom,borderSizeLeft) {
	var panel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	panel.addComponent(child);
	panel.getStyle().setBorderSize(borderSizeTop,borderSizeRight,borderSizeBottom,borderSizeLeft);
	return panel;
}
com.wiris.util.ui.component.FlowPanel.__super__ = com.wiris.util.ui.component.Panel;
com.wiris.util.ui.component.FlowPanel.prototype = $extend(com.wiris.util.ui.component.Panel.prototype,{
	setDirection: function(direction) {
		this.removeClass(com.wiris.util.ui.component.FlowPanel.DIRECTION_CLASSES[this.direction]).addClass(com.wiris.util.ui.component.FlowPanel.DIRECTION_CLASSES[direction]);
		this.direction = direction;
	}
	,getDirection: function() {
		return this.direction;
	}
	,insertComponentAt: function(component,index) {
		this.insertComponentAtImpl(component,index);
	}
	,addComponent: function(component) {
		this.addComponentImpl(component);
	}
	,direction: null
	,__class__: com.wiris.util.ui.component.FlowPanel
});
com.wiris.quizzes.impl.ui.AnswerFeedbackImpl = $hxClasses["com.wiris.quizzes.impl.ui.AnswerFeedbackImpl"] = function(questionInstance,slot,authorAnswer,componentBuilder) {
	this.decorateAnswerField = true;
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.setApplicationClass(com.wiris.quizzes.impl.ui.AnswerFeedbackImpl.CLASS_QUIZZES_ANSWER_FEEDBACK).addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_SOLID);
	this.getStyle().setBackgroundColor(com.wiris.util.graphics.Color.fromARGB([0,0,0,0]));
	this.slot = slot;
	this.questionInstance = questionInstance;
	this.authorAnswer = authorAnswer;
	this.setComponentBuilder(componentBuilder);
	this.answerWeight = 1.0;
	this.embeddedComponent = null;
	this.answerFeedback = new com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent();
	this.answerFeedback.getStyle().setMargin(0,0,0,0);
	if(this.areQuestionObjectsNotNull()) this.answerFeedback.setPreviewAnswerFeedback(this.questionInstance,this.slot,this.authorAnswer);
	this.addComponent(this.answerFeedback);
};
com.wiris.quizzes.impl.ui.AnswerFeedbackImpl.__name__ = ["com","wiris","quizzes","impl","ui","AnswerFeedbackImpl"];
com.wiris.quizzes.impl.ui.AnswerFeedbackImpl.__interfaces__ = [com.wiris.quizzes.api.ui.AnswerFeedback];
com.wiris.quizzes.impl.ui.AnswerFeedbackImpl.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.AnswerFeedbackImpl.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	getElement: function() {
		if(com.wiris.util.ui.component.FlowPanel.prototype.getElement.call(this) == null) this.getComponentBuilder().buildComponent(this,null);
		return com.wiris.util.ui.component.FlowPanel.prototype.getElement.call(this);
	}
	,getCompoundAnswerFeedback: function(answer) {
		return this.answerFeedback.getCompoundAnswerFeedback(answer);
	}
	,getCompoundGrade: function(index) {
		var grade = this.areQuestionObjectsNotNull()?this.questionInstance.getCompoundGrade(this.slot,this.authorAnswer,index):-1.0;
		return grade * this.answerWeight;
	}
	,getGrade: function() {
		var grade = this.areQuestionObjectsNotNull()?this.questionInstance.getGrade(this.slot,this.authorAnswer):-1.0;
		return grade * this.answerWeight;
	}
	,getFeedbackText: function() {
		return this.answerFeedback.getFeedbackText();
	}
	,setAnswerWeight: function(fraction) {
		this.answerWeight = fraction;
	}
	,isShowEmbeddedFeedback: function() {
		return this.answerFeedback.isShowFeedback();
	}
	,isShowFieldDecorationFeedback: function() {
		return this.decorateAnswerField;
	}
	,showFieldDecorationFeedback: function(visible) {
		this.decorateAnswerField = visible;
	}
	,showAssertionsFeedback: function(visible) {
		this.answerFeedback.showAssertionsFeedback(visible);
	}
	,showCorrectAnswerFeedback: function(visible) {
		this.answerFeedback.showCorrectAnswerFeedback(visible);
	}
	,removeEmbedded: function(component) {
		if(this.embeddedComponent != null && component == this.embeddedComponent) {
			this.embeddedComponent.setEmbeddedFeedback(null);
			this.embeddedComponent = null;
		}
	}
	,setEmbedded: function(component) {
		this.embeddedComponent = component;
		this.embeddedComponent.setEmbeddedFeedback(this);
	}
	,areQuestionObjectsNotNull: function() {
		return this.slot != null && this.authorAnswer != null && this.questionInstance != null;
	}
	,answerWeight: null
	,decorateAnswerField: null
	,answerFeedback: null
	,embeddedComponent: null
	,authorAnswer: null
	,slot: null
	,questionInstance: null
	,__class__: com.wiris.quizzes.impl.ui.AnswerFeedbackImpl
});
if(!com.wiris.quizzes.impl.ui.controller) com.wiris.quizzes.impl.ui.controller = {}
com.wiris.quizzes.impl.ui.controller.ReservedWordsConsumer = $hxClasses["com.wiris.quizzes.impl.ui.controller.ReservedWordsConsumer"] = function() { }
com.wiris.quizzes.impl.ui.controller.ReservedWordsConsumer.__name__ = ["com","wiris","quizzes","impl","ui","controller","ReservedWordsConsumer"];
com.wiris.quizzes.impl.ui.controller.ReservedWordsConsumer.prototype = {
	getGrammarUrl: null
	,setMathtypeParameters: null
	,__class__: com.wiris.quizzes.impl.ui.controller.ReservedWordsConsumer
}
if(!com.wiris.util.ui.interaction) com.wiris.util.ui.interaction = {}
com.wiris.util.ui.interaction.MouseListener = $hxClasses["com.wiris.util.ui.interaction.MouseListener"] = function() { }
com.wiris.util.ui.interaction.MouseListener.__name__ = ["com","wiris","util","ui","interaction","MouseListener"];
com.wiris.util.ui.interaction.MouseListener.prototype = {
	mouseExit: null
	,mouseEnter: null
	,mouseRelease: null
	,mousePress: null
	,mouseDoubleClick: null
	,mouseClick: null
	,__class__: com.wiris.util.ui.interaction.MouseListener
}
com.wiris.util.ui.interaction.ChangeListener = $hxClasses["com.wiris.util.ui.interaction.ChangeListener"] = function() { }
com.wiris.util.ui.interaction.ChangeListener.__name__ = ["com","wiris","util","ui","interaction","ChangeListener"];
com.wiris.util.ui.interaction.ChangeListener.prototype = {
	stateChanged: null
	,__class__: com.wiris.util.ui.interaction.ChangeListener
}
com.wiris.util.ui.interaction.ActionListener = $hxClasses["com.wiris.util.ui.interaction.ActionListener"] = function() { }
com.wiris.util.ui.interaction.ActionListener.__name__ = ["com","wiris","util","ui","interaction","ActionListener"];
com.wiris.util.ui.interaction.ActionListener.prototype = {
	actionPerformed: null
	,__class__: com.wiris.util.ui.interaction.ActionListener
}
com.wiris.quizzes.impl.ui.AnswerFieldImpl = $hxClasses["com.wiris.quizzes.impl.ui.AnswerFieldImpl"] = function(questionInstance,slot,componentBuilder) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.setApplicationClass(com.wiris.quizzes.impl.ui.AnswerFieldImpl.CLASS_QUIZZES_ANSWER_FIELD);
	this.getStyle().setBackgroundColor(com.wiris.util.graphics.Color.fromText("#00000000"));
	this.readOnly = false;
	this.component = null;
	this.questionInstance = questionInstance;
	this.slot = slot;
	this.setComponentBuilder(componentBuilder);
	this.fieldType = com.wiris.quizzes.impl.QuizzesEnumUtils.string2answerFieldType(slot.getProperty(com.wiris.quizzes.api.PropertyName.ANSWER_FIELD_TYPE));
	this.compoundAnswer = slot.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER);
	this.contextPanel = new com.wiris.util.ui.component.ContextPanel();
	this.contextPanel.addClass(com.wiris.quizzes.impl.ui.AnswerFieldImpl.CLASS_QUIZZES_ANSWER_FIELD_DIALOG);
	this.contextPanel.getStyle().setPadding(8,4,8,4);
	this.contextPanel.setParent(this);
	this.contextPanel.setVisible(false);
	this.contextPanel.setOpenAnimationMode(com.wiris.util.ui.component.ContextPanel.ANIMATION_MODE_NONE);
	this.quizzesFieldListeners = new Array();
};
com.wiris.quizzes.impl.ui.AnswerFieldImpl.__name__ = ["com","wiris","quizzes","impl","ui","AnswerFieldImpl"];
com.wiris.quizzes.impl.ui.AnswerFieldImpl.__interfaces__ = [com.wiris.quizzes.impl.ui.controller.ReservedWordsConsumer,com.wiris.util.ui.interaction.MouseListener,com.wiris.util.ui.interaction.ChangeListener,com.wiris.quizzes.api.ui.AnswerField,com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.AnswerFieldImpl.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.AnswerFieldImpl.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	setTextInputSize: function(inputSize) {
		if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD || this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR) this.getComponent().setSize(inputSize);
	}
	,setEmbeddedAnswerFieldStyle: function(embedded) {
		if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD || this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR) {
			if(embedded) {
				this.addClass(com.wiris.quizzes.impl.ui.AnswerFieldImpl.CLASS_QUIZZES_EMBEDDED_ANSWER_FIELD).getStyle().setWidth(com.wiris.util.ui.Style.SIZE_AUTO).setMinWidth(com.wiris.util.ui.Style.SIZE_AUTO);
				var component = this.getComponent();
				component.addClass(com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_OUTLINED).getStyle().setMinWidth(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD?50:75).setMinHeight(20).setWidth(com.wiris.util.ui.Style.SIZE_AUTO);
				if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR) {
					var popupTextField = component;
					popupTextField.getButton().getStyle().setWidth(23).setHeight(23);
				}
			}
		}
	}
	,mouseExit: function(e) {
		this.contextPanel.setVisible(false);
	}
	,mouseEnter: function(e) {
		if(this.embeddedFeedback != null && this.embeddedFeedback.isShowEmbeddedFeedback()) {
			if(this.getFieldType() != com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR && this.isCompoundAnswer() == com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_COMPOUND_ANSWER_TRUE) {
				this.contextPanel.removeAllComponents();
				this.contextPanel.addComponent(this.embeddedFeedback.getCompoundAnswerFeedback(com.wiris.util.type.Arrays.indexOfElement(this.component.getComponents(),e.getSource())));
			}
			this.contextPanel.setVisible(true);
		}
	}
	,mouseRelease: function(e) {
	}
	,mousePress: function(e) {
	}
	,mouseDoubleClick: function(e) {
	}
	,mouseClick: function(e) {
	}
	,stateChanged: function(e) {
		this.setValue(e.getSource().getValue());
	}
	,answerChanged: function() {
		this.questionInstance.setSlotAnswer(this.slot,this.getValue());
		var _g = 0, _g1 = this.quizzesFieldListeners;
		while(_g < _g1.length) {
			var quizzesFieldListener = _g1[_g];
			++_g;
			quizzesFieldListener.contentChanged(this);
		}
	}
	,actionPerformed: function(e) {
		var action = e.getAction();
		var actionId = action.getId();
		if(actionId == com.wiris.quizzes.impl.ui.AnswerFieldImpl.STUDENT_ANSWER_CHANGED_ACTION_ID) {
			this.answerChanged();
			this.performAction(action);
		} else if(actionId == "contentChangeStarted") {
			var _g = 0, _g1 = this.quizzesFieldListeners;
			while(_g < _g1.length) {
				var quizzesFieldListener = _g1[_g];
				++_g;
				quizzesFieldListener.contentChangeStarted(this);
			}
		}
	}
	,getElement: function() {
		if(com.wiris.util.ui.component.FlowPanel.prototype.getElement.call(this) == null) {
			this.addComponent(this.getComponent());
			this.getComponentBuilder().buildComponent(this,this.getParent());
		}
		return com.wiris.util.ui.component.FlowPanel.prototype.getElement.call(this);
	}
	,setParent: function(parent) {
		com.wiris.util.ui.component.FlowPanel.prototype.setParent.call(this,parent);
		if(com.wiris.util.ui.component.FlowPanel.prototype.getElement.call(this) == null) this.addComponent(this.getComponent());
	}
	,setInitialContent: function(attempts) {
		if(this.slot.getInitialContent() != null) {
			var initialContent = this.slot.getInitialContent();
			var h = new com.wiris.quizzes.impl.HTMLTools();
			if(h.extractVariableNames(initialContent).length > 0) {
				initialContent = this.questionInstance.expandVariables(initialContent);
				if(h.extractVariableNames(initialContent).length > 0 && attempts < com.wiris.quizzes.impl.ui.AnswerFieldImpl.MAX_ATTEMPTS_TO_EXPAND_INITIAL_CONTENT_VARIABLES) {
					new com.wiris.quizzes.impl.ui.async.SetInitialContentTask(this,attempts);
					return;
				}
			}
			if(this.fieldType == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR) this.component.setInitialContent(initialContent,this.slot.getProperty(com.wiris.quizzes.api.PropertyName.GRAPH_LOCK_INITIAL_CONTENT) == "true"); else this.setValue(initialContent);
			this.answerChanged();
		}
	}
	,getMathtypeParameters: function(slot) {
		var p = new Hash();
		if(slot.getInitialContent() != null && slot.getInitialContent().indexOf(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.WRS_POSITIONABLE + "=\"false\"") != -1) p.set("detectHand","false");
		return p;
	}
	,setUpComponent: function() {
		this.component.addActionListener(this);
		this.component.addChangeListener(this);
		this.component.addMouseListener(this);
		if(this.questionInstance.getSlotAnswer(this.slot) != null && !(this.questionInstance.getSlotAnswer(this.slot) == "")) this.setValue(this.questionInstance.getSlotAnswer(this.slot)); else this.setInitialContent(0);
	}
	,reuseComponent: function(component) {
		var isAppropriateAnswerType = this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR && js.Boot.__instanceof(component,com.wiris.quizzes.impl.ui.component.GraphInputComponent) || this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR && js.Boot.__instanceof(component,com.wiris.quizzes.impl.ui.component.MathTypeInputComponent) || this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR && js.Boot.__instanceof(component,com.wiris.quizzes.impl.ui.component.MathTypePopupTextField) || this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD && js.Boot.__instanceof(component,com.wiris.util.ui.component.TextField);
		if(!isAppropriateAnswerType) throw "The provided component does not fit the answer field type of the slot represented by this answer field";
		if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR) {
			this.component = component;
			this.component.resetListeners();
			var graphInputComponent = this.component;
			var graphMode = this.slot.getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE);
			graphInputComponent.setGraphMode(graphMode);
			var toolbarDef = this.slot.getProperty(com.wiris.quizzes.api.PropertyName.GRAPH_TOOLBAR);
			if(toolbarDef != null) graphInputComponent.updateGraphToolbar(com.wiris.util.ui.controller.ToolbarDefinition.deserialize(toolbarDef));
			graphInputComponent.setDisplaySetting(com.wiris.util.graphics.DisplaySettings.DISPLAY_ELEMENT_NAMES,this.slot.getProperty(com.wiris.quizzes.api.PropertyName.GRAPH_SHOW_NAME_IN_LABEL));
			graphInputComponent.setDisplaySetting(com.wiris.util.graphics.DisplaySettings.DISPLAY_ELEMENT_VALUES,this.slot.getProperty(com.wiris.quizzes.api.PropertyName.GRAPH_SHOW_VALUE_IN_LABEL));
			graphInputComponent.setReadOnly(this.readOnly);
			graphInputComponent.activateMainAction();
		} else throw "Component reusing is only implemented for Graph answer type in this version";
		this.setUpComponent();
	}
	,getComponent: function() {
		if(this.component == null) {
			if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR) {
				var stringDef = this.slot.getProperty(com.wiris.quizzes.api.PropertyName.GRAPH_TOOLBAR);
				var parameters = new Hash();
				if(this.slot.getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE) == "sketch") parameters.set(com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_GRAPH_MODE,"sketch"); else {
					parameters.set(com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_ALLOW_ANIMATIONS,"true");
					if(stringDef != null) parameters.set(com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_TOOLBAR_DEFINITION,stringDef);
				}
				var displaySettings = new Hash();
				displaySettings.set(com.wiris.util.graphics.DisplaySettings.DISPLAY_ELEMENT_NAMES,this.slot.getProperty(com.wiris.quizzes.api.PropertyName.GRAPH_SHOW_NAME_IN_LABEL));
				displaySettings.set(com.wiris.util.graphics.DisplaySettings.DISPLAY_ELEMENT_VALUES,this.slot.getProperty(com.wiris.quizzes.api.PropertyName.GRAPH_SHOW_VALUE_IN_LABEL));
				displaySettings.set(com.wiris.util.graphics.DisplaySettings.MAGNETIC_GRID,this.slot.getProperty(com.wiris.quizzes.api.PropertyName.GRAPH_MAGNETIC_GRID));
				parameters.set(com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_DEFAULT_DISPLAY_SETTINGS,com.wiris.util.json.JSon.encode(displaySettings));
				this.component = new com.wiris.quizzes.impl.ui.component.GraphInputComponent(parameters);
				this.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setMaxWidth(800).setHeight(494);
				this.component.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setMaxWidth(800).setHeight(494).setMargin(20,0,20,0);
				this.component.setChangeAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.AnswerFieldImpl.STUDENT_ANSWER_CHANGED_ACTION_ID,null));
				this.component.setReadOnly(this.readOnly);
			} else if(this.isCompoundAnswer() == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE) {
				if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD) this.component = new com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField(this.slot,this.questionInstance,this); else {
					this.component = new com.wiris.quizzes.impl.ui.component.QuizzesCompoundMathTypePopupTextField(this.slot,this.questionInstance,this,this.getMathtypeParameters(this.slot));
					this.component.setGrammarUrl(this.getGrammarUrl(),true);
					new com.wiris.quizzes.impl.ui.controller.ReservedWordsRequestController(this).update();
				}
				this.component.setReadOnly(this.readOnly);
			} else if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD) {
				this.component = new com.wiris.util.ui.component.TextField();
				this.component.getStyle().setWidth(280);
				this.component.setChangeAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.AnswerFieldImpl.STUDENT_ANSWER_CHANGED_ACTION_ID,null));
				this.component.setReadOnly(this.readOnly);
				if(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().isForceLTR()) this.component.addClass(com.wiris.util.ui.component.TextField.CLASS_FORCE_LTR);
			} else if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR) {
				this.component = new com.wiris.quizzes.impl.ui.component.MathTypePopupTextField(this.getMathtypeParameters(this.slot));
				this.component.setReadOnly(this.readOnly);
				this.component.setGrammarUrl(this.getGrammarUrl(),true);
				new com.wiris.quizzes.impl.ui.controller.ReservedWordsRequestController(this).update();
				this.component.setChangeAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.AnswerFieldImpl.STUDENT_ANSWER_CHANGED_ACTION_ID,null));
			} else if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR) {
				this.component = new com.wiris.quizzes.impl.ui.component.MathTypeInputComponent(this.getMathtypeParameters(this.slot),true);
				this.component.getStyle().setMargin(0,0,5,0);
				this.component.setGrammarUrl(this.getGrammarUrl(),true);
				this.component.setReadOnly(this.readOnly);
				new com.wiris.quizzes.impl.ui.controller.ReservedWordsRequestController(this).update();
				this.component.setChangeAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.AnswerFieldImpl.STUDENT_ANSWER_CHANGED_ACTION_ID,null));
			}
			this.setUpComponent();
		}
		return this.component;
	}
	,isEmpty: function() {
		if(this.component == null) return true;
		if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR) return this.component.isEmpty(); else if(this.isCompoundAnswer() == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE) {
			if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD) return this.component.isEmpty(); else return this.component.isEmpty();
		} else if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD) return this.component.isEmpty(); else if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR) return this.component.isEmpty(); else if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR) return this.component.isEmpty();
		return true;
	}
	,setGrammarUrl: function(grammarUrl,check) {
		if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR) this.getComponent().setGrammarUrl(grammarUrl,check); else if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR) {
			if(this.isCompoundAnswer() == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE) this.getComponent().setGrammarUrl(grammarUrl,check); else this.getComponent().setGrammarUrl(grammarUrl,check);
		}
	}
	,getGrammarUrl: function() {
		var grammarUrl = this.slot.getGrammarUrl();
		grammarUrl += grammarUrl.indexOf("?") != -1?"&":"?";
		grammarUrl += "reservedWords=true&measureUnits=true&json=true";
		return grammarUrl;
	}
	,setMathtypeParameters: function(parameters) {
		if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR) this.getComponent().setParameters(parameters); else if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR) {
			if(this.isCompoundAnswer() == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE) this.getComponent().setParameters(parameters); else this.getComponent().setParameters(parameters);
		}
	}
	,setReadOnly: function(readOnly) {
		this.readOnly = readOnly;
		if(this.component != null) {
			if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR) this.component.setReadOnly(readOnly); else if(this.isCompoundAnswer() == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE) {
				if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD) this.component.setReadOnly(readOnly); else this.component.setReadOnly(readOnly);
			} else if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD) this.component.setReadOnly(readOnly); else if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR) this.component.setReadOnly(readOnly); else if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR) this.component.setReadOnly(readOnly);
		}
		if(this.readOnly) this.addClass(com.wiris.quizzes.impl.ui.AnswerFieldImpl.CLASS_READ_ONLY); else this.removeClass(com.wiris.quizzes.impl.ui.AnswerFieldImpl.CLASS_READ_ONLY);
	}
	,setGraphCustomToolbar: function(toolbar) {
		if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR) this.component.updateGraphToolbar(com.wiris.util.ui.controller.ToolbarDefinition.deserialize(toolbar));
	}
	,addQuizzesFieldListener: function(listener) {
		this.quizzesFieldListeners.push(listener);
	}
	,getContextPanel: function() {
		return this.contextPanel;
	}
	,setQuestionInstance: function(slot,questionInstance) {
		this.slot = slot;
		this.questionInstance = questionInstance;
		if(js.Boot.__instanceof(this.getComponent(),com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField)) this.getComponent().updateFields(slot,questionInstance);
		this.setInitialContent(0);
	}
	,getQuestionInstance: function() {
		return this.questionInstance;
	}
	,setValue: function(value) {
		if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD && !(this.isCompoundAnswer() == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE) && com.wiris.quizzes.impl.MathContent.getMathType(value) == com.wiris.quizzes.impl.MathContent.TYPE_MATHML) {
			var tools = new com.wiris.quizzes.impl.HTMLTools();
			value = tools.mathMLToText(value);
		}
		if(!(this.getComponent().getValue() == value)) this.getComponent().setValue(value);
		if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR && this.slot.getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE) == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH) {
			var elementsToHandwriteInSlotParameter = new Array();
			var elementsToHandwrite = new Array();
			var parsedValue = com.wiris.util.geometry.GeometryFile.readJSON(value);
			var parsedValueElementsIds = new Array();
			var _g1 = 0, _g = parsedValue.getElementsLength();
			while(_g1 < _g) {
				var i = _g1++;
				parsedValueElementsIds.push(parsedValue.getElement(i).getId());
			}
			if(this.slot.getProperty(com.wiris.quizzes.api.PropertyName.ELEMENTS_TO_HANDWRITE) != null) {
				var o = com.wiris.util.json.JSon.decode(this.slot.getProperty(com.wiris.quizzes.api.PropertyName.ELEMENTS_TO_HANDWRITE));
				var a = com.wiris.util.json.JSon.getArray(o);
				var _g1 = 0, _g = a.length;
				while(_g1 < _g) {
					var i = _g1++;
					elementsToHandwriteInSlotParameter.push(a[i].toString());
				}
			}
			if(parsedValueElementsIds.length != 0 && elementsToHandwriteInSlotParameter.length != 0) {
				var _g1 = 0, _g = elementsToHandwriteInSlotParameter.length;
				while(_g1 < _g) {
					var i = _g1++;
					var _g3 = 0, _g2 = parsedValueElementsIds.length;
					while(_g3 < _g2) {
						var j = _g3++;
						var auxiliar = parsedValueElementsIds[j];
						if(elementsToHandwriteInSlotParameter[i] == auxiliar) elementsToHandwrite.push(elementsToHandwriteInSlotParameter[i]);
					}
				}
			}
			var initialContent = this.slot.getInitialContent();
			var parsedInitialContent = com.wiris.util.geometry.GeometryFile.readJSON(initialContent);
			var parsedInitialContentElementsIds = new Array();
			var _g1 = 0, _g = parsedInitialContent.getElementsLength();
			while(_g1 < _g) {
				var i = _g1++;
				parsedInitialContentElementsIds.push(parsedInitialContent.getElement(i).getId());
			}
			var diff = com.wiris.util.type.Arrays.difference(parsedValueElementsIds,parsedInitialContentElementsIds);
			var elementsToBeRemoved = com.wiris.util.type.Arrays.difference(diff,elementsToHandwrite);
			if(elementsToHandwrite.length > 0 || elementsToBeRemoved.length > 0) {
				var params = new Hash();
				params.set("elements",elementsToHandwrite);
				params.set("elementsToBeRemoved",elementsToBeRemoved);
				this.getComponent().actionWithParams("elementsToHandwriting",params);
				value = this.getComponent().getValue();
				this.answerChanged();
				this.performAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.AnswerFieldImpl.STUDENT_ANSWER_CHANGED_ACTION_ID,com.wiris.quizzes.impl.ui.AnswerFieldImpl.STUDENT_ANSWER_CHANGED_ACTION_ID));
				this.getComponent().activateMainAction();
			}
		}
		this.questionInstance.setSlotAnswer(this.slot,value);
		this.changeState();
	}
	,getValue: function() {
		return this.component != null?this.component.getValue():null;
	}
	,getAnswerFieldComponent: function(listener) {
		if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR) this.getComponent().addInputComponentListener(new com.wiris.quizzes.impl.ui.async.InputComponentListenerWrapper(listener)); else if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR) this.getComponent().addInputComponentListener(new com.wiris.quizzes.impl.ui.async.InputComponentListenerWrapper(listener));
	}
	,setEditorInitialParams: function(parameters) {
		var parsedParameters = com.wiris.system.PropertiesTools.fromProperties(parameters);
		if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR) this.getComponent().setParameters(parsedParameters); else if(this.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR) {
			if(this.isCompoundAnswer() == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE) this.getComponent().setParameters(parsedParameters); else this.getComponent().setParameters(parsedParameters);
		}
	}
	,isCompoundAnswer: function() {
		return this.compoundAnswer;
	}
	,getFieldType: function() {
		return this.fieldType;
	}
	,setEmbeddedFeedbackImpl: function() {
		if(!(this.isCompoundAnswer() == com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_COMPOUND_ANSWER_TRUE)) this.contextPanel.addComponent(this.embeddedFeedback);
	}
	,decorateInputComponent: function(grade,component) {
		if(grade == 1.0) component.setStatus(com.wiris.util.ui.component.InputComponent.STATUS_CORRECT); else if(grade == 0.0) component.setStatus(com.wiris.util.ui.component.InputComponent.STATUS_ERROR); else if(grade == -1.0) component.setStatus(com.wiris.util.ui.component.InputComponent.STATUS_INDETERMINATE); else component.setStatus(com.wiris.util.ui.component.InputComponent.STATUS_WARNING);
	}
	,decorateField: function(feedback) {
		if(this.getFieldType() != com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR && this.isCompoundAnswer() == com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_COMPOUND_ANSWER_TRUE) {
			var textFields = this.getComponent().getTextFields();
			var _g = 0;
			while(_g < textFields.length) {
				var textField = textFields[_g];
				++_g;
				var grade = feedback != null?feedback.getCompoundGrade(com.wiris.util.type.Arrays.indexOfElement(textFields,textField)):-1.0;
				this.decorateInputComponent(grade,textField);
			}
		} else {
			var grade = feedback != null?feedback.getGrade():-1.0;
			this.decorateInputComponent(grade,this.getComponent());
		}
	}
	,setEmbeddedFeedback: function(feedback) {
		this.contextPanel.removeAllComponents();
		this.decorateField(null);
		this.embeddedFeedback = feedback;
		if(feedback != null) {
			if(feedback.isShowFieldDecorationFeedback()) this.decorateField(this.embeddedFeedback);
			if(feedback.isShowEmbeddedFeedback()) this.setEmbeddedFeedbackImpl();
		}
		this.changeState();
	}
	,quizzesFieldListeners: null
	,compoundAnswer: null
	,fieldType: null
	,questionInstance: null
	,slot: null
	,embeddedFeedback: null
	,contextPanel: null
	,component: null
	,readOnly: null
	,__class__: com.wiris.quizzes.impl.ui.AnswerFieldImpl
});
com.wiris.quizzes.impl.ui.AuthoringFieldImpl = $hxClasses["com.wiris.quizzes.impl.ui.AuthoringFieldImpl"] = function(context,componentBuilder) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.setApplicationClass(com.wiris.quizzes.impl.ui.AuthoringFieldImpl.CLASS_QUIZZES_AUTHORING_FIELD);
	this.readOnly = false;
	this.component = null;
	this.context = context;
	this.setComponentBuilder(componentBuilder);
	this.quizzesFieldListeners = new Array();
	var deprecationWarnings = context.getQuestion().getDeprecationWarnings();
	if(deprecationWarnings.length > 0 && !com.wiris.quizzes.impl.ui.AuthoringFieldImpl.hasShownDeprecatedWarning) {
		var warnDeprecatedDialog = com.wiris.util.ui.component.Dialog.newAcknowledgementDialog(context.t(com.wiris.quizzes.impl.ui.AuthoringFieldImpl.DEPRECATED_MESSAGE_TITLE),context.t(com.wiris.quizzes.impl.ui.AuthoringFieldImpl.DEPRECATED_MESSAGE_TEXT),context.t(com.wiris.quizzes.impl.ui.AuthoringFieldImpl.DEPRECATED_MESSAGE_BUTTON),null);
		this.addComponent(warnDeprecatedDialog);
		warnDeprecatedDialog.setRelative(false);
		var deprecatedFeaturesFlowPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
		var _g = 0;
		while(_g < deprecationWarnings.length) {
			var warning = deprecationWarnings[_g];
			++_g;
			var deprecatedFeatureExplanation = com.wiris.util.ui.component.Label.newWithText(context.t(warning));
			deprecatedFeatureExplanation.getStyle().setForegroundColor(com.wiris.util.graphics.Color.fromARGB([0,0,0,153]));
			deprecatedFeaturesFlowPanel.addComponent(deprecatedFeatureExplanation);
		}
		warnDeprecatedDialog.addControlComponent("extraInformation",deprecatedFeaturesFlowPanel);
		warnDeprecatedDialog.open();
		com.wiris.quizzes.impl.ui.AuthoringFieldImpl.hasShownDeprecatedWarning = true;
	}
};
com.wiris.quizzes.impl.ui.AuthoringFieldImpl.__name__ = ["com","wiris","quizzes","impl","ui","AuthoringFieldImpl"];
com.wiris.quizzes.impl.ui.AuthoringFieldImpl.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener,com.wiris.quizzes.api.ui.AuthoringField];
com.wiris.quizzes.impl.ui.AuthoringFieldImpl.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.AuthoringFieldImpl.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	actionPerformed: function(e) {
		var action = e.getAction();
		var actionId = action.getId();
		if(com.wiris.quizzes.impl.ui.AuthoringFieldImpl.AUTHORING_FIELD_CONTENT_CHANGED == actionId) this.fireContentChanged(); else if(com.wiris.quizzes.impl.ui.AuthoringFieldImpl.AUTHORING_FIELD_CONTENT_CHANGE_STARTED == actionId) this.fireContentChangeStarted();
	}
	,fireContentChangeStarted: function() {
		var _g = 0, _g1 = this.quizzesFieldListeners;
		while(_g < _g1.length) {
			var l = _g1[_g];
			++_g;
			l.contentChangeStarted(this);
		}
	}
	,fireContentChanged: function() {
		var _g = 0, _g1 = this.quizzesFieldListeners;
		while(_g < _g1.length) {
			var l = _g1[_g];
			++_g;
			l.contentChanged(this);
		}
	}
	,getElement: function() {
		if(com.wiris.util.ui.component.FlowPanel.prototype.getElement.call(this) == null) {
			this.addComponent(this.getComponent());
			if(this.context.isQuizzesStudio()) {
				if(!(this.getComponent().getApplicationClass() == com.wiris.quizzes.impl.ui.EmbeddedAuthoringField.CLASS_QUIZZES_EMBEDDED_AUTHORING_FIELD)) new com.wiris.quizzes.impl.ui.async.LoadSummaryTask(this,this.component.getSummary());
			}
			this.getComponentBuilder().buildComponent(this,null);
		}
		return com.wiris.util.ui.component.FlowPanel.prototype.getElement.call(this);
	}
	,getComponent: function() {
		if(this.component == null) {
			if(this.context.isQuizzesStudio()) this.component = new com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField(this.context); else if(this.context.isInlineQuizzesStudio()) {
				this.component = new com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent();
				this.component.setContext(this.context);
			} else if(this.context.isInlineMathEditor()) {
				this.component = new com.wiris.quizzes.impl.ui.component.AuthoringFieldMathTypeComponent(this.context,null);
				this.component.getComponent().getStyle().setWidth(450).setHeight(200).setMargin(0,0,5,0);
			} else return null;
			this.context.setAuthoringField(this.component);
			this.component.getComponent().addActionListener(this);
		}
		return this.component.getComponent();
	}
	,getQuestion: function() {
		return this.context.getInputQuestion();
	}
	,setReadOnly: function(readOnly) {
		this.readOnly = readOnly;
	}
	,addQuizzesFieldListener: function(listener) {
		this.quizzesFieldListeners.push(listener);
	}
	,setValue: function(value) {
		if(this.context.isQuizzesStudio()) this.getComponent().setValue(value); else if(this.context.isInlineQuizzesStudio()) this.getComponent().setValue(value); else if(this.context.isInlineMathEditor()) this.getComponent().setValue(value);
	}
	,getValue: function() {
		if(this.context.isQuizzesStudio()) return this.getComponent().getValue(); else if(this.context.isInlineQuizzesStudio()) return this.getComponent().getValue(); else if(this.context.isInlineMathEditor()) return this.getComponent().getValue();
		return null;
	}
	,showAnswerFieldPlainText: function(visible) {
		this.context.setOptAnswerFieldPlainText(visible);
	}
	,showAnswerFieldPopupEditor: function(visible) {
		this.context.setOptAnswerFieldPopupEditor(visible);
	}
	,showAnswerFieldInlineEditor: function(visible) {
		this.context.setOptAnswerFieldInlineEditor(visible);
	}
	,showGradingFunction: function(visible) {
		this.context.setOptGradingFunction(visible);
	}
	,showAuxiliaryTextInput: function(visible) {
		this.context.setOptAuxiliaryTextInput(visible);
	}
	,showAuxiliarTextInput: function(visible) {
		this.showAuxiliaryTextInput(visible);
	}
	,showAuxiliaryCasReplaceEditor: function(visible) {
		this.context.setOptAuxiliaryCasReplaceEditor(visible);
	}
	,showAuxiliarCasReplaceEditor: function(visible) {
		this.showAuxiliaryCasReplaceEditor(visible);
	}
	,showAuxiliaryCas: function(visible) {
		this.context.setOptAuxiliaryCas(visible);
	}
	,showAuxiliarCas: function(visible) {
		this.showAuxiliaryCas(visible);
	}
	,showGraphicSyntax: function(visible) {
		this.context.setOptGraphicSyntax(visible);
	}
	,showCorrectAnswer: function(visible) {
		this.context.setOptOpenAnswer(visible);
		this.context.setShowTestQuestion(visible);
		if(this.component != null) this.component.getComponent().changeState();
	}
	,showGradingCriteria: function(visible) {
		this.context.setShowGradingCriteria(visible);
	}
	,showVariablesDefinition: function(visible) {
		this.context.setShowVariablesDefinition(visible);
	}
	,showPreviewTab: function(visible) {
		this.context.setShowTestQuestion(visible);
	}
	,showVariablesTab: function(visible) {
		this.showVariablesDefinition(visible);
	}
	,showValidationTab: function(visible) {
		this.showGradingCriteria(visible);
	}
	,showCorrectAnswerTab: function(visible) {
		this.showCorrectAnswer(visible);
	}
	,setConfiguration: function(configuration) {
		var configJson;
		if(js.Boot.__instanceof(configuration,String)) configJson = com.wiris.util.json.JSon.decode(configuration); else configJson = com.wiris.system.JSONUtils.serialize(configuration);
		if(com.wiris.system.TypeTools.isHash(configJson)) this.context.setConfiguration(configJson); else throw "Invalid configuration.";
	}
	,getFieldType: function() {
		return this.context.getFieldType();
	}
	,setFieldType: function(type) {
		if(type != null) this.context.setFieldType(type); else throw "Invalid parameter type.";
	}
	,quizzesFieldListeners: null
	,context: null
	,component: null
	,readOnly: null
	,__class__: com.wiris.quizzes.impl.ui.AuthoringFieldImpl
});
com.wiris.quizzes.impl.ui.AuxiliaryCalcInputImpl = $hxClasses["com.wiris.quizzes.impl.ui.AuxiliaryCalcInputImpl"] = function(questionInstance,slot,componentBuilder) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.setApplicationClass(com.wiris.quizzes.impl.ui.AuxiliaryCalcInputImpl.CLASS_QUIZZES_AUXILIARY_CALCME_INPUT);
	this.questionInstance = questionInstance;
	this.context = com.wiris.quizzes.impl.ui.QuizzesContext.getInstance();
	this.value = questionInstance.getProperty(com.wiris.quizzes.api.PropertyName.CAS_SESSION);
	if(this.value == null) this.value = slot.getProperty(com.wiris.quizzes.api.PropertyName.CAS_SESSION);
	this.hideFileMenu = slot.getProperty(com.wiris.quizzes.api.PropertyName.AUXILIARY_CAS_HIDE_FILE_MENU);
	this.readOnly = false;
	this.setComponentBuilder(componentBuilder);
	this.listeners = new Array();
};
com.wiris.quizzes.impl.ui.AuxiliaryCalcInputImpl.__name__ = ["com","wiris","quizzes","impl","ui","AuxiliaryCalcInputImpl"];
com.wiris.quizzes.impl.ui.AuxiliaryCalcInputImpl.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener,com.wiris.quizzes.api.ui.AuxiliaryCasField];
com.wiris.quizzes.impl.ui.AuxiliaryCalcInputImpl.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.AuxiliaryCalcInputImpl.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	getElement: function() {
		if(com.wiris.util.ui.component.FlowPanel.prototype.getElement.call(this) == null) {
			this.addComponent(this.getComponent());
			this.getComponentBuilder().buildComponent(this,null);
		}
		return com.wiris.util.ui.component.FlowPanel.prototype.getElement.call(this);
	}
	,getComponent: function() {
		if(this.component == null) {
			var parameters = new Hash();
			parameters.set("lang",this.context.getLanguage());
			parameters.set("environment","quizzes-answer-field");
			parameters.set("hidefilemenu",this.hideFileMenu);
			this.component = new com.wiris.quizzes.impl.ui.component.CalcMeInputComponent(parameters);
			this.component.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setMinHeight(620);
			if(this.value != null && !(this.value == "")) this.component.setAlgorithm(this.value);
			this.component.addActionListener(this);
			this.component.setChangeAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.AuxiliaryCalcInputImpl.ACTION_ID_AUXILIARY_CALC_ME_CONTENT_CHANGED,null));
		}
		return this.component;
	}
	,fireContentChanged: function() {
		var _g = 0, _g1 = this.listeners;
		while(_g < _g1.length) {
			var l = _g1[_g];
			++_g;
			l.contentChanged(this);
		}
	}
	,actionPerformed: function(e) {
		var action = e.getAction();
		var actionId = action.getId();
		if(actionId == com.wiris.quizzes.impl.ui.AuxiliaryCalcInputImpl.ACTION_ID_AUXILIARY_CALC_ME_CONTENT_CHANGED) {
			this.questionInstance.setLocalData(com.wiris.quizzes.impl.LocalData.KEY_CAS_SESSION,this.getComponent().getValue());
			this.fireContentChanged();
		}
	}
	,setReadOnly: function(readOnly) {
		this.readOnly = readOnly;
	}
	,addQuizzesFieldListener: function(listener) {
		this.listeners.push(listener);
	}
	,setValue: function(value) {
		this.value = value;
		if(this.component != null) this.component.setAlgorithm(value);
	}
	,getValue: function() {
		return this.getComponent().getValue();
	}
	,listeners: null
	,component: null
	,readOnly: null
	,context: null
	,questionInstance: null
	,hideFileMenu: null
	,value: null
	,__class__: com.wiris.quizzes.impl.ui.AuxiliaryCalcInputImpl
});
com.wiris.quizzes.impl.ui.EditorInterfaceImpl = $hxClasses["com.wiris.quizzes.impl.ui.EditorInterfaceImpl"] = function() { }
com.wiris.quizzes.impl.ui.EditorInterfaceImpl.__name__ = ["com","wiris","quizzes","impl","ui","EditorInterfaceImpl"];
com.wiris.quizzes.impl.ui.EditorInterfaceImpl.__interfaces__ = [com.wiris.editor.EditorInterface];
com.wiris.quizzes.impl.ui.EditorInterfaceImpl.prototype = {
	isHandOpen: function() {
		return false;
	}
	,closeHand: function() {
	}
	,openHand: function() {
	}
	,getHand: function() {
		return null;
	}
	,insertInto: function(parent) {
	}
	,getElement: function() {
		return null;
	}
	,getMathMLWithAnnotations: function() {
		return null;
	}
	,getMathMLWithSemantics: function() {
		return null;
	}
	,setToolbarHidden: function(hidden) {
	}
	,setParams: function(parameters) {
	}
	,setMathML: function(mathml) {
	}
	,setAutosize: function(enabled) {
	}
	,isReady: function() {
		return false;
	}
	,isFormulaEmpty: function() {
		return false;
	}
	,getVersion: function() {
		return null;
	}
	,getMathML: function() {
		return null;
	}
	,getEditorModel: function() {
		return null;
	}
	,focus: function() {
	}
	,blur: function() {
	}
	,actionWithParam: function(action,paramValue) {
	}
	,action: function(action) {
	}
	,__class__: com.wiris.quizzes.impl.ui.EditorInterfaceImpl
}
com.wiris.util.ui.component.ShadowComponent = $hxClasses["com.wiris.util.ui.component.ShadowComponent"] = function(innerComponent) {
	com.wiris.util.ui.component.Component.call(this);
	this.addClass(com.wiris.util.ui.component.ShadowComponent.CLASS_SHADOW_COMPONENT);
	this.innerComponent = innerComponent;
};
com.wiris.util.ui.component.ShadowComponent.__name__ = ["com","wiris","util","ui","component","ShadowComponent"];
com.wiris.util.ui.component.ShadowComponent.__super__ = com.wiris.util.ui.component.Component;
com.wiris.util.ui.component.ShadowComponent.prototype = $extend(com.wiris.util.ui.component.Component.prototype,{
	isChild: function(component) {
		return this.innerComponent == component || this.innerComponent.isChild(component);
	}
	,setInnerComponent: function(innerComponent) {
		this.innerComponent = innerComponent;
		this.changeState();
	}
	,getInnerComponent: function() {
		return this.innerComponent;
	}
	,innerComponent: null
	,__class__: com.wiris.util.ui.component.ShadowComponent
});
com.wiris.quizzes.impl.ui.EmbeddedAuthoringField = $hxClasses["com.wiris.quizzes.impl.ui.EmbeddedAuthoringField"] = function(context,componentBuilder) {
	com.wiris.util.ui.component.ShadowComponent.call(this,null);
	this.getStyle().setWidth(280).setMinHeight(51).setBackgroundColor(com.wiris.util.graphics.Color.fromText("#00000008")).setMargin(0,2,0,2);
	this.setApplicationClass(com.wiris.quizzes.impl.ui.EmbeddedAuthoringField.CLASS_QUIZZES_EMBEDDED_AUTHORING_FIELD);
	this.readOnly = false;
	this.component = null;
	this.context = context;
	this.setComponentBuilder(componentBuilder);
	this.listeners = new Array();
};
com.wiris.quizzes.impl.ui.EmbeddedAuthoringField.__name__ = ["com","wiris","quizzes","impl","ui","EmbeddedAuthoringField"];
com.wiris.quizzes.impl.ui.EmbeddedAuthoringField.__interfaces__ = [com.wiris.quizzes.api.ui.AuthoringField];
com.wiris.quizzes.impl.ui.EmbeddedAuthoringField.__super__ = com.wiris.util.ui.component.ShadowComponent;
com.wiris.quizzes.impl.ui.EmbeddedAuthoringField.prototype = $extend(com.wiris.util.ui.component.ShadowComponent.prototype,{
	getElement: function() {
		if(com.wiris.util.ui.component.ShadowComponent.prototype.getElement.call(this) == null) {
			this.getComponent();
			this.getComponentBuilder().buildComponent(this,null);
		}
		return com.wiris.util.ui.component.ShadowComponent.prototype.getElement.call(this);
	}
	,getComponent: function() {
		if(this.getInnerComponent() == null) {
			var studio = new com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField(this.context);
			this.context.setAuthoringField(studio);
			var appWrapper = com.wiris.util.ui.component.FlowPanel.newWithChild(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT,studio);
			appWrapper.setApplicationClass(com.wiris.quizzes.impl.ui.EmbeddedAuthoringField.CLASS_QUIZZES_EMBEDDED_AUTHORING_FIELD);
			appWrapper.getStyle().setWidth(280);
			this.setInnerComponent(appWrapper);
		}
		return this.getInnerComponent();
	}
	,destroy: function() {
		this.embeddedAnswersEditor.destroyAuthoringField(this);
	}
	,analyzeHTML: function() {
		this.embeddedAnswersEditor.analyzeHTML();
	}
	,getQuestion: function() {
		return this.context.getInputQuestion();
	}
	,setReadOnly: function(readOnly) {
		this.readOnly = readOnly;
	}
	,addQuizzesFieldListener: function(listener) {
		this.listeners.push(listener);
	}
	,setValue: function(value) {
		this.getComponent().setValue(value);
	}
	,getValue: function() {
		return this.getComponent().getValue();
	}
	,showAnswerFieldPlainText: function(visible) {
		this.context.setOptAnswerFieldPlainText(visible);
	}
	,showAnswerFieldPopupEditor: function(visible) {
		this.context.setOptAnswerFieldPopupEditor(visible);
	}
	,showAnswerFieldInlineEditor: function(visible) {
		this.context.setOptAnswerFieldInlineEditor(visible);
	}
	,showGradingFunction: function(visible) {
		this.context.setOptGradingFunction(visible);
	}
	,showAuxiliaryTextInput: function(visible) {
		this.context.setOptAuxiliaryTextInput(visible);
	}
	,showAuxiliarTextInput: function(visible) {
		this.showAuxiliaryTextInput(visible);
	}
	,showAuxiliaryCasReplaceEditor: function(visible) {
		this.context.setOptAuxiliaryCasReplaceEditor(visible);
	}
	,showAuxiliarCasReplaceEditor: function(visible) {
		this.showAuxiliaryCasReplaceEditor(visible);
	}
	,showAuxiliaryCas: function(visible) {
		this.context.setOptAuxiliaryCas(visible);
	}
	,showAuxiliarCas: function(visible) {
		this.showAuxiliaryCas(visible);
	}
	,showGraphicSyntax: function(visible) {
		this.context.setOptGraphicSyntax(visible);
	}
	,showCorrectAnswer: function(visible) {
		this.context.setOptOpenAnswer(visible);
		this.context.setShowTestQuestion(visible);
	}
	,showGradingCriteria: function(visible) {
		this.context.setShowGradingCriteria(visible);
	}
	,showVariablesDefinition: function(visible) {
		this.context.setShowVariablesDefinition(visible);
	}
	,showPreviewTab: function(visible) {
		this.context.setShowTestQuestion(visible);
	}
	,showVariablesTab: function(visible) {
		this.showVariablesDefinition(visible);
	}
	,showValidationTab: function(visible) {
		this.showGradingCriteria(visible);
	}
	,showCorrectAnswerTab: function(visible) {
		this.showCorrectAnswer(visible);
	}
	,setConfiguration: function(configuration) {
		var configJson = com.wiris.system.JSONUtils.serialize(configuration);
		if(com.wiris.system.TypeTools.isHash(configJson)) this.context.setConfiguration(configJson); else throw "Invalid configuration.";
	}
	,getEmbeddedAnswersEditor: function() {
		return this.embeddedAnswersEditor;
	}
	,setEmbeddedAnswersEditor: function(embeddedAnswersEditor) {
		this.embeddedAnswersEditor = embeddedAnswersEditor;
	}
	,getEditableElement: function() {
		return this.editableElement;
	}
	,setEditableElement: function(editableElement) {
		if(this.editableElement != editableElement) {
			this.editableElement = editableElement;
			this.changeState();
		}
	}
	,getSlot: function() {
		return this.context.getInputSlot();
	}
	,setSlot: function(slot) {
		this.context.setInputSlot(slot);
	}
	,getFieldType: function() {
		return com.wiris.quizzes.api.ui.AuthoringFieldType.EMBEDDED_ANSWERS_EDITOR;
	}
	,setFieldType: function(type) {
		if(type != com.wiris.quizzes.api.ui.AuthoringFieldType.EMBEDDED_ANSWERS_EDITOR) throw "Invalid parameter type.";
	}
	,embeddedAnswersEditor: null
	,listeners: null
	,editableElement: null
	,context: null
	,component: null
	,readOnly: null
	,__class__: com.wiris.quizzes.impl.ui.EmbeddedAuthoringField
});
com.wiris.quizzes.impl.ui.QuizzesContext = $hxClasses["com.wiris.quizzes.impl.ui.QuizzesContext"] = function() {
	this.forceLTR = false;
	this.language = com.wiris.quizzes.impl.ui.QuizzesContext.DEFAULT_LANG;
	this.graphLanguage = com.wiris.quizzes.impl.ui.QuizzesContext.DEFAULT_LANG;
	this.translatorContainer = com.wiris.util.lang.WordsTranslatorContainer.newTranslatorContainerFromWords(new com.wiris.util.lang.Words("strings_quizzes",this.getAvailableLanguagesFromList(com.wiris.quizzes.impl.ui.QuizzesContext.AVAILABLE_LANGS)),com.wiris.quizzes.impl.ui.QuizzesContext.DEFAULT_LANG);
	this.graphTranslatorContainer = com.wiris.util.lang.WordsTranslatorContainer.newTranslatorContainerFromWords(new com.wiris.util.lang.Words("strings_graph",this.getAvailableLanguagesFromList(com.wiris.quizzes.impl.ui.QuizzesContext.GRAPH_AVAILABLE_LANGS)),com.wiris.quizzes.impl.ui.QuizzesContext.DEFAULT_LANG);
};
com.wiris.quizzes.impl.ui.QuizzesContext.__name__ = ["com","wiris","quizzes","impl","ui","QuizzesContext"];
com.wiris.quizzes.impl.ui.QuizzesContext.instance = null;
com.wiris.quizzes.impl.ui.QuizzesContext.getInstance = function() {
	if(com.wiris.quizzes.impl.ui.QuizzesContext.instance == null) com.wiris.quizzes.impl.ui.QuizzesContext.instance = new com.wiris.quizzes.impl.ui.QuizzesContext();
	return com.wiris.quizzes.impl.ui.QuizzesContext.instance;
}
com.wiris.quizzes.impl.ui.QuizzesContext.prototype = {
	isForceLTR: function() {
		return this.forceLTR;
	}
	,isLanguageForceLTR: function(lang) {
		return StringTools.startsWith(lang,"he");
	}
	,buildUrl: function(url) {
		var hashPosition = url.indexOf("#");
		var postHash = "";
		if(hashPosition != -1) {
			postHash = HxOverrides.substr(url,hashPosition,null);
			url = HxOverrides.substr(url,0,hashPosition);
		}
		return StringTools.replace(url,"${lang}","en") + (url.indexOf("?") > -1?"&":"?") + com.wiris.quizzes.impl.ui.QuizzesContext.UTM_SUFFIX + postHash;
	}
	,getTranslatorFromLang: function(lang) {
		if(com.wiris.system.ArrayEx.contains(this.translatorContainer.getAvailableLanguages(),com.wiris.util.lang.WordsTranslatorContainer.normalizeLangString(lang))) return this.translatorContainer.getTranslator(com.wiris.util.lang.WordsTranslatorContainer.normalizeLangString(lang));
		return this.translatorContainer.getTranslator(com.wiris.util.lang.WordsTranslatorContainer.normalizeLangString(com.wiris.quizzes.impl.ui.QuizzesContext.DEFAULT_LANG));
	}
	,getGraphTranslator: function() {
		return this.graphTranslatorContainer.getTranslator(this.graphLanguage);
	}
	,getTranslator: function() {
		return this.translatorContainer.getTranslator(this.language);
	}
	,setLanguage: function(language) {
		this.language = this.translatorContainer.getAvailableLang(language);
		this.graphLanguage = this.graphTranslatorContainer.getAvailableLang(language);
		this.forceLTR = this.isLanguageForceLTR(language);
	}
	,getLanguage: function() {
		return this.language;
	}
	,getAvailableLanguages: function() {
		return this.translatorContainer.getAvailableLanguages();
	}
	,graphT: function(code) {
		return this.getGraphTranslator().t(code);
	}
	,t: function(code) {
		return this.getTranslator().t(code);
	}
	,getAvailableLanguagesFromList: function(list) {
		var available = list.split(",").slice();
		var i = 0;
		while(i < available.length) available[i] = com.wiris.util.lang.WordsTranslatorContainer.normalizeLangString(available[i++]);
		return available;
	}
	,forceLTR: null
	,graphTranslatorContainer: null
	,translatorContainer: null
	,graphLanguage: null
	,language: null
	,__class__: com.wiris.quizzes.impl.ui.QuizzesContext
}
com.wiris.quizzes.impl.ui.QuizzesStudioConfig = $hxClasses["com.wiris.quizzes.impl.ui.QuizzesStudioConfig"] = function(configJson) {
	this.setConfiguration(configJson);
};
com.wiris.quizzes.impl.ui.QuizzesStudioConfig.__name__ = ["com","wiris","quizzes","impl","ui","QuizzesStudioConfig"];
com.wiris.quizzes.impl.ui.QuizzesStudioConfig.prototype = {
	isOptInputSyntax: function() {
		return this.getKey("inputOptions/inputSyntax");
	}
	,isOptInputType: function() {
		return this.getKey("inputOptions/answerInputMethod/answerInputField");
	}
	,isOptValidationOptions: function() {
		return this.getKey("validationOptions");
	}
	,isOptAnswerType: function() {
		return this.getKey("answerType");
	}
	,isOptShowVariablesDefinition: function() {
		return this.getKey("variablesFunctions");
	}
	,isOptGraphicSyntax: function() {
		return this.getKey("answerType/graphicSyntax");
	}
	,isOptAnswerFieldPlainText: function() {
		return this.getKey("inputOptions/answerInputMethod/answerInputField/answerInputFieldPlainText");
	}
	,isOptAnswerFieldPopupEditor: function() {
		return this.getKey("inputOptions/answerInputMethod/answerInputField/answerInputFieldPopupEditor");
	}
	,isOptAnswerFieldInlineEditor: function() {
		return this.getKey("inputOptions/answerInputMethod/answerInputField/answerInputFieldInlineEditor");
	}
	,isOptCompoundAnswer: function() {
		return this.getKey("inputOptions/compoundAnswer");
	}
	,isOptGradingFunction: function() {
		return this.getKey("validationOptions/studentAnswerComparison/customGradingFunction");
	}
	,isOptAuxiliaryTextInput: function() {
		return this.getKey("inputOptions/answerInputMethod/auxiliaryInput/auxiliaryTextInput");
	}
	,isOptAuxiliaryCasReplaceEditor: function() {
		return this.getKey("inputOptions/answerInputMethod/auxiliaryInput/auxiliaryInputReplace");
	}
	,isOptAuxiliaryCas: function() {
		return this.getKey("inputOptions/answerInputMethod/auxiliaryInput/auxiliaryInputDisplay");
	}
	,isOptOpenAnswer: function() {
		return this.getKey("questionAnswer");
	}
	,setOptGraphicSyntax: function(visible) {
		this.setKey("answerType/graphicSyntax",visible);
	}
	,setOptAnswerFieldPlainText: function(visible) {
		this.setKey("inputOptions/answerInputMethod/answerInputField/answerInputFieldPlainText",visible);
	}
	,setOptAnswerFieldPopupEditor: function(visible) {
		this.setKey("inputOptions/answerInputMethod/answerInputField/answerInputFieldPopupEditor",visible);
	}
	,setOptAnswerFieldInlineEditor: function(visible) {
		this.setKey("inputOptions/answerInputMethod/answerInputField/answerInputFieldInlineEditor",visible);
	}
	,setOptGradingFunction: function(visible) {
		this.setKey("validationOptions/studentAnswerComparison/customGradingFunction",visible);
	}
	,setOptAuxiliaryTextInput: function(visible) {
		this.setKey("inputOptions/answerInputMethod/auxiliaryInput/auxiliaryTextInput",visible);
	}
	,setOptAuxiliaryCasReplaceEditor: function(visible) {
		this.setKey("inputOptions/answerInputMethod/auxiliaryInput/auxiliaryInputReplace",visible);
	}
	,setOptAuxiliaryCas: function(visible) {
		this.setKey("inputOptions/answerInputMethod/auxiliaryInput/auxiliaryInputDisplay",visible);
	}
	,setOptOpenAnswer: function(visible) {
		this.setKey("questionAnswer",visible);
	}
	,setShowTestQuestion: function(visible) {
		this.setKey("testQuestion",visible);
	}
	,setShowVariablesDefinition: function(visible) {
		this.setKey("variablesFunctions",visible);
	}
	,setShowGradingCriteria: function(visible) {
		this.setKey("answerType",visible);
		this.setKey("inputOptions/answerInputMethod/answerInputField",visible);
		this.setKey("inputOptions/inputSyntax",visible);
		this.setKey("validationOptions",visible);
	}
	,setConfiguration: function(configJson) {
		this.configJson = configJson;
	}
	,setKeyImpl: function(key,value,config) {
		if(config.exists(key)) config.set(key,value); else {
			var pieces = key.split("/").slice();
			if(pieces.length > 1) {
				var configValue = config.get(pieces[0]);
				if(configValue == null || com.wiris.system.TypeTools.isHash(configValue) == false) {
					if(configValue != null) {
						var parentValue = com.wiris.util.json.JSon.getBoolean(configValue);
						if(!parentValue) return;
					}
					configValue = new Hash();
					config.set(pieces[0],configValue);
				}
				HxOverrides.remove(pieces,pieces[0]);
				this.setKeyImpl(pieces.join("/"),value,com.wiris.util.json.JSon.getHash(configValue));
			} else config.set(key,value);
		}
	}
	,setKey: function(key,value) {
		if(this.configJson == null) this.configJson = new Hash();
		this.setKeyImpl(key,value,this.configJson);
	}
	,getKeyImpl: function(key,config,defaultValue) {
		if(config.exists(key)) {
			var configValue = config.get(key);
			if(com.wiris.system.TypeTools.isHash(configValue)) return true; else return com.wiris.util.json.JSon.getBoolean(configValue);
		} else {
			var pieces = key.split("/").slice();
			if(pieces.length > 1) {
				if(config.exists(pieces[0])) {
					var configValue = config.get(pieces[0]);
					if(com.wiris.system.TypeTools.isHash(configValue)) {
						HxOverrides.remove(pieces,pieces[0]);
						return this.getKeyImpl(pieces.join("/"),com.wiris.util.json.JSon.getHash(configValue),defaultValue);
					} else return com.wiris.util.json.JSon.getBoolean(configValue);
				}
			}
		}
		return defaultValue;
	}
	,getKeyWithDefaultValue: function(key,defaultValue) {
		if(this.configJson != null) return this.getKeyImpl(key,this.configJson,defaultValue);
		return defaultValue;
	}
	,getKey: function(key) {
		return this.getKeyWithDefaultValue(key,true);
	}
	,configJson: null
	,__class__: com.wiris.quizzes.impl.ui.QuizzesStudioConfig
}
com.wiris.quizzes.impl.ui.QuizzesStudioContext = $hxClasses["com.wiris.quizzes.impl.ui.QuizzesStudioContext"] = function(question,slot,authorAnswer) {
	this.initialContentLocked = false;
	this.question = question;
	this.slot = slot;
	this.authorAnswer = authorAnswer;
	this.inputQuestion = question;
	this.inputSlot = slot;
	this.inputAuthorAnswer = authorAnswer;
	this.fieldType = com.wiris.quizzes.api.ui.AuthoringFieldType.INLINE_MATH_EDITOR;
	this.showAllOptions = false;
	this.featuredParams = new Array();
	this.featuredAssertions = new Array();
	this.featuredAssertions.push(com.wiris.quizzes.impl.Assertion.EQUIVALENT_SYMBOLIC);
	this.featuredAssertions.push(com.wiris.quizzes.impl.Assertion.EQUIVALENT_ALL);
	this.featuredAssertions.push(com.wiris.quizzes.impl.Assertion.EQUIVALENT_FUNCTION);
	this.globalContext = com.wiris.quizzes.impl.ui.QuizzesContext.getInstance();
	this.configuration = new com.wiris.quizzes.impl.ui.QuizzesStudioConfig(null);
	this.graphicalElements = new Hash();
	this.homePageStatusCorrectAnswerInitialContent = com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_CORRECT_ANSWER;
	this.homePageStatusGettingStarted = com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_MAIN_CONTENT;
};
com.wiris.quizzes.impl.ui.QuizzesStudioContext.__name__ = ["com","wiris","quizzes","impl","ui","QuizzesStudioContext"];
com.wiris.quizzes.impl.ui.QuizzesStudioContext.prototype = {
	isInitialContentLocked: function() {
		try {
			if(this.slot.getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.MATH) {
				var initialContent = this.slot.getInitialContent();
				if(initialContent == null || initialContent == "") return false;
				var mathml = com.wiris.util.xml.WXmlUtils.parseXML(initialContent);
				var math = mathml.nodeType == Xml.Document?mathml.firstElement():mathml;
				return math.get(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.WRS_POSITIONABLE) == "false";
			} else if(this.slot.getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC) return this.slot.getProperty(com.wiris.quizzes.api.PropertyName.GRAPH_LOCK_INITIAL_CONTENT) == "true";
			return false;
		} catch( t ) {
			return false;
		}
	}
	,getHomePageStatusGettingStarted: function() {
		return this.homePageStatusGettingStarted;
	}
	,setHomePageStatusGettingStarted: function(homePageStatusGettingStarted) {
		this.homePageStatusGettingStarted = homePageStatusGettingStarted;
	}
	,getHomePageStatusCorrectAnswerInitialContent: function() {
		return this.homePageStatusCorrectAnswerInitialContent;
	}
	,setHomePageStatusCorrectAnswerInitialContent: function(homePageStatusCorrectAnswerInitialContent) {
		this.homePageStatusCorrectAnswerInitialContent = homePageStatusCorrectAnswerInitialContent;
	}
	,importToInputQuestion: function() {
		var studioQimpl = this.getQuestionImpl();
		var inputQimpl = this.getInputQuestionImpl();
		inputQimpl.importQuestion(studioQimpl);
		var studioSimpl = this.getSlot();
		var inputSimpl = this.getInputSlot();
		inputSimpl.importSlot(studioSimpl);
		var studioAAimpl = this.getAuthorAnswer();
		var inputAAimpl = this.getInputAuthorAnswer();
		inputAAimpl.importAuthorAnswer(studioAAimpl);
	}
	,generateQuestionInstance: function() {
		this.questionInstance = com.wiris.quizzes.api.Quizzes.getInstance().newQuestionInstance(this.question);
		return this.questionInstance;
	}
	,getGraphicalRatios: function() {
		var active = this.getGraphicalElementsActive();
		var ret = new Array();
		var _g = 0;
		while(_g < active.length) {
			var elem = active[_g];
			++_g;
			ret.push(this.graphicalElements.get(elem) + "");
		}
		return ret;
	}
	,setGraphicalElements: function(graphicalElements) {
		this.graphicalElements = graphicalElements;
	}
	,getGraphicalElementsActive: function() {
		var ret = new Array();
		var i = this.graphicalElements.keys();
		while(i.hasNext()) {
			var elem = i.next();
			if(this.isGraphicalElementActive(elem)) ret.push(elem);
		}
		return ret;
	}
	,isGraphicalElementActive: function(elem) {
		return this.graphicalElements.exists(elem) && !(com.wiris.quizzes.impl.ui.QuizzesStudioContext.GRAPHICAL_ELEMENT_NOT_ACTIVE == this.graphicalElements.get(elem));
	}
	,getGraphicalElements: function() {
		return this.graphicalElements;
	}
	,isInlineMathEditor: function() {
		return this.fieldType == com.wiris.quizzes.api.ui.AuthoringFieldType.INLINE_MATH_EDITOR;
	}
	,isInlineQuizzesStudio: function() {
		return this.fieldType == com.wiris.quizzes.api.ui.AuthoringFieldType.INLINE_STUDIO;
	}
	,isQuizzesStudio: function() {
		return this.fieldType == com.wiris.quizzes.api.ui.AuthoringFieldType.STUDIO;
	}
	,isOptAuxiliaryTextInput: function() {
		return this.configuration.isOptAuxiliaryTextInput();
	}
	,isOptShowVariablesDefinition: function() {
		return this.configuration.isOptShowVariablesDefinition();
	}
	,isOptGraphicSyntax: function() {
		return this.configuration.isOptGraphicSyntax();
	}
	,isOptAnswerFieldPlainText: function() {
		return this.configuration.isOptAnswerFieldPlainText();
	}
	,isOptAnswerFieldPopupEditor: function() {
		return this.configuration.isOptAnswerFieldPopupEditor();
	}
	,isOptAnswerFieldInlineEditor: function() {
		return this.configuration.isOptAnswerFieldInlineEditor();
	}
	,isOptCompoundAnswer: function() {
		return this.configuration.isOptCompoundAnswer();
	}
	,isOptGradingFunction: function() {
		return this.configuration.isOptGradingFunction();
	}
	,isOptAuxiliaryCasReplaceEditor: function() {
		return this.configuration.isOptAuxiliaryCasReplaceEditor();
	}
	,isOptAuxiliaryCas: function() {
		return this.configuration.isOptAuxiliaryCas();
	}
	,isOptInputSyntax: function() {
		return this.configuration.isOptInputSyntax();
	}
	,isOptInputType: function() {
		return this.configuration.isOptInputType();
	}
	,isOptValidationOptions: function() {
		return this.configuration.isOptValidationOptions();
	}
	,isOptAnswerType: function() {
		return this.configuration.isOptAnswerType();
	}
	,isOptOpenAnswer: function() {
		return this.configuration.isOptOpenAnswer();
	}
	,getConfigurationKey: function(key) {
		return this.configuration.getKey(key);
	}
	,setOptGraphicSyntax: function(visible) {
		this.configuration.setOptGraphicSyntax(visible);
	}
	,setOptAnswerFieldPlainText: function(visible) {
		this.configuration.setOptAnswerFieldPlainText(visible);
	}
	,setOptAnswerFieldPopupEditor: function(visible) {
		this.configuration.setOptAnswerFieldPopupEditor(visible);
	}
	,setOptAnswerFieldInlineEditor: function(visible) {
		this.configuration.setOptAnswerFieldInlineEditor(visible);
		var qimpl = this.question.getImpl();
		if(!this.configuration.isOptAnswerFieldInlineEditor() && qimpl.getLocalData(com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_INPUT_FIELD) == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_INPUT_FIELD_INLINE_EDITOR) {
			if(this.configuration.isOptAnswerFieldPlainText()) qimpl.setLocalData(com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_INPUT_FIELD,com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_INPUT_FIELD_PLAIN_TEXT);
		}
	}
	,setOptGradingFunction: function(visible) {
		this.configuration.setOptGradingFunction(visible);
	}
	,setOptAuxiliaryTextInput: function(visible) {
		this.configuration.setOptAuxiliaryTextInput(visible);
	}
	,setOptAuxiliaryCasReplaceEditor: function(visible) {
		this.configuration.setOptAuxiliaryCasReplaceEditor(visible);
	}
	,setOptAuxiliaryCas: function(visible) {
		this.configuration.setOptAuxiliaryCas(visible);
	}
	,setOptOpenAnswer: function(visible) {
		this.configuration.setOptOpenAnswer(visible);
	}
	,setShowTestQuestion: function(visible) {
		this.configuration.setShowTestQuestion(visible);
	}
	,setShowVariablesDefinition: function(visible) {
		this.configuration.setShowVariablesDefinition(visible);
	}
	,setShowGradingCriteria: function(visible) {
		this.configuration.setShowGradingCriteria(visible);
	}
	,setConfiguration: function(configuration) {
		this.configuration.setConfiguration(configuration);
	}
	,setPreviewCorrectAnswerUpdated: function(correctAnswerUpdated) {
		this.correctAnswerUpdated = correctAnswerUpdated;
	}
	,setShowAllOptions: function(showAllOptions) {
		this.showAllOptions = showAllOptions;
	}
	,setAuthoringField: function(authoringField) {
		this.authoringField = authoringField;
	}
	,setFieldType: function(fieldType) {
		this.fieldType = fieldType;
	}
	,setFeaturedAssertions: function(featuredAssertions) {
		this.featuredAssertions = featuredAssertions;
	}
	,setFeaturedParams: function(featuredParams) {
		this.featuredParams = featuredParams;
	}
	,setMathTypeParameters: function(mathTypeParameters) {
		this.mathTypeParameters = mathTypeParameters;
	}
	,setInputAuthorAnswer: function(authorAnswer) {
		this.inputAuthorAnswer = authorAnswer;
	}
	,setInputSlot: function(slot) {
		this.inputSlot = slot;
	}
	,setInputQuestion: function(question) {
		this.inputQuestion = question;
	}
	,setAuthorAnswer: function(authorAnswer) {
		this.authorAnswer = authorAnswer;
	}
	,setSlot: function(slot) {
		this.slot = slot;
	}
	,setQuestionInstance: function(questionInstance) {
		this.questionInstance = questionInstance;
	}
	,setQuestion: function(question) {
		this.question = question;
	}
	,isPreviewCorrectAnswerUpdated: function() {
		return this.correctAnswerUpdated;
	}
	,isShowAllOptions: function() {
		return this.showAllOptions || !this.isOptOpenAnswer();
	}
	,getGlobalContext: function() {
		return this.globalContext;
	}
	,getAuthoringField: function() {
		return this.authoringField;
	}
	,getFieldType: function() {
		return this.fieldType;
	}
	,getFeaturedAssertions: function() {
		return this.featuredAssertions;
	}
	,getFeaturedParams: function() {
		return this.featuredParams;
	}
	,getReservedWords: function() {
		return this.mathTypeParameters != null?this.mathTypeParameters.get("reservedWords"):null;
	}
	,getMathTypeParameters: function() {
		return this.mathTypeParameters;
	}
	,getGrammarUrl: function() {
		var grammarUrl = this.slot.getGrammarUrl();
		grammarUrl += grammarUrl.indexOf("?") != -1?"&":"?";
		grammarUrl += "reservedWords=true&measureUnits=true&json=true";
		return grammarUrl;
	}
	,getInputAuthorAnswer: function() {
		return this.inputAuthorAnswer;
	}
	,getInputSlot: function() {
		return this.inputSlot;
	}
	,getInputQuestionImpl: function() {
		return this.inputQuestion.getImpl();
	}
	,getInputQuestion: function() {
		return this.inputQuestion;
	}
	,getAuthorAnswer: function() {
		return this.authorAnswer;
	}
	,getSlot: function() {
		return this.slot;
	}
	,getQuestionInstanceImpl: function() {
		return this.questionInstance;
	}
	,getQuestionInstance: function() {
		return this.questionInstance;
	}
	,getQuestionImpl: function() {
		return this.question.getImpl();
	}
	,getQuestion: function() {
		return this.question;
	}
	,getTranslator: function() {
		return this.globalContext.getTranslator();
	}
	,getLanguage: function() {
		return this.globalContext.getLanguage();
	}
	,graphT: function(code) {
		return this.globalContext.graphT(code);
	}
	,t: function(code) {
		return this.globalContext.t(code);
	}
	,initialContentLocked: null
	,homePageStatusGettingStarted: null
	,homePageStatusCorrectAnswerInitialContent: null
	,configuration: null
	,globalContext: null
	,fieldType: null
	,authoringField: null
	,graphicalElements: null
	,correctAnswerUpdated: null
	,showAllOptions: null
	,featuredAssertions: null
	,featuredParams: null
	,mathTypeParameters: null
	,inputAuthorAnswer: null
	,inputSlot: null
	,inputQuestion: null
	,authorAnswer: null
	,slot: null
	,questionInstance: null
	,question: null
	,__class__: com.wiris.quizzes.impl.ui.QuizzesStudioContext
}
com.wiris.util.ui.interaction.InputComponentListener = $hxClasses["com.wiris.util.ui.interaction.InputComponentListener"] = function() { }
com.wiris.util.ui.interaction.InputComponentListener.__name__ = ["com","wiris","util","ui","interaction","InputComponentListener"];
com.wiris.util.ui.interaction.InputComponentListener.prototype = {
	onSetComponent: null
	,__class__: com.wiris.util.ui.interaction.InputComponentListener
}
if(!com.wiris.quizzes.impl.ui.async) com.wiris.quizzes.impl.ui.async = {}
com.wiris.quizzes.impl.ui.async.InputComponentListenerWrapper = $hxClasses["com.wiris.quizzes.impl.ui.async.InputComponentListenerWrapper"] = function(apiListener) {
	this.apiListener = apiListener;
};
com.wiris.quizzes.impl.ui.async.InputComponentListenerWrapper.__name__ = ["com","wiris","quizzes","impl","ui","async","InputComponentListenerWrapper"];
com.wiris.quizzes.impl.ui.async.InputComponentListenerWrapper.__interfaces__ = [com.wiris.util.ui.interaction.InputComponentListener];
com.wiris.quizzes.impl.ui.async.InputComponentListenerWrapper.prototype = {
	onSetComponent: function(component) {
		if(js.Boot.__instanceof(component,com.wiris.quizzes.impl.ui.component.MathTypeInputComponent)) this.apiListener.onGetAnswerFieldComponent(component.getEditor()); else if(js.Boot.__instanceof(component,com.wiris.quizzes.impl.ui.component.GraphInputComponent)) this.apiListener.onGetAnswerFieldComponent(component.getGraph());
	}
	,apiListener: null
	,__class__: com.wiris.quizzes.impl.ui.async.InputComponentListenerWrapper
}
com.wiris.util.sys.TimerTask = $hxClasses["com.wiris.util.sys.TimerTask"] = function() { }
com.wiris.util.sys.TimerTask.__name__ = ["com","wiris","util","sys","TimerTask"];
com.wiris.util.sys.TimerTask.prototype = {
	run: null
	,__class__: com.wiris.util.sys.TimerTask
}
com.wiris.quizzes.impl.ui.async.LoadAnswerTask = $hxClasses["com.wiris.quizzes.impl.ui.async.LoadAnswerTask"] = function(studentAnswerComponent,questionInstanceImpl,slot) {
	this.studentAnswerComponent = studentAnswerComponent;
	this.questionInstanceImpl = questionInstanceImpl;
	this.slot = slot;
	new com.wiris.util.sys.TimerProxy(10,true,this);
};
com.wiris.quizzes.impl.ui.async.LoadAnswerTask.__name__ = ["com","wiris","quizzes","impl","ui","async","LoadAnswerTask"];
com.wiris.quizzes.impl.ui.async.LoadAnswerTask.__interfaces__ = [com.wiris.util.sys.TimerTask];
com.wiris.quizzes.impl.ui.async.LoadAnswerTask.prototype = {
	run: function(timer) {
		this.studentAnswerComponent.emptyStudentAnswerImpl(this.questionInstanceImpl,this.slot);
	}
	,slot: null
	,questionInstanceImpl: null
	,studentAnswerComponent: null
	,__class__: com.wiris.quizzes.impl.ui.async.LoadAnswerTask
}
com.wiris.quizzes.impl.ui.async.LoadSummaryTask = $hxClasses["com.wiris.quizzes.impl.ui.async.LoadSummaryTask"] = function(authoringField,summary) {
	this.authoringField = authoringField;
	this.summary = summary;
	new com.wiris.util.sys.TimerProxy(500,true,this);
};
com.wiris.quizzes.impl.ui.async.LoadSummaryTask.__name__ = ["com","wiris","quizzes","impl","ui","async","LoadSummaryTask"];
com.wiris.quizzes.impl.ui.async.LoadSummaryTask.__interfaces__ = [com.wiris.util.sys.TimerTask];
com.wiris.quizzes.impl.ui.async.LoadSummaryTask.prototype = {
	run: function(timer) {
		this.authoringField.addComponent(this.summary);
	}
	,summary: null
	,authoringField: null
	,__class__: com.wiris.quizzes.impl.ui.async.LoadSummaryTask
}
com.wiris.quizzes.impl.ui.async.SetInitialContentTask = $hxClasses["com.wiris.quizzes.impl.ui.async.SetInitialContentTask"] = function(answerField,attempts) {
	this.answerField = answerField;
	this.attempts = attempts;
	new com.wiris.util.sys.TimerProxy(500,true,this);
};
com.wiris.quizzes.impl.ui.async.SetInitialContentTask.__name__ = ["com","wiris","quizzes","impl","ui","async","SetInitialContentTask"];
com.wiris.quizzes.impl.ui.async.SetInitialContentTask.__interfaces__ = [com.wiris.util.sys.TimerTask];
com.wiris.quizzes.impl.ui.async.SetInitialContentTask.prototype = {
	run: function(timer) {
		this.answerField.setInitialContent(this.attempts + 1);
	}
	,attempts: null
	,answerField: null
	,__class__: com.wiris.quizzes.impl.ui.async.SetInitialContentTask
}
com.wiris.quizzes.impl.ui.async.UpdateCalcMeImaginaryUnitTask = $hxClasses["com.wiris.quizzes.impl.ui.async.UpdateCalcMeImaginaryUnitTask"] = function(controller,calcmeParams) {
	this.controller = controller;
	this.calcmeParams = calcmeParams;
	new com.wiris.util.sys.TimerProxy(750,true,this);
};
com.wiris.quizzes.impl.ui.async.UpdateCalcMeImaginaryUnitTask.__name__ = ["com","wiris","quizzes","impl","ui","async","UpdateCalcMeImaginaryUnitTask"];
com.wiris.quizzes.impl.ui.async.UpdateCalcMeImaginaryUnitTask.__interfaces__ = [com.wiris.util.sys.TimerTask];
com.wiris.quizzes.impl.ui.async.UpdateCalcMeImaginaryUnitTask.prototype = {
	run: function(timer) {
		this.controller.algorithmEditorActionWithParams("setImaginaryUnitRestrictions",this.calcmeParams);
	}
	,controller: null
	,calcmeParams: null
	,__class__: com.wiris.quizzes.impl.ui.async.UpdateCalcMeImaginaryUnitTask
}
com.wiris.quizzes.impl.ui.async.UpdateCalcMeSeparatorTask = $hxClasses["com.wiris.quizzes.impl.ui.async.UpdateCalcMeSeparatorTask"] = function(controller,calcmeParams) {
	this.controller = controller;
	this.calcmeParams = calcmeParams;
	new com.wiris.util.sys.TimerProxy(750,true,this);
};
com.wiris.quizzes.impl.ui.async.UpdateCalcMeSeparatorTask.__name__ = ["com","wiris","quizzes","impl","ui","async","UpdateCalcMeSeparatorTask"];
com.wiris.quizzes.impl.ui.async.UpdateCalcMeSeparatorTask.__interfaces__ = [com.wiris.util.sys.TimerTask];
com.wiris.quizzes.impl.ui.async.UpdateCalcMeSeparatorTask.prototype = {
	run: function(timer) {
		this.controller.algorithmEditorActionWithParams("setSeparatorRestrictions",this.calcmeParams);
	}
	,controller: null
	,calcmeParams: null
	,__class__: com.wiris.quizzes.impl.ui.async.UpdateCalcMeSeparatorTask
}
if(!com.wiris.quizzes.impl.ui.component) com.wiris.quizzes.impl.ui.component = {}
com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent"] = function() {
	this.assertionsFeedback = true;
	this.correctAnswerFeedback = true;
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent.CLASS_STUDENT_ANSWER_FEEDBACK);
	this.getStyle().setMargin(0,0,24,0).setBackgroundColor(com.wiris.util.graphics.Color.fromARGB([0,0,0,0]));
	this.context = com.wiris.quizzes.impl.ui.QuizzesContext.getInstance();
	this.answerFeedbackLabels = new Array();
	this.assertionFeedbackLists = new Array();
};
com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","AnswerFeedbackComponent"];
com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	getFeedbackText: function() {
		return "";
	}
	,getAssertion: function(name,slot,authorAnswer) {
		if(com.wiris.quizzes.impl.Assertion.isSyntacticName(name) && slot.getSyntax().getName() == com.wiris.quizzes.impl.QuizzesEnumUtils.string2SyntaxName(name)) return slot.getSyntax(); else if(com.wiris.quizzes.impl.Assertion.isEquivalenceName(name) && authorAnswer.getComparison().getName() == com.wiris.quizzes.impl.QuizzesEnumUtils.string2ComparisonName(name)) return authorAnswer.getComparison(); else if(!com.wiris.quizzes.impl.Assertion.isEquivalenceName(name) && !com.wiris.quizzes.impl.Assertion.isSyntacticName(name)) return authorAnswer.getValidation(com.wiris.quizzes.impl.QuizzesEnumUtils.string2ValidationName(name));
		return null;
	}
	,showAssertionsFeedback: function(visible) {
		this.assertionsFeedback = visible;
	}
	,showCorrectAnswerFeedback: function(visible) {
		this.correctAnswerFeedback = visible;
	}
	,isAssertionDisplayed: function(assertion) {
		return !(assertion == com.wiris.quizzes.impl.Assertion.EQUIVALENT_ALL) && !com.wiris.quizzes.impl.Assertion.isSyntacticName(assertion);
	}
	,getCompoundAnswerFeedback: function(answer) {
		var feedback = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
		feedback.addClass(com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent.CLASS_STUDENT_ANSWER_FEEDBACK);
		feedback.addComponent(this.answerFeedbackLabels[answer + 1]);
		feedback.addComponent(this.assertionFeedbackLists[answer]);
		return feedback;
	}
	,getAssertionFeedback: function(assertionName,slot,authorAnswer) {
		var assertion = this.getAssertion(assertionName,slot,authorAnswer);
		var feedback = this.context.t("quizzes_studio_test_question_student_answer_feedback_assertion_" + assertionName + "_label");
		if(assertion != null && assertion.parameters != null) {
			if(assertion.name == com.wiris.quizzes.impl.Assertion.CHECK_PRECISION) {
				var min = assertion.getParam("min");
				var max = assertion.getParam("max");
				if("" == min && "" == max) return null; else if("" == min && !("" == max)) feedback = this.context.t("quizzes_studio_test_question_student_answer_feedback_assertion_check_precision_max_label"); else if(!("" == min) && "" == max) feedback = this.context.t("quizzes_studio_test_question_student_answer_feedback_assertion_check_precision_min_label"); else if(min == max) feedback = this.context.t("quizzes_studio_test_question_student_answer_feedback_assertion_check_precision_equal_label"); else feedback = this.context.t("quizzes_studio_test_question_student_answer_feedback_assertion_check_precision_label");
				feedback = StringTools.replace(feedback,"${min}",min);
				feedback = StringTools.replace(feedback,"${max}",max);
				feedback = StringTools.replace(feedback,"${relative}",this.context.t(assertion.getParam("relative") == "true"?"quizzes_studio_test_question_student_answer_feedback_assertion_check_precision_significant_figures_label":"quizzes_studio_test_question_student_answer_feedback_assertion_check_precision_decimal_places_label"));
			} else {
				var j = HxOverrides.iter(assertion.parameters);
				while(j.hasNext()) {
					var param = j.next();
					feedback = StringTools.replace(feedback,"${" + param.name + "}",param.content);
				}
			}
		}
		return feedback;
	}
	,getCompoundAnswers: function(correctAnswer) {
		var mathContent = new com.wiris.quizzes.impl.MathContent();
		mathContent.set(correctAnswer);
		var compoundAnswers = com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswer(mathContent);
		var i = HxOverrides.iter(compoundAnswers);
		while(i.hasNext()) {
			var answer = i.next();
			answer[0] = StringTools.replace(answer[0],"<mo>=</mo>","");
		}
		return compoundAnswers;
	}
	,resetPreviewAnswerFeedback: function(instance,slot,authorAnswer) {
		instance.clearChecks();
		this.setPreviewAnswerFeedback(instance,slot,authorAnswer);
	}
	,getAssertionCheckByName: function(assertionChecks,name) {
		var i = HxOverrides.iter(assertionChecks);
		while(i.hasNext()) {
			var assertionCheck = i.next();
			if(assertionCheck.getAssertionName() == name) return assertionCheck;
		}
		return null;
	}
	,createListItem: function(name,value,slot,authorAnswer,feedbackList) {
		var primary;
		var feedback = this.getAssertionFeedback(name,slot,authorAnswer);
		if(value == 1.0) {
			primary = com.wiris.util.ui.component.IconBox.newWithMaterialIcon("check");
			primary.getStyle().setForegroundColor(com.wiris.util.graphics.Color.fromText("#318849"));
		} else if(value == 0.0) {
			primary = com.wiris.util.ui.component.IconBox.newWithMaterialIcon("clear");
			primary.getStyle().setForegroundColor(com.wiris.util.graphics.Color.fromText("#FF0000"));
		} else if(value < 0) {
			primary = com.wiris.util.ui.component.IconBox.newWithMaterialIcon("check");
			primary.setVisible(false);
		} else {
			primary = new com.wiris.util.ui.component.ProgressCircle();
			primary.setProgress(value * 100);
		}
		return feedbackList.addItem(primary,feedback,null);
	}
	,createLabel: function(feedback,compoundName,color) {
		var label;
		if(compoundName != null) {
			var labels = new Array();
			labels.push(com.wiris.quizzes.impl.ui.component.MathLabel.newWithText(compoundName));
			labels.push(com.wiris.util.ui.component.Label.newWithText(" — "));
			labels.push(com.wiris.util.ui.component.Label.newWithText(feedback));
			label = com.wiris.util.ui.component.CompositeLabel.newImportantFromLabelArray(labels);
		} else label = com.wiris.util.ui.component.Label.newImportantWithText(feedback);
		label.getStyle().setMargin(8,0,0,0).setForegroundColor(color);
		return label;
	}
	,createAssertionFeedbackListImpl: function(assertionChecks,comparison,validations,slot,authorAnswer,fromCompoundPart) {
		var feedbackList = new com.wiris.util.ui.component.List();
		feedbackList.getStyle().setWidth(450);
		if(comparison != null) {
			var comparisonName = com.wiris.quizzes.impl.QuizzesEnumUtils.comparisonName2String(comparison.getName());
			if(this.isAssertionDisplayed(comparisonName)) {
				var check = this.getAssertionCheckByName(assertionChecks,comparisonName);
				if(check != null) this.createListItem(comparisonName,check.getValue(),slot,authorAnswer,feedbackList); else this.createListItem(comparisonName,-1,slot,authorAnswer,feedbackList);
			}
		}
		if(validations != null) {
			if(slot.getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC && fromCompoundPart) validations = this.removeAssertion(validations,com.wiris.quizzes.api.assertion.ValidationName.CHECK_NO_SUPERFLUOUS);
			var _g = 0;
			while(_g < validations.length) {
				var v = validations[_g];
				++_g;
				var validationName = com.wiris.quizzes.impl.QuizzesEnumUtils.validationName2String(v.getName());
				if(this.isAssertionDisplayed(validationName)) {
					var check = this.getAssertionCheckByName(assertionChecks,validationName);
					if(check != null) this.createListItem(validationName,check.getValue(),slot,authorAnswer,feedbackList); else this.createListItem(validationName,-1,slot,authorAnswer,feedbackList);
				}
			}
		}
		return feedbackList;
	}
	,createAssertionFeedbackList: function(assertionChecks,slot,authorAnswer,fromCompoundPart) {
		return this.createAssertionFeedbackListImpl(assertionChecks,authorAnswer.getComparison(),authorAnswer.getValidations(),slot,authorAnswer,fromCompoundPart);
	}
	,createAnswerFeedbackLabel: function(grade,compoundName) {
		if(compoundName == null) {
			if(grade == 1) return this.createLabel(this.context.t(com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent.STUDENT_ANSWER_FEEDBACK_LABEL_CORRECT),null,com.wiris.util.graphics.Color.fromText("#318849")); else if(grade == 0) return this.createLabel(this.context.t(com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent.STUDENT_ANSWER_FEEDBACK_LABEL_ERROR),null,com.wiris.util.graphics.Color.fromText("#FF0000")); else if(grade < 0) return this.createLabel(this.context.t(com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent.STUDENT_ANSWER_FEEDBACK_LABEL_INDETERMINATE),null,null); else return this.createLabel(Math.round(grade * 100) + "% " + this.context.t(com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent.STUDENT_ANSWER_FEEDBACK_LABEL_PARTIALLY_CORRECT),null,com.wiris.util.graphics.Color.fromText("#C99A08"));
		} else if(grade == 1) return this.createLabel(this.context.t(com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent.STUDENT_ANSWER_FEEDBACK_LABEL_CORRECT),compoundName,com.wiris.util.graphics.Color.fromText("#318849")); else if(grade == 0) return this.createLabel(this.context.t(com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent.STUDENT_ANSWER_FEEDBACK_LABEL_ERROR),compoundName,com.wiris.util.graphics.Color.fromText("#FF0000")); else if(grade < 0) return this.createLabel(this.context.t(com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent.STUDENT_ANSWER_FEEDBACK_LABEL_INDETERMINATE),compoundName,null); else return this.createLabel(Math.round(grade * 100) + "% " + this.context.t(com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent.STUDENT_ANSWER_FEEDBACK_LABEL_PARTIALLY_CORRECT),compoundName,com.wiris.util.graphics.Color.fromText("#C99A08"));
	}
	,createFeedback: function(questionInstance,slot,authorAnswer,compoundName,index,showAssertionsFeedback) {
		if(this.correctAnswerFeedback) {
			var label;
			if(questionInstance != null && questionInstance.hasEvaluation()) {
				var grade = compoundName != null?questionInstance.getCompoundGrade(slot,authorAnswer,index):questionInstance.getGrade(slot,authorAnswer);
				label = this.createAnswerFeedbackLabel(grade,compoundName);
			} else label = this.createAnswerFeedbackLabel(-1,compoundName);
			this.answerFeedbackLabels.push(label);
			this.addComponent(label);
		}
		if(showAssertionsFeedback && this.assertionsFeedback) {
			var feedbackList;
			if(questionInstance != null) {
				if(compoundName != null) feedbackList = this.createAssertionFeedbackList(questionInstance.getMatchingCompoundChecks(slot,authorAnswer,index),slot,authorAnswer,true); else feedbackList = this.createAssertionFeedbackList(questionInstance.getMatchingChecks(slot,authorAnswer),slot,authorAnswer,false);
			} else feedbackList = this.createAssertionFeedbackList(new Array(),slot,authorAnswer,compoundName != null);
			this.assertionFeedbackLists.push(feedbackList);
			this.addComponent(feedbackList);
		}
	}
	,removeAssertion: function(assertions,toRemove) {
		if(assertions == null || toRemove == null) return assertions;
		var found = false;
		var _g = 0;
		while(_g < assertions.length) {
			var validation = assertions[_g];
			++_g;
			if(validation.getName() == toRemove) {
				found = true;
				break;
			}
		}
		if(!found) return assertions;
		var validations = new Array();
		var counter = 0;
		var _g = 0;
		while(_g < assertions.length) {
			var validation = assertions[_g];
			++_g;
			if(validation.getName() != toRemove) validations[counter++] = validation;
		}
		return validations;
	}
	,beautyPrintId: function(id) {
		if(!com.wiris.util.type.StringUtils.contains(id,"$")) return id;
		var parts = id.split("$");
		return parts[0] + ", part " + (Std.parseInt(parts[1]) + 1);
	}
	,setPreviewAnswerFeedback: function(questionInstance,slot,authorAnswer) {
		this.removeAllComponents();
		var compound = slot.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER) == com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_COMPOUND_ANSWER_TRUE;
		this.createFeedback(questionInstance,slot,authorAnswer,null,0,!compound);
		if(compound) {
			if(slot.getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.MATH) {
				var correctAnswers = slot.getAuthorAnswers();
				var correctAnswer = correctAnswers.length == 0?"":correctAnswers[0].getValue();
				var i = HxOverrides.iter(com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField.expandCompoundAnswerLabelVariables(this.getCompoundAnswers(correctAnswer),questionInstance));
				var index = 0;
				while(i.hasNext()) {
					var answer = i.next();
					this.createFeedback(questionInstance,slot,authorAnswer,answer[0],index++,true);
				}
			} else if(slot.getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC) {
				var ids = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getElementsToGradeFromAuthorAnswer(authorAnswer);
				var index = 0;
				var _g = 0;
				while(_g < ids.length) {
					var s = ids[_g];
					++_g;
					var label = "<math><mtext>" + this.beautyPrintId(s) + "</mtext></math>";
					this.createFeedback(questionInstance,slot,authorAnswer,label,index++,true);
				}
				if(authorAnswer.getValidation(com.wiris.quizzes.api.assertion.ValidationName.CHECK_NO_SUPERFLUOUS) != null) {
					var assertionChecks = questionInstance != null?questionInstance.getMatchingChecks(slot,authorAnswer):new Array();
					var feedbackList = this.createAssertionFeedbackListImpl(assertionChecks,null,[authorAnswer.getValidation(com.wiris.quizzes.api.assertion.ValidationName.CHECK_NO_SUPERFLUOUS)],slot,authorAnswer,false);
					feedbackList.getStyle().setMargin(28,0,0,0);
					this.assertionFeedbackLists.push(feedbackList);
					this.addComponent(feedbackList);
				}
			}
		}
	}
	,isShowFeedback: function() {
		return this.correctAnswerFeedback || this.assertionsFeedback;
	}
	,context: null
	,assertionsFeedback: null
	,correctAnswerFeedback: null
	,assertionFeedbackLists: null
	,answerFeedbackLabels: null
	,__class__: com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent
});
com.wiris.quizzes.impl.ui.component.AuthoringFieldComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.AuthoringFieldComponent"] = function() { }
com.wiris.quizzes.impl.ui.component.AuthoringFieldComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","AuthoringFieldComponent"];
com.wiris.quizzes.impl.ui.component.AuthoringFieldComponent.prototype = {
	innerContentChanged: null
	,saveQuestion: null
	,getComponent: null
	,__class__: com.wiris.quizzes.impl.ui.component.AuthoringFieldComponent
}
com.wiris.util.ui.component.InputComponent = $hxClasses["com.wiris.util.ui.component.InputComponent"] = function() {
	com.wiris.util.ui.component.Component.call(this);
	this.status = com.wiris.util.ui.component.InputComponent.STATUS_INDETERMINATE;
	this.addClass(com.wiris.util.ui.component.InputComponent.CLASS_INPUT_COMPONENT);
	this.inputComponentListeners = new Array();
};
com.wiris.util.ui.component.InputComponent.__name__ = ["com","wiris","util","ui","component","InputComponent"];
com.wiris.util.ui.component.InputComponent.__super__ = com.wiris.util.ui.component.Component;
com.wiris.util.ui.component.InputComponent.prototype = $extend(com.wiris.util.ui.component.Component.prototype,{
	getStatus: function() {
		return this.status;
	}
	,setStatus: function(status) {
		this.status = status;
		if(status == com.wiris.util.ui.component.InputComponent.STATUS_INDETERMINATE) {
			this.removeClass(com.wiris.util.ui.component.InputComponent.CLASS_INPUT_COMPONENT_CORRECT);
			this.removeClass(com.wiris.util.ui.component.InputComponent.CLASS_INPUT_COMPONENT_WARNING);
			this.removeClass(com.wiris.util.ui.component.InputComponent.CLASS_INPUT_COMPONENT_ERROR);
		} else if(status == com.wiris.util.ui.component.InputComponent.STATUS_CORRECT) {
			this.addClass(com.wiris.util.ui.component.InputComponent.CLASS_INPUT_COMPONENT_CORRECT);
			this.removeClass(com.wiris.util.ui.component.InputComponent.CLASS_INPUT_COMPONENT_WARNING);
			this.removeClass(com.wiris.util.ui.component.InputComponent.CLASS_INPUT_COMPONENT_ERROR);
		} else if(status == com.wiris.util.ui.component.InputComponent.STATUS_WARNING) {
			this.removeClass(com.wiris.util.ui.component.InputComponent.CLASS_INPUT_COMPONENT_CORRECT);
			this.addClass(com.wiris.util.ui.component.InputComponent.CLASS_INPUT_COMPONENT_WARNING);
			this.removeClass(com.wiris.util.ui.component.InputComponent.CLASS_INPUT_COMPONENT_ERROR);
		} else if(status == com.wiris.util.ui.component.InputComponent.STATUS_ERROR) {
			this.removeClass(com.wiris.util.ui.component.InputComponent.CLASS_INPUT_COMPONENT_CORRECT);
			this.removeClass(com.wiris.util.ui.component.InputComponent.CLASS_INPUT_COMPONENT_WARNING);
			this.addClass(com.wiris.util.ui.component.InputComponent.CLASS_INPUT_COMPONENT_ERROR);
		} else this.status = com.wiris.util.ui.component.InputComponent.STATUS_INDETERMINATE;
	}
	,componentSet: function() {
		var _g = 0, _g1 = this.inputComponentListeners;
		while(_g < _g1.length) {
			var listener = _g1[_g];
			++_g;
			listener.onSetComponent(this);
		}
	}
	,addInputComponentListener: function(listener) {
		this.inputComponentListeners.push(listener);
	}
	,status: null
	,inputComponentListeners: null
	,__class__: com.wiris.util.ui.component.InputComponent
});
com.wiris.util.ui.component.Field = $hxClasses["com.wiris.util.ui.component.Field"] = function() { }
com.wiris.util.ui.component.Field.__name__ = ["com","wiris","util","ui","component","Field"];
com.wiris.util.ui.component.Field.prototype = {
	getComponent: null
	,setValue: null
	,getValue: null
	,__class__: com.wiris.util.ui.component.Field
}
com.wiris.quizzes.impl.ui.component.MathTypeInputComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.MathTypeInputComponent"] = function(parameters,autoHandleSize) {
	com.wiris.util.ui.component.InputComponent.call(this);
	this.addClass(com.wiris.quizzes.impl.ui.component.MathTypeInputComponent.CLASS_MATH_TYPE_COMPONENT);
	this.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	this.autoHandleSize = autoHandleSize;
	if(this.autoHandleSize) this.getStyle().setMaxWidth(450).setHeight(200);
	this.handOpen = false;
	this.readOnly = false;
	this.focusRequested = false;
	this.parameters = parameters == null?new Hash():parameters;
	if(this.autoHandleSize) this.placeholder = com.wiris.util.ui.ImageIcon.newFromFile("mathtype-placeholder.png");
	if(this.parameters.get("language") == null) this.parameters.set("language",com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().getLanguage());
	if(this.parameters.get("toolbar") == null) this.parameters.set("toolbar","quizzes");
	if(this.parameters.get("forceReservedWords") == null) this.parameters.set("forceReservedWords","true");
	if(this.parameters.get("autoformat") == null) this.parameters.set("autoformat","true");
	if(this.parameters.get("nudging") == null) this.parameters.set("nudging","false");
	if(this.parameters.get("notifyContainer") == null) this.parameters.set("notifyContainer","true");
	if(this.parameters.get("hand") == null) {
		var hand = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.HAND_ENABLED);
		this.parameters.set("hand",hand.toLowerCase() == "true"?"true":"false");
	}
	if(this.parameters.get("basePath") == null && this.isOffline()) this.parameters.set("basePath",com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.EDITOR_URL));
	this.parameters.set("deploymentId",com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.DEPLOYMENT_ID));
	this.parameters.set("licenseId",com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.LICENSE_ID));
};
com.wiris.quizzes.impl.ui.component.MathTypeInputComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","MathTypeInputComponent"];
com.wiris.quizzes.impl.ui.component.MathTypeInputComponent.__interfaces__ = [com.wiris.editor.EditorListener,com.wiris.util.ui.component.Field];
com.wiris.quizzes.impl.ui.component.MathTypeInputComponent.newWithValue = function(value,parameters) {
	var mathType = new com.wiris.quizzes.impl.ui.component.MathTypeInputComponent(parameters,true);
	mathType.setValue(value);
	return mathType;
}
com.wiris.quizzes.impl.ui.component.MathTypeInputComponent.__super__ = com.wiris.util.ui.component.InputComponent;
com.wiris.quizzes.impl.ui.component.MathTypeInputComponent.prototype = $extend(com.wiris.util.ui.component.InputComponent.prototype,{
	transformationReceived: function(source,transformation) {
	}
	,styleChanged: function(source) {
	}
	,contentChanged: function(source) {
		if(this.value == null || !(this.value == this.editor.getMathMLWithAnnotations())) this.setValue(this.editor.getMathMLWithAnnotations());
		var handOpen = this.editor.isHandOpen();
		if(handOpen != this.handOpen && this.autoHandleSize) {
			this.handOpen = handOpen;
			if(this.handOpen) {
				this.getStyle().setMaxWidth(800);
				this.performAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.MathTypeInputComponent.ACTION_HAND_OPENED_ID,null));
			} else {
				this.getStyle().setMaxWidth(450);
				this.performAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.MathTypeInputComponent.ACTION_HAND_CLOSED_ID,null));
			}
		}
	}
	,clipboardChanged: function(source) {
	}
	,caretPositionChanged: function(source) {
	}
	,getChangeAction: function() {
		return this.changeAction;
	}
	,setChangeAction: function(changeAction) {
		this.changeAction = changeAction;
	}
	,isOffline: function() {
		var offline = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.SERVICE_OFFLINE);
		return offline.toLowerCase() == "true";
	}
	,getComponent: function() {
		return this;
	}
	,requestFocus: function() {
		if(this.editor != null) {
			com.wiris.util.ui.component.InputComponent.prototype.requestFocus.call(this);
			this.editor.focus();
		} else this.focusRequested = true;
		return this;
	}
	,areCurrentAndNewEmptyMathML: function(value) {
		try {
			return (this.value == null || com.wiris.quizzes.impl.MathContent.isEmpty(this.value)) && (value == null || com.wiris.quizzes.impl.MathContent.isEmpty(value));
		} catch( e ) {
			return false;
		}
	}
	,setValue: function(value) {
		if(value == null || value == "") value = com.wiris.quizzes.impl.ui.component.MathTypeInputComponent.EMPTY_MATHML;
		if(!(com.wiris.quizzes.impl.MathContent.getMathType(value) == com.wiris.quizzes.impl.MathContent.TYPE_MATHML)) value = new com.wiris.quizzes.impl.HTMLTools().textToMathML(value);
		if(this.value == null || !(this.value == value) && !this.areCurrentAndNewEmptyMathML(value)) {
			this.value = value;
			if(this.editor != null && !(value == this.editor.getMathMLWithAnnotations())) this.editor.setMathML(value);
			if(this.changeAction != null) this.performAction(this.changeAction);
		}
	}
	,getValue: function() {
		return this.value != null?this.value:com.wiris.quizzes.impl.ui.component.MathTypeInputComponent.EMPTY_MATHML;
	}
	,setGrammarUrl: function(grammarUrl,check) {
		var parameters = new Hash();
		parameters.set("grammarURL",grammarUrl);
		parameters.set("checkSyntax",check?"true":"false");
		this.setParameters(parameters);
	}
	,setParameters: function(parameters) {
		if(parameters != null) {
			var i = parameters.keys();
			var parametersChanged = false;
			while(i.hasNext()) {
				var key = i.next();
				if(!(parameters.get(key) == this.parameters.get(key))) {
					this.parameters.set(key,parameters.get(key));
					parametersChanged = true;
				}
			}
			if(this.editor != null) {
				if(parametersChanged) {
					this.editor.setParams(this.parameters);
					if(!(this.editor.getMathMLWithAnnotations() == this.getValue())) {
						this.value = this.editor.getMathMLWithAnnotations();
						this.performAction(this.changeAction);
					}
				}
			}
		}
	}
	,setEditor: function(editor) {
		this.editor = editor;
		this.editor.getEditorModel().addEditorListener(this);
		if(this.value != null) this.editor.setMathML(this.value); else this.setValue(this.editor.getMathMLWithAnnotations());
		if(this.focusRequested) {
			this.requestFocus();
			this.focusRequested = false;
		}
		this.componentSet();
	}
	,setReadOnly: function(readOnly) {
		this.readOnly = readOnly;
		var p = new Hash();
		var value = this.readOnly?"true":"false";
		p.set("readOnly",value);
		this.setParameters(p);
	}
	,getParameters: function() {
		return this.parameters;
	}
	,getPlaceholder: function() {
		return this.placeholder;
	}
	,getEditor: function() {
		return this.editor;
	}
	,isEmpty: function() {
		return this.value == null || this.value == "" || com.wiris.quizzes.impl.MathContent.isEmpty(this.value);
	}
	,isReadOnly: function() {
		return this.readOnly;
	}
	,autoHandleSize: null
	,changeAction: null
	,focusRequested: null
	,readOnly: null
	,handOpen: null
	,lang: null
	,value: null
	,reservedWords: null
	,parameters: null
	,editor: null
	,placeholder: null
	,__class__: com.wiris.quizzes.impl.ui.component.MathTypeInputComponent
});
com.wiris.quizzes.impl.ui.component.AuthoringFieldMathTypeComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.AuthoringFieldMathTypeComponent"] = function(context,parameters) {
	com.wiris.quizzes.impl.ui.component.MathTypeInputComponent.call(this,parameters,true);
	this.slot = context.getSlot();
	this.authorAnswer = context.getAuthorAnswer();
	this.setValue(this.authorAnswer.getValue());
	this.setGrammarUrl(this.getGrammarUrl(),true);
	new com.wiris.quizzes.impl.ui.controller.ReservedWordsRequestController(this).update();
	this.setChangeAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.AuthoringFieldMathTypeComponent.CONTENT_CHANGED,null));
	this.addActionListener(this);
};
com.wiris.quizzes.impl.ui.component.AuthoringFieldMathTypeComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","AuthoringFieldMathTypeComponent"];
com.wiris.quizzes.impl.ui.component.AuthoringFieldMathTypeComponent.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener,com.wiris.quizzes.impl.ui.component.AuthoringFieldComponent,com.wiris.quizzes.impl.ui.controller.ReservedWordsConsumer];
com.wiris.quizzes.impl.ui.component.AuthoringFieldMathTypeComponent.__super__ = com.wiris.quizzes.impl.ui.component.MathTypeInputComponent;
com.wiris.quizzes.impl.ui.component.AuthoringFieldMathTypeComponent.prototype = $extend(com.wiris.quizzes.impl.ui.component.MathTypeInputComponent.prototype,{
	innerContentChanged: function() {
		this.saveQuestion();
	}
	,saveQuestion: function() {
		this.authorAnswer.setValue(this.getValue());
		this.performAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.AuthoringFieldImpl.AUTHORING_FIELD_CONTENT_CHANGED,com.wiris.quizzes.impl.ui.AuthoringFieldImpl.AUTHORING_FIELD_CONTENT_CHANGED));
	}
	,actionPerformed: function(e) {
		if(e.getAction().getId() == com.wiris.quizzes.impl.ui.component.AuthoringFieldMathTypeComponent.CONTENT_CHANGED) this.innerContentChanged();
	}
	,getType: function() {
		return com.wiris.quizzes.api.ui.AuthoringFieldType.INLINE_MATH_EDITOR;
	}
	,getComponent: function() {
		return this;
	}
	,setMathtypeParameters: function(parameters) {
		this.setParameters(parameters);
	}
	,getGrammarUrl: function() {
		var grammarUrl = this.slot.getGrammarUrl();
		grammarUrl += grammarUrl.indexOf("?") != -1?"&":"?";
		grammarUrl += "reservedWords=true&measureUnits=true&json=true";
		return grammarUrl;
	}
	,slot: null
	,authorAnswer: null
	,__class__: com.wiris.quizzes.impl.ui.component.AuthoringFieldMathTypeComponent
});
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent"] = function() {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD).addClass(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.CLASS_AUTHORING_FIELD_SUMMARY);
	this.getStyle().setWidth(com.wiris.util.ui.Style.SIZE_FULL).setMargin(24,0,0,0);
	this.label = com.wiris.util.ui.component.Label.newHeaderWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_TITLE));
	this.summaryFields = new com.wiris.util.ui.component.List();
	this.addComponent(this.label);
	this.addComponent(this.summaryFields);
};
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","AuthoringFieldSummaryComponent"];
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	buildProperties: function(properties) {
		var stringBuffer = new StringBuf();
		var i;
		var _g1 = 0, _g = properties.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(i1 > 0) stringBuffer.b += Std.string(", ");
			stringBuffer.b += Std.string(properties[i1]);
		}
		return stringBuffer.b;
	}
	,getToleranceText: function(qimpl,tolerance,digits,relative) {
		if(tolerance == null) tolerance = qimpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE);
		if(relative == null) relative = qimpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_RELATIVE_TOLERANCE);
		if(digits == null) digits = qimpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE_DIGITS);
		var options = "";
		if(!(digits == qimpl.defaultOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE_DIGITS))) {
			if(relative == "true") options = digits + " " + com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_SIGNIFICANT_FIGURES_LABEL); else options = digits + " " + com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_DECIMAL_PLACES_LABEL);
		} else if(!(relative == qimpl.defaultOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_RELATIVE_TOLERANCE)) || !(tolerance == qimpl.defaultOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE))) {
			if(relative == "true") options = com.wiris.system.TypeTools.floatToString(Std.parseFloat(tolerance) * 100) + com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_PERCENT_ERROR_LABEL); else options = tolerance + " " + com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_ABSOLUTE_ERROR_LABEL);
		}
		return options;
	}
	,shortenText: function(text,chars) {
		if(text.length > chars) {
			text = HxOverrides.substr(text,0,chars - 3);
			var n = text.length - 1;
			var c = HxOverrides.cca(text,n);
			while(c == 32 || c == 44 || c == 46) {
				text = HxOverrides.substr(text,0,n--);
				c = HxOverrides.cca(text,n);
			}
			text += "...";
		}
		return text;
	}
	,getAssertionString: function(assertion,qimpl,chars) {
		var text = com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(assertion.name);
		var tolerance = null;
		var toleranceDigits = null;
		var relativeTolerance = null;
		var stringBuffer = new StringBuf();
		var count = 0;
		if(assertion.parameters != null) {
			var i;
			var _g1 = 0, _g = assertion.parameters.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var assertionParam = assertion.parameters[i1];
				if(assertionParam.name == com.wiris.quizzes.impl.Assertion.PARAM_ORDER_MATTERS && !(assertionParam.content == "true")) {
					if(count++ > 0) stringBuffer.b += Std.string(", ");
					stringBuffer.b += Std.string(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t("comparesets"));
				} else if(assertionParam.name == com.wiris.quizzes.impl.Assertion.PARAM_REPETITION_MATTERS) {
				} else if(assertionParam.name == com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE) tolerance = assertionParam.content; else if(assertionParam.name == com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE_DIGITS) toleranceDigits = assertionParam.content; else if(assertionParam.name == com.wiris.quizzes.api.QuizzesConstants.OPTION_RELATIVE_TOLERANCE) relativeTolerance = assertionParam.content; else if(assertionParam.content == "true") {
					if(count++ > 0) stringBuffer.b += Std.string(", ");
					stringBuffer.b += Std.string(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(assertionParam.name));
				} else if(assertionParam.content == "false") {
				} else if(assertionParam.content == com.wiris.quizzes.impl.Assertion.getParameterDefaultValue(assertion.name,assertionParam.name)) {
				} else if(assertionParam.name == com.wiris.quizzes.impl.Assertion.PARAM_MIN) stringBuffer.b += Std.string(" " + com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_FROM_PRECISION_LABEL) + " " + assertionParam.content); else if(assertionParam.name == com.wiris.quizzes.impl.Assertion.PARAM_MAX) stringBuffer.b += Std.string(" " + com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_UP_TO_PRECISION_LABEL) + " " + assertionParam.content); else {
					if(count++ > 0) stringBuffer.b += Std.string(", ");
					stringBuffer.b += Std.string(this.shortenText(assertionParam.content,Math.round(chars / 3.0) | 0));
				}
			}
		}
		var parameters = stringBuffer.b;
		if(assertion.isEquivalence()) {
			var toleranceText = this.getToleranceText(qimpl,tolerance,toleranceDigits,relativeTolerance);
			if(!(toleranceText == "")) {
				if(count++ > 0) toleranceText += ", ";
				parameters = toleranceText + parameters;
			}
		}
		if(assertion.name == com.wiris.quizzes.impl.Assertion.CHECK_PRECISION) {
			if(assertion.getParam(com.wiris.quizzes.impl.Assertion.PARAM_RELATIVE) == "true") text += parameters + " " + com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_SIGNIFICANT_FIGURES_LABEL); else text += parameters + " " + com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_DECIMAL_PLACES_LABEL);
		} else if(count > 0) {
			parameters = this.shortenText(parameters,chars - text.length - 3);
			text += " (" + parameters + ")";
		}
		return text;
	}
	,updateSummary: function(context) {
		this.clearSummaryFields();
		this.setVisible(false);
		var syntax = null;
		var equivalent = null;
		var variables = null;
		var properties = new Array();
		var showSyntax = false;
		var showComparison = false;
		var showProperties = false;
		var showAlgorithm = false;
		var qimpl = context.getQuestion().getImpl();
		var slot = context.getSlot();
		var authorAnswer = context.getAuthorAnswer();
		if(slot.getSyntax().getName() != com.wiris.quizzes.api.assertion.SyntaxName.MATH) {
			showSyntax = true;
			syntax = this.getAssertionString(slot.getSyntax(),qimpl,80);
		}
		if(authorAnswer.getComparison().getName() != com.wiris.quizzes.api.assertion.ComparisonName.MATHEMATICALLY_EQUAL) {
			showComparison = true;
			equivalent = this.getAssertionString(authorAnswer.getComparison(),qimpl,80);
		}
		if(authorAnswer.getValidations().length > 0) {
			showProperties = true;
			var validations = authorAnswer.getValidations();
			var _g = 0;
			while(_g < validations.length) {
				var v = validations[_g];
				++_g;
				properties.push(this.getAssertionString(v,qimpl,80));
			}
		}
		if(qimpl.wirisCasSession != null && qimpl.wirisCasSession.length > 0) {
			showAlgorithm = true;
			variables = com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_HAS_ALGORITHM_LABEL);
			if(!(qimpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_PRECISION) == qimpl.defaultOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_PRECISION))) variables += ", " + com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_PRECISION_LABEL) + ": " + qimpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_PRECISION);
		}
		if(showSyntax || showComparison || showProperties || showAlgorithm) {
			this.setVisible(true);
			if(showSyntax) this.addSyntaxSummaryField(syntax);
			if(showComparison) this.addComparisonSummaryField(equivalent);
			if(showProperties) this.addPropertiesSummaryField(this.buildProperties(properties));
			if(showAlgorithm) this.addAlgorithmSummaryField(variables);
		}
	}
	,clearSummaryFields: function() {
		this.summaryFields.removeAllComponents();
	}
	,addSummaryField: function(id,title,description) {
		var titleLabel = com.wiris.util.ui.component.Label.newImportantWithText(title + ":");
		titleLabel.getStyle().setWidth(120);
		var descriptionLabel = com.wiris.util.ui.component.Label.newWithText(description);
		var summaryField = this.summaryFields.addCustomItem(titleLabel,descriptionLabel,null,0);
		summaryField.getStyle().setVerticalAlignment(com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_TOP);
		summaryField.getComponents()[0].getStyle().setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_RIGHT);
		summaryField.changeStyle();
	}
	,addAlgorithmSummaryField: function(value) {
		this.addSummaryField(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_VARIABLES_ID,com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_VARIABLES_TITLE),value);
	}
	,addPropertiesSummaryField: function(value) {
		this.addSummaryField(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_PROPERTIES_ID,com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_PROPERTIES_TITLE),value);
	}
	,addComparisonSummaryField: function(value) {
		this.addSummaryField(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_COMPARISON_ID,com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_COMPARISON_TITLE),value);
	}
	,addSyntaxSummaryField: function(value) {
		this.addSummaryField(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_ALLOWED_INPUT_ID,com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_ALLOWED_INPUT_TITLE),value);
	}
	,addInputMethodSummaryField: function(value) {
		this.addSummaryField(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_INPUT_METHOD_ID,com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_INPUT_METHOD_TITLE),value);
	}
	,summaryFields: null
	,label: null
	,__class__: com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent
});
com.wiris.util.ui.component.ActivityPanel = $hxClasses["com.wiris.util.ui.component.ActivityPanel"] = function() {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.activityContainer = null;
	this.addClass(com.wiris.util.ui.component.ActivityPanel.CLASS_ACTIVITY_PANEL);
};
com.wiris.util.ui.component.ActivityPanel.__name__ = ["com","wiris","util","ui","component","ActivityPanel"];
com.wiris.util.ui.component.ActivityPanel.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.util.ui.component.ActivityPanel.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	returnToPreviousActivity: function() {
		if(this.activityContainer != null) return this.activityContainer.returnToPreviousActivity();
		return false;
	}
	,showActivity: function(activityId) {
		if(this.activityContainer != null) return this.activityContainer.showActivity(activityId);
		return false;
	}
	,setActivityContainer: function(activityContainer) {
		this.activityContainer = activityContainer;
	}
	,getActivityContainer: function() {
		return this.activityContainer;
	}
	,activityContainer: null
	,__class__: com.wiris.util.ui.component.ActivityPanel
});
com.wiris.quizzes.impl.ui.component.AuxiliaryInitialContentActivity = $hxClasses["com.wiris.quizzes.impl.ui.component.AuxiliaryInitialContentActivity"] = function(controller) {
	com.wiris.util.ui.component.ActivityPanel.call(this);
	this.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_SOLID);
	this.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	this.controller = controller;
	this.headerLabel = com.wiris.util.ui.component.Label.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.AuxiliaryInitialContentActivity.AUXILIAR_INITIAL_CONTENT_LABEL));
	this.headerLabel.addClass(com.wiris.quizzes.impl.ui.component.AuxiliaryInitialContentActivity.CLASS_CALC_ME_LABEL);
	var parameters = new Hash();
	parameters.set("lang",controller.getLanguage());
	parameters.set("environment","quizzes-studio");
	this.calcMe = new com.wiris.quizzes.impl.ui.component.CalcMeInputComponent(parameters);
	this.calcMe.setId("auxiliaryInitialContentCalcMe");
	this.calcMe.setChangeAction(new com.wiris.util.ui.Action("auxiliaryInitialContentChanged",null));
	this.calcMe.addActionListener(controller);
	this.calcMe.getStyle().setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	this.addComponent(this.headerLabel);
	this.addComponent(this.calcMe);
};
com.wiris.quizzes.impl.ui.component.AuxiliaryInitialContentActivity.__name__ = ["com","wiris","quizzes","impl","ui","component","AuxiliaryInitialContentActivity"];
com.wiris.quizzes.impl.ui.component.AuxiliaryInitialContentActivity.__super__ = com.wiris.util.ui.component.ActivityPanel;
com.wiris.quizzes.impl.ui.component.AuxiliaryInitialContentActivity.prototype = $extend(com.wiris.util.ui.component.ActivityPanel.prototype,{
	getFunctionNames: function() {
		return this.calcMe.getFunctionNames();
	}
	,getVariableNames: function() {
		return this.calcMe.getVariableNames();
	}
	,setAlgorithm: function(algorithm) {
		this.calcMe.setAlgorithm(algorithm);
	}
	,calcMe: null
	,headerLabel: null
	,controller: null
	,__class__: com.wiris.quizzes.impl.ui.component.AuxiliaryInitialContentActivity
});
com.wiris.quizzes.impl.ui.component.CalcMeInputComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.CalcMeInputComponent"] = function(parameters) {
	com.wiris.util.ui.component.InputComponent.call(this);
	this.addClass(com.wiris.quizzes.impl.ui.component.CalcMeInputComponent.CLASS_CALC_ME_COMPONENT);
	this.lang = null;
	this.parameters = parameters == null?new Hash():parameters;
	if(this.parameters.get("lang") == null) this.parameters.set("lang",this.getLang()); else this.setLang(this.parameters.get("lang"));
	this.parameters.set("warnOnClose","false");
	this.algorithm = null;
	this.updating = false;
	this.pendingActions = new Array();
	this.actionWithParams("hideSideMenu",new Hash());
};
com.wiris.quizzes.impl.ui.component.CalcMeInputComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","CalcMeInputComponent"];
com.wiris.quizzes.impl.ui.component.CalcMeInputComponent.__interfaces__ = [com.wiris.calc.CalcModelListener];
com.wiris.quizzes.impl.ui.component.CalcMeInputComponent.__super__ = com.wiris.util.ui.component.InputComponent;
com.wiris.quizzes.impl.ui.component.CalcMeInputComponent.prototype = $extend(com.wiris.util.ui.component.InputComponent.prototype,{
	removeCookie: function(key) {
	}
	,saveCookie: function(key,value) {
	}
	,interfaceLanguageChanged: function(calc,newLanguage) {
	}
	,authorizationRequested: function(calc) {
	}
	,plotterDownloadRequested: function(content,format,size) {
	}
	,downloadRequested: function(calc,content,title,format,compression) {
	}
	,closeDialogRequested: function(calc,dialog) {
	}
	,openToolkitDialogRequested: function(calc,dialog) {
	}
	,openDialogRequested: function(calc,dialog) {
	}
	,openLinkRequested: function(calc,url) {
	}
	,uploadFileRequested: function(calc) {
	}
	,removeFileRequested: function(calc) {
	}
	,openFileRequested: function(calc) {
	}
	,saveFileRequested: function(calc,content,suggestedPath,saveas) {
	}
	,newFileRequested: function(calc) {
	}
	,isUpdating: function() {
		return this.updating;
	}
	,getFunctionNames: function() {
		return this.calcMe != null?this.calcMe.getFunctionNames(0):new Array();
	}
	,getVariableNames: function() {
		return this.calcMe != null?this.calcMe.getVariableNames(0):new Array();
	}
	,getChangeAction: function() {
		return this.changeAction;
	}
	,setChangeAction: function(changeAction) {
		this.changeAction = changeAction;
	}
	,getCalcMe: function() {
		return this.calcMe;
	}
	,actionWithParams: function(name,parameters) {
		if(this.calcMe != null) this.calcMe.actionWithParams(name,parameters); else {
			var a = new com.wiris.util.ui.Action(name,name);
			var keys = parameters.keys();
			while(keys.hasNext()) {
				var key = keys.next();
				a.setParameter(key,parameters.get(key));
			}
			this.pendingActions.push(a);
		}
	}
	,setAlgorithm: function(algorithm) {
		if(algorithm == null) {
			if(this.calcMe != null) {
				this.updating = true;
				this.calcMe.reset();
				this.updating = false;
				this.algorithm = this.calcMe.getXml();
				if(this.changeAction != null) this.performAction(this.changeAction);
			}
		} else if(!(this.algorithm == algorithm)) {
			this.algorithm = algorithm;
			if(this.calcMe != null && !(algorithm == this.calcMe.getXml())) {
				this.updating = true;
				this.calcMe.setXml(algorithm);
				this.updating = false;
			}
			if(this.changeAction != null) this.performAction(this.changeAction);
		}
	}
	,contentChanged: function(calc) {
		if(this.isUpdating()) return;
		this.setAlgorithm(calc.getXml());
	}
	,executePendingActions: function() {
		while(this.pendingActions.length > 0) {
			var a = this.pendingActions.pop();
			this.actionWithParams(a.getCommand(),a.getParameters());
		}
		if(this.algorithm == null) this.algorithm = this.calcMe.getXml();
	}
	,setCalcModel: function(calc,overrideAlgorithm) {
		this.calcMe = calc;
		if(this.calcMe != null) {
			this.calcMe.addCalcModelListener(this);
			if(this.algorithm != null && overrideAlgorithm) this.calcMe.setXml(this.algorithm);
			this.executePendingActions();
		}
		this.componentSet();
	}
	,calcModelRebuilt: function(newModel) {
		this.setCalcModel(newModel,false);
	}
	,setCalcMe: function(calcMe) {
		this.setCalcModel(calcMe,true);
	}
	,getComponent: function() {
		return this;
	}
	,getValue: function() {
		if(this.calcMe != null) return this.calcMe.getXml(); else return "<wiriscalc/>";
	}
	,setLang: function(lang) {
		this.lang = lang;
		var parameters = new Hash();
		parameters.set("lang",lang);
		this.setParameters(parameters);
	}
	,getLang: function() {
		this.lang = this.lang == null?"en":this.lang;
		return this.lang;
	}
	,setParameters: function(parameters) {
		var i = parameters.keys();
		while(i.hasNext()) {
			var key = i.next();
			this.parameters.set(key,parameters.get(key));
		}
		if(this.calcMe != null) this.changeState();
	}
	,getParameters: function() {
		return this.parameters;
	}
	,pendingActions: null
	,updating: null
	,changeAction: null
	,calcMe: null
	,parameters: null
	,algorithm: null
	,lang: null
	,__class__: com.wiris.quizzes.impl.ui.component.CalcMeInputComponent
});
com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent"] = function(controller) {
	this.initialized = false;
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.setId("inputOptionsCompoundAnswerPanel").addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_FULL_SIZE_PANEL);
	this.controller = controller;
	this.label = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_FIELD_LABEL));
	var settingsContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	settingsContainer.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD);
	this.compoundAnswerTextFields = new Array();
	this.gradeAnswersSeparatelyCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_LABEL_GRADE_ANSWER_BOXES_SEPARATELY),controller.t(com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_HELPER_TEXT_GRADE_ANSWER_BOXES_SEPARATELY),com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_ID_GRADE_ANSWER_BOXES_SEPARATELY,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_ID_GRADE_ANSWER_BOXES_SEPARATELY,null),this);
	this.gradeAnswersSeparatelyCheckBox.setId("inputOptionsGradeAnswersSeparately");
	this.gradeAnswersSeparatelyCheckBox.addActionListener(controller);
	this.allAnswersCorrectCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_LABEL_ALL_ANSWERS_CORRECT),controller.t(com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_HELPER_TEXT_ALL_ANSWERS_CORRECT),com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_ID_ALL_ANSWERS_CORRECT,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_ID_ALL_ANSWERS_CORRECT,null),this);
	this.allAnswersCorrectCheckBox.setSelected(true);
	this.allAnswersCorrectCheckBox.setId("inputOptionsAllAnswersCorrect");
	this.allAnswersCorrectCheckBox.addActionListener(controller);
	var dataTableLabels = new Array();
	dataTableLabels.push(controller.t(com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_LABEL_ANSWER_COLUMN));
	dataTableLabels.push(controller.t(com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_LABEL_GRADE_WEIGHT_COLUMN));
	this.compoundAnswerDataTable = new com.wiris.util.ui.component.DataTable(dataTableLabels);
	this.compoundAnswerDataTable.setIndentationLevel(2);
	this.allAnswersCorrectPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.allAnswersCorrectPanel.addComponent(this.allAnswersCorrectCheckBox);
	this.allAnswersCorrectPanel.addComponent(this.compoundAnswerDataTable);
	this.allAnswersCorrectPanel.setIndentationLevel(2);
	this.mainExpansionController = new com.wiris.util.ui.controller.ExpansionController(this,this.allAnswersCorrectPanel,false);
	this.allAnswersCorrectExpansionController = new com.wiris.util.ui.controller.ExpansionController(this,this.compoundAnswerDataTable,false);
	settingsContainer.addComponent(this.gradeAnswersSeparatelyCheckBox);
	settingsContainer.addComponent(this.allAnswersCorrectPanel);
	this.addActionListener(this.controller);
	this.addComponent(this.label);
	this.addComponent(settingsContainer);
	this.initialized = true;
};
com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","CompoundAnswerComponent"];
com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	actionPerformed: function(e) {
		if(!this.initialized) return;
		var action = e.getAction();
		var actionId = action.getId();
		if(actionId == com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_ID_GRADE_ANSWER_BOXES_SEPARATELY) this.mainExpansionController.toggle(); else if(actionId == com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_ID_ALL_ANSWERS_CORRECT) this.allAnswersCorrectExpansionController.toggle(); else {
			var compoundAnswers = this.getCompoundAnswers();
			compoundAnswers.pop();
			var remainingValue = 100.0;
			var i = HxOverrides.iter(compoundAnswers);
			while(i.hasNext()) {
				var nextValue = i.next();
				if(nextValue == "") nextValue = "0";
				if(Std.parseFloat(nextValue) > 100.0) {
					this.compoundAnswerTextFields[com.wiris.util.type.Arrays.indexOfElement(compoundAnswers,nextValue)].setValue("100");
					return;
				}
				remainingValue -= Std.parseFloat(nextValue);
			}
			if(remainingValue < 0) {
				remainingValue = 0;
				var j = HxOverrides.iter(this.compoundAnswerTextFields);
				while(j.hasNext()) {
					var textField = j.next();
					textField.setStatus(com.wiris.util.ui.component.InputComponent.STATUS_ERROR);
				}
			} else {
				var j = HxOverrides.iter(this.compoundAnswerTextFields);
				while(j.hasNext()) {
					var textField = j.next();
					textField.setStatus(com.wiris.util.ui.component.InputComponent.STATUS_INDETERMINATE);
				}
			}
			this.compoundAnswerTextFields[this.compoundAnswerTextFields.length - 1].setValue((remainingValue + "").substring(0,remainingValue > 10.0?4:3));
			this.performAction(action);
		}
	}
	,setCompoundAnswers: function(compoundAnswers,compoundDistribution) {
		this.compoundAnswerDataTable.removeAllRows();
		this.compoundAnswerTextFields = new Array();
		if(compoundAnswers != null) {
			var visible = this.allAnswersCorrectPanel.isVisible();
			this.allAnswersCorrectPanel.setVisible(true);
			if(compoundAnswers.length > 1) {
				var invalidRatios = false;
				var compoundRatios = new Array();
				if(compoundDistribution != null) {
					var tempDistribution = compoundDistribution.split(" ");
					if(tempDistribution.length == compoundAnswers.length) compoundRatios = tempDistribution;
				}
				if(compoundRatios.length > 0) {
					var totalRatios = 0;
					var j = HxOverrides.iter(compoundRatios);
					while(j.hasNext()) totalRatios += Std.parseFloat(j.next());
					if(Math.abs(totalRatios - 100.0) > 1e-3) invalidRatios = true;
				}
				var defaultAnswerWeight = 1.0 / compoundAnswers.length * 100.0;
				var totalAnswerWeight = 100.0 - (compoundAnswers.length - 1.0) * defaultAnswerWeight;
				var defaultAnswerLabel = (defaultAnswerWeight + "").substring(0,defaultAnswerWeight > 10.0?4:3);
				var totalAnswerLabel = (totalAnswerWeight + "").substring(0,totalAnswerWeight > 10.0?4:3);
				var _g1 = 0, _g = compoundAnswers.length;
				while(_g1 < _g) {
					var i = _g1++;
					var answer = compoundAnswers[i];
					var components = new Array();
					var answerLabel = com.wiris.quizzes.impl.ui.component.MathLabel.newWithText(answer);
					components.push(answerLabel);
					if(i + 1 == compoundAnswers.length) {
						var valueTextField = new com.wiris.util.ui.component.TextField();
						valueTextField.setSuffix("%");
						valueTextField.getStyle().setWidth(100);
						valueTextField.setReadOnly(true);
						if(invalidRatios) valueTextField.setStatus(com.wiris.util.ui.component.InputComponent.STATUS_ERROR);
						if(compoundRatios.length > 0) valueTextField.setValue(compoundRatios[i]); else valueTextField.setValue(totalAnswerLabel);
						this.compoundAnswerTextFields.push(valueTextField);
						components.push(valueTextField);
					} else {
						var valueTextField = new com.wiris.util.ui.component.NumberDropdownTextField();
						valueTextField.setPlaceholder("0");
						valueTextField.setSuffix("%");
						valueTextField.setChangeAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_ID_RATIOS_CHANGED,null));
						valueTextField.getStyle().setWidth(100);
						if(invalidRatios) valueTextField.setStatus(com.wiris.util.ui.component.InputComponent.STATUS_ERROR);
						if(compoundRatios.length > 0) valueTextField.setValue(compoundRatios[i]); else valueTextField.setValue(defaultAnswerLabel);
						if(compoundAnswers.length > 10) valueTextField.addOption(defaultAnswerLabel,defaultAnswerLabel + "%");
						valueTextField.addActionListener(this);
						valueTextField.addOption("10","10%");
						if(compoundAnswers.length > 5 && compoundAnswers.length < 10) valueTextField.addOption(defaultAnswerLabel,defaultAnswerLabel + "%");
						valueTextField.addOption("25","25%");
						valueTextField.addOption("33.3","33.3%");
						valueTextField.addOption("50","50%");
						valueTextField.addOption("100","100%");
						this.compoundAnswerTextFields.push(valueTextField);
						components.push(valueTextField);
					}
					this.compoundAnswerDataTable.addRow(components);
				}
			}
			this.performAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_ID_RATIOS_CHANGED,null));
			this.allAnswersCorrectPanel.setVisible(visible);
		}
	}
	,getCompoundAnswers: function() {
		var compoundAnswers = new Array();
		var i = HxOverrides.iter(this.compoundAnswerTextFields);
		while(i.hasNext()) compoundAnswers.push(i.next().getValue());
		return compoundAnswers;
	}
	,setAllAnswersCorrect: function(selected) {
		this.allAnswersCorrectCheckBox.setSelected(selected);
	}
	,setCompoundAnswer: function(selected) {
		this.gradeAnswersSeparatelyCheckBox.setSelected(selected);
		if(!selected) this.setAllAnswersCorrect(true);
	}
	,initialized: null
	,controller: null
	,allAnswersCorrectExpansionController: null
	,mainExpansionController: null
	,compoundAnswerTextFields: null
	,allAnswersCorrectPanel: null
	,gradeAnswersSeparatelyCheckBox: null
	,allAnswersCorrectCheckBox: null
	,compoundAnswerDataTable: null
	,label: null
	,__class__: com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent
});
com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent"] = function(controller) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_FULL_SIZE_PANEL).addClass(com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.CLASS_CUSTOMIZE_TOOLBAR_COMPONENT);
	this.customizeToolbarHeader = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.CUSTOMIZE_TOOLBAR_HEADER));
	this.customizeToolbarHeader.getStyle().setMargin(0,0,8,0);
	this.customizeToolbarLabel = com.wiris.util.ui.component.Label.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.CUSTOMIZE_TOOLBAR_LABEL));
	this.customizeToolbarLabel.getStyle().setMargin(0,0,16,0);
	var content = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	content.getStyle().setMargin(0,0,24,0).setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	this.graphMode = com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD;
	this.toolbarDefinition = com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.getDefaultToolbarDefinition(this.graphMode);
	this.treeSelector = new com.wiris.quizzes.impl.ui.component.ToolbarTreeSelector(controller);
	this.treeSelector.setDefinition(this.toolbarDefinition);
	this.treeSelector.getStyle().setHeight(com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.CUSTOMIZE_TOOLBAR_HEIGHT).setMargin(0,16,0,0);
	this.treeSelector.addActionListener(controller);
	var graphParameters = new Hash();
	graphParameters.set(com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_AWAKE_MODE,"true");
	graphParameters.set(com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_FROZEN_MODE,"true");
	graphParameters.set(com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_ALLOW_ANIMATIONS,"true");
	this.graphView = new com.wiris.quizzes.impl.ui.component.GraphInputComponent(graphParameters);
	this.graphView.setId(com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.GRAPH_VIEW_ID);
	this.graphView.getStyle().setHeight(com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.CUSTOMIZE_TOOLBAR_HEIGHT);
	this.addComponent(this.customizeToolbarHeader);
	this.addComponent(this.customizeToolbarLabel);
	content.addComponent(this.treeSelector);
	content.addComponent(this.graphView);
	this.addComponent(content);
};
com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","CustomizeToolbarComponent"];
com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.getDefaultToolbarDefinition = function(graphMode) {
	return com.wiris.util.ui.controller.ToolbarDefinition.newToolbarDefinitionFromJson(com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.getGraphActions(),com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.getDefaultConfig(graphMode));
}
com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.getGraphActions = function() {
	var graphActionsResource = com.wiris.system.Storage.newResourceStorage(com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.QUIZZES_GRAPH_ACTIONS);
	return com.wiris.util.json.JSon.getHashArray(com.wiris.util.json.JSon.decode(graphActionsResource.read()));
}
com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.getDefaultConfig = function(graphMode) {
	var configFile = graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD?com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.QUIZZES_STANDARD_CONFIG:graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_BAR_CHART?com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.QUIZZES_BAR_CHART_CONFIG:graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_LINE_CHART?com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.QUIZZES_LINE_CHART_CONFIG:graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_PIE_CHART?com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.QUIZZES_PIE_CHART_CONFIG:graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH?com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.QUIZZES_SKETCH_CONFIG:com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.QUIZZES_STANDARD_CONFIG;
	var graphConfigResource = com.wiris.system.Storage.newResourceStorage(configFile);
	return com.wiris.util.json.JSon.decode(graphConfigResource.read());
}
com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	updateVisibility: function(context) {
		if(context.getSlot().getSyntax().getName() != com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC) return;
		var graphMode = context.getSlot().getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE);
		if(graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH) {
			this.setVisible(false);
			return;
		}
		this.setVisible(true);
		if(!(graphMode == this.graphMode)) {
			this.graphMode = graphMode;
			this.treeSelector.setDefinition(com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.getDefaultToolbarDefinition(graphMode));
			this.graphView.setEmptyValueFromGraphMode(graphMode);
		}
		var definition = com.wiris.util.ui.controller.ToolbarDefinition.deserialize(context.getSlot().getProperty(com.wiris.quizzes.api.PropertyName.GRAPH_TOOLBAR));
		if(definition == null) this.graphView.updateGraphToolbar(this.treeSelector.computeGraphToolbarDefinition()); else {
			this.treeSelector.updateComponent(definition);
			this.graphView.updateGraphToolbar(definition);
		}
	}
	,graphMode: null
	,treeSelector: null
	,graphView: null
	,customizeToolbarLabel: null
	,customizeToolbarHeader: null
	,toolbarDefinition: null
	,__class__: com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent
});
com.wiris.util.graphics.DisplayListener = $hxClasses["com.wiris.util.graphics.DisplayListener"] = function() { }
com.wiris.util.graphics.DisplayListener.__name__ = ["com","wiris","util","graphics","DisplayListener"];
com.wiris.util.graphics.DisplayListener.prototype = {
	actionCanceled: null
	,actionFinished: null
	,showHelperText: null
	,elementVisibilityChanged: null
	,initialContentChanged: null
	,changeMode: null
	,repaint: null
	,animationEnded: null
	,animationStarted: null
	,cursorRequested: null
	,contentChanged: null
	,disposed: null
	,undoredoQueueChanged: null
	,updatePaths: null
	,elementUnselected: null
	,displayResized: null
	,elementSelected: null
	,__class__: com.wiris.util.graphics.DisplayListener
}
com.wiris.quizzes.impl.ui.component.GraphInputComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.GraphInputComponent"] = function(parameters) {
	this.readOnly = false;
	this.isHidingActionsEnabled = false;
	this.isLockInitialContent = false;
	com.wiris.util.ui.component.InputComponent.call(this);
	this.addClass(com.wiris.quizzes.impl.ui.component.GraphInputComponent.CLASS_GRAPH_COMPONENT);
	this.parameters = parameters;
	if(!parameters.exists(com.wiris.quizzes.impl.Assertion.PARAM_GRAPH_MODE)) {
		this.graphMode = com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD;
		this.value = com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_GRAPH;
	} else {
		this.graphMode = parameters.get(com.wiris.quizzes.impl.Assertion.PARAM_GRAPH_MODE);
		this.value = this.graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD?com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_GRAPH:this.graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_BAR_CHART?com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_BAR_CHART:this.graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_LINE_CHART?com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_LINE_CHART:this.graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_PIE_CHART?com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_PIE_CHART:com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_GRAPH;
	}
	this.value = com.wiris.util.geometry.GeometryFile.readJSON(this.value).toJSON();
	if(this.parameters == null) this.parameters = new Hash();
	if(!this.parameters.exists(com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_DEFAULT_DISPLAY_SETTINGS)) {
		var defaultConfig = new Hash();
		defaultConfig.set(com.wiris.util.graphics.DisplaySettings.DISPLAY_ELEMENT_NAMES,com.wiris.util.graphics.DisplaySettings.ALWAYS);
		defaultConfig.set(com.wiris.util.graphics.DisplaySettings.DISPLAY_ELEMENT_VALUES,com.wiris.util.graphics.DisplaySettings.FOCUS);
		defaultConfig.set(com.wiris.util.graphics.DisplaySettings.MAGNETIC_GRID,com.wiris.util.graphics.DisplaySettings.SNAP);
		this.parameters.set(com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_DEFAULT_DISPLAY_SETTINGS,com.wiris.util.json.JSon.encode(defaultConfig));
	}
	if(this.parameters.exists(com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_TOOLBAR_DEFINITION)) this.toolbarDefinition = com.wiris.util.ui.controller.ToolbarDefinition.deserialize(this.parameters.get(com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_TOOLBAR_DEFINITION));
	if(this.parameters.get(com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_LANGUAGE) == null) this.parameters.set(com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_LANGUAGE,com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().getLanguage());
	this.pendingActions = new Hash();
};
com.wiris.quizzes.impl.ui.component.GraphInputComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","GraphInputComponent"];
com.wiris.quizzes.impl.ui.component.GraphInputComponent.__interfaces__ = [com.wiris.util.graphics.DisplayListener,com.wiris.util.ui.component.Field];
com.wiris.quizzes.impl.ui.component.GraphInputComponent.__super__ = com.wiris.util.ui.component.InputComponent;
com.wiris.quizzes.impl.ui.component.GraphInputComponent.prototype = $extend(com.wiris.util.ui.component.InputComponent.prototype,{
	actionCanceled: function() {
	}
	,actionFinished: function() {
	}
	,showHelperText: function(text,name) {
	}
	,elementVisibilityChanged: function() {
	}
	,initialContentChanged: function() {
	}
	,changeMode: function(mode) {
	}
	,repaint: function() {
	}
	,animationEnded: function() {
	}
	,animationStarted: function() {
	}
	,cursorRequested: function(cursor) {
	}
	,disposed: function() {
	}
	,undoredoQueueChanged: function(canUndo,canRedo) {
	}
	,updatePaths: function() {
	}
	,elementUnselected: function() {
	}
	,displayResized: function() {
	}
	,elementSelected: function() {
	}
	,setDisplaySetting: function(name,value) {
		if(this.graph != null) this.graph.getGraphModel().setDisplaySetting(name,value);
	}
	,setHidingActionsEnabled: function(enabled) {
		this.isHidingActionsEnabled = enabled;
		if(this.graph != null) this.graph.getGraphModel().setHidingActionsEnabled(enabled);
	}
	,setInitialContent: function(initialContent,locked) {
		this.initialContent = initialContent;
		this.isLockInitialContent = locked;
		if(this.graph != null) try {
			this.graph.getGraphModel().getDisplay().setInitialContent(initialContent,locked);
		} catch( e ) {
			if( js.Boot.__instanceof(e,com.wiris.system.Exception) ) {
			} else throw(e);
		}
	}
	,actionWithParams: function(action,params) {
		if(this.graph != null) try {
			var d = this.graph.getGraphModel().getDisplay();
			d.startAction(action);
			d.setActionParameters(params);
			d.useCurrentActionParameters();
		} catch( e ) {
			if( js.Boot.__instanceof(e,com.wiris.system.Exception) ) {
			} else throw(e);
		} else this.pendingActions.set(action,params);
	}
	,activateMainAction: function() {
		if(this.graph != null) this.graph.getGraphModel().activateMainAction();
	}
	,cancelAction: function() {
		if(this.graph == null) return;
		try {
			this.graph.getGraphModel().getDisplay().cancelAction();
		} catch( e ) {
			if( js.Boot.__instanceof(e,com.wiris.system.Exception) ) {
			} else throw(e);
		}
	}
	,setReadOnly: function(readOnly) {
		if(this.readOnly == readOnly) return;
		this.readOnly = readOnly;
		if(this.graph != null) {
			if(readOnly) this.graph.getGraphModel().enterViewOnly(true); else this.graph.getGraphModel().exitViewOnly();
		}
	}
	,setGraphValue: function(value) {
		try {
			this.graph.getGraphModel().getDisplay().loadGeometryFile(value);
		} catch( e ) {
			throw "Error loading the geometry file " + value + ". \n Error description: " + Std.string(e.toString());
		}
		if(this.toolbarDefinition != null) this.graph.getGraphModel().updateGraphToolbar(this.toolbarDefinition);
	}
	,contentChanged: function() {
		var changed = true;
		try {
			var newValue = this.graph.getGraphModel().getDisplay().getGeometryFile();
			if(this.value == newValue) changed = false; else this.value = newValue;
		} catch( e ) {
			changed = false;
		}
		if(changed && this.changeAction != null) this.performAction(this.changeAction);
	}
	,requestFocus: function() {
		if(this.graph != null) this.graph.getGraphModel().getGraphComponent().requestFocus();
		return this;
	}
	,setChangeAction: function(changeAction) {
		this.changeAction = changeAction;
	}
	,getComponent: function() {
		return this;
	}
	,isEmpty: function() {
		return this.value == com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_GRAPH;
	}
	,setGraphMode: function(graphMode) {
		if(this.graphMode != null && this.graphMode == graphMode) return;
		this.graphMode = graphMode;
		this.toolbarDefinition = null;
		if(this.graph == null) return;
		this.graph.getGraphModel().changeMode(com.wiris.quizzes.impl.QuizzesEnumUtils.string2GraphMode(graphMode));
	}
	,setValue: function(newValue) {
		if(newValue == null || newValue == "" || !(com.wiris.quizzes.impl.MathContent.getMathType(newValue) == com.wiris.quizzes.impl.MathContent.TYPE_GEOMETRY_FILE)) newValue = this.graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD?com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_GRAPH:this.graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_BAR_CHART?com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_BAR_CHART:this.graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_LINE_CHART?com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_LINE_CHART:this.graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_PIE_CHART?com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_PIE_CHART:com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_GRAPH;
		if(!(this.value == newValue)) {
			this.value = newValue;
			if(this.graph != null) this.setGraphValue(newValue);
			if(this.changeAction != null) this.performAction(this.changeAction);
		}
	}
	,getValue: function() {
		return this.value;
	}
	,setGraph: function(graph) {
		this.graph = graph;
		this.graph.getGraphModel().getDisplay().addDisplayListener(this);
		if(this.initialContent != null) try {
			this.graph.getGraphModel().getDisplay().setInitialContent(this.initialContent,this.isLockInitialContent);
		} catch( e ) {
			if( js.Boot.__instanceof(e,com.wiris.system.Exception) ) {
			} else throw(e);
		}
		if(this.value != null && !(this.value == this.initialContent)) this.setGraphValue(this.value);
		if(this.toolbarDefinition != null) this.graph.getGraphModel().updateGraphToolbar(this.toolbarDefinition);
		var pendingAct = this.pendingActions.keys();
		while(pendingAct.hasNext()) {
			var name = pendingAct.next();
			this.actionWithParams(name,this.pendingActions.get(name));
		}
		this.pendingActions = new Hash();
		if(this.isHidingActionsEnabled) this.setHidingActionsEnabled(true);
		if(this.readOnly) this.setReadOnly(true);
		this.componentSet();
	}
	,updateGraphToolbar: function(definition) {
		this.toolbarDefinition = definition;
		if(this.graph != null) this.graph.getGraphModel().updateGraphToolbar(definition);
	}
	,getGraph: function() {
		return this.graph;
	}
	,getParameters: function() {
		return this.parameters;
	}
	,setEmptyValueFromGraphMode: function(graphMode) {
		this.graphMode = graphMode;
		this.value = graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD?com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_GRAPH:graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_BAR_CHART?com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_BAR_CHART:graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_LINE_CHART?com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_LINE_CHART:graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_PIE_CHART?com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_PIE_CHART:com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_GRAPH;
		this.setGraphValue(this.value);
	}
	,pendingActions: null
	,graphMode: null
	,readOnly: null
	,isHidingActionsEnabled: null
	,isLockInitialContent: null
	,toolbarDefinition: null
	,initialContent: null
	,value: null
	,parameters: null
	,changeAction: null
	,graph: null
	,__class__: com.wiris.quizzes.impl.ui.component.GraphInputComponent
});
com.wiris.quizzes.impl.ui.component.GraphInputOptionsActivity = $hxClasses["com.wiris.quizzes.impl.ui.component.GraphInputOptionsActivity"] = function(controller) {
	com.wiris.util.ui.component.ActivityPanel.call(this);
	this.setId(com.wiris.quizzes.impl.ui.component.GraphInputOptionsActivity.GRAPH_OPTIONS_ID);
	this.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_SOLID).addClass(com.wiris.quizzes.impl.ui.component.GraphInputOptionsActivity.CLASS_QUIZZES_STUDIO_GRAPH_INPUT_OPTIONS);
	this.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_STRETCH);
	var wrapper = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	wrapper.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setVerticalAlignment(com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_TOP);
	this.customizeToolbar = new com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent(controller);
	this.auxiliaryFields = new com.wiris.quizzes.impl.ui.component.InputMethodComponent(controller);
	wrapper.addComponent(this.customizeToolbar);
	wrapper.addComponent(this.auxiliaryFields);
	this.addComponent(wrapper);
};
com.wiris.quizzes.impl.ui.component.GraphInputOptionsActivity.__name__ = ["com","wiris","quizzes","impl","ui","component","GraphInputOptionsActivity"];
com.wiris.quizzes.impl.ui.component.GraphInputOptionsActivity.__super__ = com.wiris.util.ui.component.ActivityPanel;
com.wiris.quizzes.impl.ui.component.GraphInputOptionsActivity.prototype = $extend(com.wiris.util.ui.component.ActivityPanel.prototype,{
	updateVisibility: function(context) {
		this.customizeToolbar.updateVisibility(context);
		this.auxiliaryFields.updateVisibility(context);
	}
	,auxiliaryFields: null
	,customizeToolbar: null
	,__class__: com.wiris.quizzes.impl.ui.component.GraphInputOptionsActivity
});
com.wiris.quizzes.impl.ui.component.GraphValidationElement = $hxClasses["com.wiris.quizzes.impl.ui.component.GraphValidationElement"] = function(text,formula,options) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.quizzes.impl.ui.component.GraphValidationElement.CLASS_GRAPH_VALIDATION_ELEMENT);
	var content = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	content.addClass(com.wiris.quizzes.impl.ui.component.GraphValidationElement.CLASS_COMPONENT_CONTENT);
	content.getStyle().setMargin(0,10,0,10);
	this.textField = com.wiris.util.ui.component.NumberDropdownTextField.newWithPlaceholder("0");
	this.textField.getStyle().setWidth(100);
	this.textField.setSuffix(com.wiris.quizzes.impl.ui.component.GraphValidationElement.TEXT_FIELD_SUFFIX);
	this.textField.setVisible(false);
	this.textField.setChangeAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_EDIT_VALUE,null));
	this.textField.addActionListener(this);
	var _g = 0;
	while(_g < options.length) {
		var value = options[_g];
		++_g;
		this.textField.addOption(value,value + "%");
	}
	var mathLabel = com.wiris.quizzes.impl.ui.component.MathLabel.newWithText(formula);
	mathLabel.getStyle().setBorderSize(0,0,0,0);
	this.checkBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(text,"",com.wiris.quizzes.impl.ui.component.GraphValidationElement.ID_CHECKBOX,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_CHECKBOX,null),this);
	this.checkBox.getHelperTextPanel().addComponent(mathLabel);
	this.checkBox.setSelected(true);
	var divider = new com.wiris.util.ui.component.Divider(false);
	content.addComponent(this.checkBox);
	content.addComponent(this.textField);
	this.addComponent(content);
	this.addComponent(divider);
};
com.wiris.quizzes.impl.ui.component.GraphValidationElement.__name__ = ["com","wiris","quizzes","impl","ui","component","GraphValidationElement"];
com.wiris.quizzes.impl.ui.component.GraphValidationElement.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.component.GraphValidationElement.newWithValue = function(text,formula,options,value) {
	var graphValidationElement = new com.wiris.quizzes.impl.ui.component.GraphValidationElement(text,formula,options);
	graphValidationElement.setValue(value);
	return graphValidationElement;
}
com.wiris.quizzes.impl.ui.component.GraphValidationElement.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.GraphValidationElement.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	actionPerformed: function(e) {
		var action = e.getAction();
		var id = action.getId();
		if(id == com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_CHECKBOX) this.setFieldVisible(this.isEnabled() && this.isActive());
		this.performAction(action);
	}
	,setValue: function(value) {
		this.textField.setValue(value);
	}
	,getValue: function() {
		return this.textField.getValue();
	}
	,setInvalid: function(invalid) {
		this.textField.setStatus(invalid?com.wiris.util.ui.component.InputComponent.STATUS_ERROR:com.wiris.util.ui.component.InputComponent.STATUS_INDETERMINATE);
	}
	,setFieldVisible: function(visible) {
		this.textField.setVisible(visible);
	}
	,isActive: function() {
		return this.checkBox.isSelected();
	}
	,setActive: function(active) {
		this.checkBox.setSelected(active);
	}
	,getCheckbox: function() {
		return this.checkBox;
	}
	,textField: null
	,checkBox: null
	,__class__: com.wiris.quizzes.impl.ui.component.GraphValidationElement
});
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity = $hxClasses["com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity"] = function(controller) {
	this.graphSize = 0;
	com.wiris.util.ui.component.ActivityPanel.call(this);
	this.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_SOLID).addClass(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.CLASS_GRAPH_VALIDATION_OPTIONS);
	this.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	var wrapper = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	wrapper.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setVerticalAlignment(com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_TOP);
	wrapper.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_FULL_SIZE_PANEL);
	var elementsTitle = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.ELEMENTS_TITLE));
	var subtitle = com.wiris.util.ui.component.Label.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.ELEMENTS_SUBTITLE));
	subtitle.getStyle().setMargin(0,0,8,24);
	var elements = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	elements.addClass(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.CLASS_ELEMENTS_CONTAINER);
	elements.getStyle().setVerticalAlignment(com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_TOP);
	this.elementSelector = new com.wiris.quizzes.impl.ui.component.GraphValidationSelector(controller);
	this.elementSelector.addActionListener(controller);
	this.elementSelector.getStyle().setVerticalAlignment(com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_TOP);
	this.elementSelector.addClass(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.CLASS_ELEMENT_SELECTOR);
	var graphParameters = new Hash();
	graphParameters.set(com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_VIEW_ONLY,"true");
	this.graphView = new com.wiris.quizzes.impl.ui.component.GraphInputComponent(graphParameters);
	this.graphView.addClass(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.CLASS_GRAPH_VIEW);
	this.graphView.getStyle().setWidth(450).setHeight(450);
	this.graphView.setChangeAction(new com.wiris.util.ui.Action("graphValidationChanged",null));
	this.graphView.addActionListener(controller);
	this.graphView.addInputComponentListener(this);
	var criteriaTitle = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.CRITERIA_TITLE));
	var criteria = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	criteria.getStyle().setVerticalAlignment(com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_TOP);
	criteria.addClass(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.CLASS_CRITERIA_CONTAINER).addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD);
	this.toleranceSlider = com.wiris.util.ui.component.Slider.newWithValueAndRange(controller.t(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.TOLERANCE_TITLE),false,Std.parseFloat(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.TOLERANCE_DEFAULT_VALUE),0,1,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.ACTION_TOLERANCE,com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.ACTION_TOLERANCE),controller);
	this.toleranceSlider.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	var toleranceHelper = com.wiris.util.ui.component.Label.newTinyWithText(controller.t(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.TOLERANCE_HELPER));
	toleranceHelper.getStyle().setMargin(10,0,0,0);
	this.superfluousCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.SUPERFLUOUS_TEXT),controller.t(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.SUPERFLUOUS_HELPER),com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.GRAPH_VALIDATION_ID_CHECK_NO_SUPERFLUOUS,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.ACTION_SUPERFLUOUS,com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.ACTION_SUPERFLUOUS),controller);
	this.superfluousCheckBox.getStyle().setMargin(16,0,8,0);
	this.superfluousCheckBox.setId(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.GRAPH_VALIDATION_ID_CHECK_NO_SUPERFLUOUS);
	this.matchColorCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.MATCH_COLOR_TEXT),controller.t(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.MATCH_COLOR_HELPER),com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.GRAPH_VALIDATION_ID_MATCH_COLOR,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.ACTION_MATCH_COLOR,com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.ACTION_MATCH_COLOR),controller);
	this.matchColorCheckBox.setId(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.GRAPH_VALIDATION_ID_MATCH_COLOR);
	this.matchLineStyleCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.MATCH_LINE_TYPE_TEXT),controller.t(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.MATCH_LINE_TYPE_HELPER),com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.GRAPH_VALIDATION_ID_MATCH_LINE_TYPE,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.ACTION_MATCH_LINETYPE,com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.ACTION_MATCH_LINETYPE),controller);
	this.matchLineStyleCheckBox.setId(com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.GRAPH_VALIDATION_ID_MATCH_LINE_TYPE);
	criteria.addComponent(this.toleranceSlider);
	criteria.addComponent(toleranceHelper);
	criteria.addComponent(this.superfluousCheckBox);
	criteria.addComponent(this.matchColorCheckBox);
	criteria.addComponent(this.matchLineStyleCheckBox);
	var criteriaWrapper = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	criteriaWrapper.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_FULL_SIZE_PANEL);
	elements.addComponent(this.graphView);
	elements.addComponent(this.elementSelector);
	criteriaWrapper.addComponent(criteriaTitle);
	criteriaWrapper.addComponent(criteria);
	wrapper.addComponent(elementsTitle);
	wrapper.addComponent(subtitle);
	wrapper.addComponent(elements);
	wrapper.addComponent(criteriaWrapper);
	this.addComponent(wrapper);
};
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.__name__ = ["com","wiris","quizzes","impl","ui","component","GraphValidationOptionsActivity"];
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.__interfaces__ = [com.wiris.util.ui.interaction.InputComponentListener];
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.__super__ = com.wiris.util.ui.component.ActivityPanel;
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.prototype = $extend(com.wiris.util.ui.component.ActivityPanel.prototype,{
	onSetComponent: function(component) {
		if(js.Boot.__instanceof(component,com.wiris.quizzes.impl.ui.component.GraphInputComponent)) {
			var inputComponent = component;
			var options = inputComponent.getGraph().getGraphModel().getDisplay().getOptionDictionary();
			var width = Std.parseFloat(Std.string(options.get("width")) + "");
			var height = Std.parseFloat(Std.string(options.get("height")) + "");
			this.graphSize = Math.max(width,height);
			this.toleranceSlider.setMax(this.graphSize / 4.0);
		}
	}
	,getPlotter: function() {
		return this.graphView.getGraph().getGraphModel().getDisplay();
	}
	,unfocusGraphElement: function(element) {
		this.getPlotter().unfocusElement(element);
	}
	,focusGraphElement: function(element) {
		this.getPlotter().focusElement(element);
	}
	,updateGraphElementTolerances: function(context) {
		var toleranceStr = context.getAuthorAnswer().getComparison().getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE);
		var tolerance = 0;
		try {
			tolerance = Std.parseFloat(toleranceStr);
		} catch( ignored ) {
		}
		this.getPlotter().setElementTolerances(0);
		var i = context.getGraphicalElements().keys();
		while(i.hasNext()) {
			var elem = i.next();
			if(context.isGraphicalElementActive(elem)) this.getPlotter().setElementTolerance(elem,tolerance);
		}
	}
	,updateGraphicalMaxTolerance: function(newGraphSize) {
		var tolerance = Std.parseFloat(this.toleranceSlider.getValue()), newTolerance;
		var max = this.toleranceSlider.getMax(), newMax;
		var ratio;
		if(this.graphSize == 0) ratio = 1; else ratio = newGraphSize / this.graphSize;
		newMax = max * ratio;
		newTolerance = tolerance * ratio;
		this.graphSize = newGraphSize;
		this.toleranceSlider.setRange(0,newMax).setValue(newTolerance + "");
		return tolerance;
	}
	,updateContent: function(context) {
		var authorAnswer = context.getAuthorAnswer();
		this.graphView.setValue(authorAnswer.getValue());
		var syntax = context.getSlot().getSyntax();
		if(syntax.getName() == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC) {
			this.elementSelector.updateVisibility(context);
			var showValidationOption = syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE) == null || syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE) == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD;
			this.matchLineStyleCheckBox.setVisible(showValidationOption);
			this.matchColorCheckBox.setVisible(showValidationOption);
			this.superfluousCheckBox.setVisible(showValidationOption);
			var superfluous = false;
			var matchColor = false;
			var matchLineStyle = false;
			var validations = authorAnswer.getValidations();
			var _g = 0;
			while(_g < validations.length) {
				var v = validations[_g];
				++_g;
				if(v.getName() == com.wiris.quizzes.api.assertion.ValidationName.CHECK_NO_SUPERFLUOUS) superfluous = true; else if(v.getName() == com.wiris.quizzes.api.assertion.ValidationName.CHECK_LINE_STYLE) matchLineStyle = true; else if(v.getName() == com.wiris.quizzes.api.assertion.ValidationName.CHECK_COLOR) matchColor = true;
			}
			this.superfluousCheckBox.setSelected(superfluous);
			this.matchLineStyleCheckBox.setSelected(matchLineStyle);
			this.matchColorCheckBox.setSelected(matchColor);
			this.toleranceSlider.setValue(authorAnswer.getComparison().getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE));
		}
		this.elementSelector.clean();
		var elements = new Array();
		var i = context.getGraphicalElements().keys();
		while(i.hasNext()) {
			var elem = i.next();
			var elemSummary = this.getPlotter().getElementSummary(elem);
			elements.push(elemSummary);
		}
		var distribute = context.getSlot().getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE) == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTE && !(context.getSlot().getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE) == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH);
		this.elementSelector.setGraphAnswers(elements,context.getGraphicalRatios(),context.getGraphicalElementsActive(),distribute);
		this.updateGraphElementTolerances(context);
	}
	,graphSize: null
	,toleranceSlider: null
	,matchLineStyleCheckBox: null
	,matchColorCheckBox: null
	,superfluousCheckBox: null
	,elementSelector: null
	,graphView: null
	,__class__: com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity
});
com.wiris.quizzes.impl.ui.component.GraphValidationSelector = $hxClasses["com.wiris.quizzes.impl.ui.component.GraphValidationSelector"] = function(controller) {
	this.lockCheckbox = false;
	this.ROUND_VALUE = 99.89;
	this.MAX_VALUE = 100.00;
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD);
	this.controller = controller;
	this.elements = new Array();
	var activateAll = new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_ACTIVATE_ALL_CHECKBOX,null);
	var distributeGrade = new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_DISTRIBUTE_GRADE,null);
	var header = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	header.addClass(com.wiris.quizzes.impl.ui.component.GraphValidationSelector.CLASS_SELECTOR_HEADER);
	this.checkBoxHeader = com.wiris.util.ui.component.CheckBox.newCheckBox(controller.t(com.wiris.quizzes.impl.ui.component.GraphValidationSelector.SELECT_ALL),com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ID_CHECKBOX_HEADER,activateAll,this);
	this.checkBoxHeader.setSelected(true);
	this.checkBoxHeader.getStyle().setWidthWithUnit(50,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	this.gradeDistribution = com.wiris.util.ui.component.CheckBox.newCheckBox(controller.t(com.wiris.quizzes.impl.ui.component.GraphValidationSelector.DISTRIBUTE_GRADES),com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ID_GRADE_DISTRIBUTION,distributeGrade,this);
	this.gradeDistribution.setSelected(false);
	this.gradeDistribution.getStyle().setWidthWithUnit(50,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	this.elementsPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.elementsPanel.getStyle().setVerticalAlignment(com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_TOP);
	this.elementsPanel.addClass(com.wiris.quizzes.impl.ui.component.GraphValidationSelector.CLASS_ELEMENTS_PANEL);
	header.addComponent(this.checkBoxHeader);
	header.addComponent(this.gradeDistribution);
	this.addComponent(header);
	this.addComponent(new com.wiris.util.ui.component.Divider(false));
	this.addComponent(this.elementsPanel);
};
com.wiris.quizzes.impl.ui.component.GraphValidationSelector.__name__ = ["com","wiris","quizzes","impl","ui","component","GraphValidationSelector"];
com.wiris.quizzes.impl.ui.component.GraphValidationSelector.__interfaces__ = [com.wiris.util.ui.interaction.MouseListener,com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.component.GraphValidationSelector.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.GraphValidationSelector.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	updateVisibility: function(context) {
		var syntax = context.getSlot().getSyntax();
		if(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE) == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH) {
			this.gradeDistribution.setVisible(false);
			this.elementsPanel.setVisible(true);
		} else {
			this.elementsPanel.setVisible(true);
			this.gradeDistribution.setVisible(true);
		}
	}
	,mouseRelease: function(e) {
	}
	,mousePress: function(e) {
	}
	,mouseDoubleClick: function(e) {
	}
	,mouseClick: function(e) {
	}
	,mouseExit: function(e) {
		if(js.Boot.__instanceof(e.getSource(),com.wiris.quizzes.impl.ui.component.GraphValidationElement)) {
			var elemId = e.getSource().getId();
			this.performAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_UNFOCUS_GRAPH_ELEMENT,elemId));
		}
	}
	,mouseEnter: function(e) {
		if(js.Boot.__instanceof(e.getSource(),com.wiris.quizzes.impl.ui.component.GraphValidationElement)) {
			var elemId = e.getSource().getId();
			this.performAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_FOCUS_GRAPH_ELEMENT,elemId));
		}
	}
	,actionPerformed: function(e) {
		var action = e.getAction();
		var id = action.getId();
		if(id == com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_CHECKBOX) {
			this.updateHeaderCheckboxState();
			this.setInvalid(this.getTotalValue() != this.MAX_VALUE);
		} else if(id == com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_EDIT_VALUE) {
			var _g = 0, _g1 = this.elements;
			while(_g < _g1.length) {
				var element = _g1[_g];
				++_g;
				var value = element.getValue();
				if(value == "") value = "";
				if(Std.parseFloat(value) > 100.0) {
					element.setValue("100");
					return;
				}
			}
			this.setInvalid(this.getTotalValue() != this.MAX_VALUE);
		} else if(id == com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_DISTRIBUTE_GRADE) {
			this.setFieldEnabled(this.gradeDistribution.isSelected());
			this.setFieldVisible(this.gradeDistribution.isSelected());
		} else if(id == com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_ACTIVATE_ALL_CHECKBOX && !this.lockCheckbox) this.setActive(this.checkBoxHeader.isSelected());
		this.performAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_GRAPH_VALIDATION_CHANGED,e.getSource().getId()));
	}
	,updateHeaderCheckboxState: function() {
		this.lockCheckbox = true;
		var activeElements = this.activeElements();
		if(activeElements == 0) {
			this.checkBoxHeader.removeClass(com.wiris.quizzes.impl.ui.component.GraphValidationSelector.CLASS_UNDETERMINED);
			this.checkBoxHeader.setSelected(false);
		} else if(activeElements == this.elements.length) {
			this.checkBoxHeader.removeClass(com.wiris.quizzes.impl.ui.component.GraphValidationSelector.CLASS_UNDETERMINED);
			this.checkBoxHeader.setSelected(true);
		} else {
			this.checkBoxHeader.addClass(com.wiris.quizzes.impl.ui.component.GraphValidationSelector.CLASS_UNDETERMINED);
			this.checkBoxHeader.setSelected(true);
		}
		this.lockCheckbox = false;
	}
	,activeElements: function() {
		var active = 0;
		var _g = 0, _g1 = this.elements;
		while(_g < _g1.length) {
			var element = _g1[_g];
			++_g;
			if(element.isActive()) active++;
		}
		return active;
	}
	,setInvalid: function(valid) {
		var _g = 0, _g1 = this.elements;
		while(_g < _g1.length) {
			var element = _g1[_g];
			++_g;
			element.setInvalid(valid);
		}
	}
	,setFieldVisible: function(visible) {
		var _g = 0, _g1 = this.elements;
		while(_g < _g1.length) {
			var element = _g1[_g];
			++_g;
			element.setFieldVisible(visible && element.isActive());
		}
	}
	,setFieldEnabled: function(enabled) {
		var _g = 0, _g1 = this.elements;
		while(_g < _g1.length) {
			var element = _g1[_g];
			++_g;
			element.setEnabled(enabled);
		}
	}
	,setActive: function(active) {
		var _g = 0, _g1 = this.elements;
		while(_g < _g1.length) {
			var element = _g1[_g];
			++_g;
			element.setActive(active);
		}
	}
	,getValues: function() {
		var values = new Array();
		var _g = 0, _g1 = this.elements;
		while(_g < _g1.length) {
			var element = _g1[_g];
			++_g;
			if(element.isActive()) values.push(element.getValue());
		}
		return values;
	}
	,getTotalValue: function() {
		var value = 0.00;
		var _g = 0, _g1 = this.elements;
		while(_g < _g1.length) {
			var element = _g1[_g];
			++_g;
			if(element.isActive()) value += Std.parseFloat(element.getValue());
		}
		if(value < this.MAX_VALUE && value >= this.ROUND_VALUE) return this.MAX_VALUE;
		return value;
	}
	,areValuesDistributed: function() {
		return this.gradeDistribution.isSelected();
	}
	,getGraphicalElements: function() {
		var ret = new Hash();
		var _g = 0, _g1 = this.elements;
		while(_g < _g1.length) {
			var element = _g1[_g];
			++_g;
			var ratio = element.isActive()?Std.parseFloat(element.getValue()):com.wiris.quizzes.impl.ui.QuizzesStudioContext.GRAPHICAL_ELEMENT_NOT_ACTIVE;
			ret.set(element.getId(),ratio);
		}
		return ret;
	}
	,setMessage: function(message) {
		var label = com.wiris.util.ui.component.Label.newImportantWithText(message);
		label.getStyle().setMargin(30,30,30,30);
		this.elementsPanel.addComponent(label);
	}
	,setGraphAnswers: function(elements,ratios,activeElements,distribute) {
		var surpassMaxRatio = false;
		if(ratios.length > 0) {
			var totalRatios = 0;
			var _g = 0;
			while(_g < ratios.length) {
				var ratio = ratios[_g];
				++_g;
				totalRatios += Std.parseFloat(ratio);
			}
			if(totalRatios < this.ROUND_VALUE || totalRatios > this.MAX_VALUE) surpassMaxRatio = true;
		}
		if(elements.length > 0) {
			var defaultAnswerWeight = 1.0 / elements.length * 100.0;
			var defaultAnswerLabel = (defaultAnswerWeight + "").substring(0,defaultAnswerWeight > 10.0?4:3);
			var lastAnswerWeight = 100.0 - (elements.length - 1.0) * Std.parseFloat(defaultAnswerLabel);
			var lastAnswerLabel = (lastAnswerWeight + "").substring(0,lastAnswerWeight > 10.0?4:3);
			var _g = 0;
			while(_g < elements.length) {
				var element = elements[_g];
				++_g;
				var options = new Array();
				if(elements.length > 10) options.push(defaultAnswerLabel);
				options.push("10");
				if(elements.length > 5 && elements.length < 10) options.push(defaultAnswerLabel);
				options.push("25");
				options.push("33.3");
				options.push("50");
				options.push("100");
				var active;
				var value;
				if(activeElements.length > 0) {
					var elementIndex = com.wiris.util.type.Arrays.indexOfElement(activeElements,element.getId());
					active = elementIndex >= 0;
					if(active) value = ratios[elementIndex]; else if(com.wiris.util.type.Arrays.indexOfElement(elements,element) == elements.length - 1) value = lastAnswerLabel; else value = defaultAnswerLabel;
				} else {
					active = false;
					if(com.wiris.util.type.Arrays.indexOfElement(elements,element) == elements.length - 1) value = lastAnswerLabel; else value = defaultAnswerLabel;
				}
				var validationElement = this.addElement(element,value,options);
				validationElement.setActive(active);
				validationElement.setEnabled(distribute);
				validationElement.setFieldVisible(active && distribute);
				validationElement.setInvalid(surpassMaxRatio);
				validationElement.addActionListener(this);
				validationElement.addMouseListener(this);
			}
		}
		this.updateHeaderCheckboxState();
		this.gradeDistribution.setSelected(distribute);
	}
	,clean: function() {
		this.elementsPanel.removeAllComponents();
		this.elements = new Array();
	}
	,addElement: function(elementSummary,value,options) {
		var element;
		if(elementSummary.isStatsPart()) element = com.wiris.quizzes.impl.ui.component.GraphValidationElement.newWithValue(elementSummary.getLabel(),elementSummary.getValue(),options,value); else element = com.wiris.quizzes.impl.ui.component.GraphValidationElement.newWithValue(this.controller.graphT("type_" + elementSummary.getType()) + " " + elementSummary.getId(),elementSummary.getDefinition(),options,value);
		element.setId(elementSummary.getId());
		element.getCheckbox().setId(elementSummary.getId() + "_cb");
		this.elements.push(element);
		this.elementsPanel.addComponent(element);
		return element;
	}
	,elements: null
	,lockCheckbox: null
	,controller: null
	,elementsPanel: null
	,gradeDistribution: null
	,checkBoxHeader: null
	,ROUND_VALUE: null
	,MAX_VALUE: null
	,__class__: com.wiris.quizzes.impl.ui.component.GraphValidationSelector
});
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel = $hxClasses["com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel"] = function(controller) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	com.wiris.util.ui.component.FlowPanel.prototype.getStyle.call(this).setPadding(0,24,24,12);
	this.welcomeCard = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.welcomeCard.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD).addClass(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.CLASS_HOME_PAGE_WELCOME_PANEL);
	var welcomeHeader = com.wiris.util.ui.component.Label.newHeaderWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_WELCOME_HEADER_TEXT));
	welcomeHeader.getStyle().setFontSize(17);
	var welcomeDescription = com.wiris.util.ui.component.Label.newWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_WELCOME_DESCRIPTION_TEXT));
	welcomeDescription.getStyle().setMargin(12,0,12,0);
	var welcomeButtons = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	var releaseNotes = com.wiris.util.ui.component.HyperlinkButton.newWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_RELEASE_NOTES_BUTTON_TEXT),com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().buildUrl(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_PAGE_RELEASE_NOTES_BUTTON_URL),null,controller);
	releaseNotes.getStyle().setMargin(8,0,8,0);
	var documentation = com.wiris.util.ui.component.HyperlinkButton.newWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_DOCUMENTATION_BUTTON_TEXT),com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().buildUrl(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_DOCUMENTATION_BUTTON_URL),null,controller);
	documentation.getStyle().setMargin(8,0,8,0);
	var feedback = com.wiris.util.ui.component.HyperlinkButton.newWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_GIVE_US_FEEDBACK_BUTTON_TEXT),com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_GIVE_US_YOUR_FEEDBACK_BUTTON_URL,null,controller);
	feedback.getStyle().setMargin(8,0,8,0);
	welcomeButtons.addComponent(releaseNotes.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON));
	welcomeButtons.addComponent(documentation.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON));
	welcomeButtons.addComponent(feedback.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON));
	this.welcomeCard.addComponent(welcomeHeader);
	this.welcomeCard.addComponent(welcomeDescription);
	this.welcomeCard.addComponent(welcomeButtons);
	this.featurePanels = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.featurePanels.addClass(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.CLASS_GETTING_STARTED_FLOW_PANEL);
	var featurePanel1 = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	featurePanel1.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD).addClass(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.CLASS_GETTING_STARTED_PANEL);
	featurePanel1.getStyle().setMargin(0,12,24,0);
	var wrapperFeaturePanel1 = new com.wiris.util.ui.component.BorderPanel(false);
	wrapperFeaturePanel1.getStyle().setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	var titleAndDescriptionFeaturePanel1 = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	var featureHeader1 = com.wiris.util.ui.component.Label.newHeaderWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_CREATE_QUESTION_HEADER_TEXT));
	var featureDescription1 = com.wiris.util.ui.component.Label.newWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_CREATE_QUESTION_TEXT));
	featureDescription1.getStyle().setMargin(12,0,12,0);
	titleAndDescriptionFeaturePanel1.addComponent(featureHeader1);
	titleAndDescriptionFeaturePanel1.addComponent(featureDescription1);
	var featureLearnMore1 = com.wiris.util.ui.component.HyperlinkButton.newWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_LEARN_MORE_BUTTON_TEXT),com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().buildUrl(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_LEARN_MORE_BUTTON_URL),null,controller);
	featureLearnMore1.addClass(com.wiris.util.ui.component.Button.CLASS_BUTTON_CONTAINED).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
	featureLearnMore1.getStyle().setMargin(8,0,8,0);
	wrapperFeaturePanel1.addComponent(titleAndDescriptionFeaturePanel1,com.wiris.util.ui.component.BorderPanel.POSITION_NORTH);
	wrapperFeaturePanel1.addComponent(featureLearnMore1,com.wiris.util.ui.component.BorderPanel.POSITION_SOUTH_WEST);
	featurePanel1.addComponent(wrapperFeaturePanel1);
	this.featurePanels.addComponent(featurePanel1);
	var featurePanel2 = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	featurePanel2.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD).addClass(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.CLASS_GETTING_STARTED_PANEL);
	featurePanel2.getStyle().setMargin(0,0,24,12);
	var wrapperFeaturePanel2 = new com.wiris.util.ui.component.BorderPanel(false);
	wrapperFeaturePanel2.getStyle().setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	var titleAndDescriptionFeaturePanel2 = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	var featureHeader2 = com.wiris.util.ui.component.Label.newHeaderWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_CREATE_RANDOM_QUESTION_HEADER_TEXT));
	var featureDescription2 = com.wiris.util.ui.component.Label.newWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_CREATE_RANDOM_QUESTION_TEXT));
	featureDescription2.getStyle().setMargin(12,0,12,0);
	titleAndDescriptionFeaturePanel2.addComponent(featureHeader2);
	titleAndDescriptionFeaturePanel2.addComponent(featureDescription2);
	var bottomButtons = new com.wiris.util.ui.component.BorderPanel(false);
	var basicMode = com.wiris.util.ui.component.HyperlinkButton.newWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_BASIC_MODE_BUTTON_TEXT),com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().buildUrl(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_BASIC_MODE_BUTTON_URL),null,controller);
	var advancedMode = com.wiris.util.ui.component.HyperlinkButton.newWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_ADVANCED_MODE_BUTTON_TEXT),com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().buildUrl(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_ADVANCED_MODE_BUTTON_URL),null,controller);
	basicMode.addClass(com.wiris.util.ui.component.Button.CLASS_BUTTON_CONTAINED).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
	basicMode.getStyle().setMargin(8,0,8,0);
	advancedMode.addClass(com.wiris.util.ui.component.Button.CLASS_BUTTON_CONTAINED).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
	advancedMode.getStyle().setMargin(8,0,8,0);
	bottomButtons.addComponent(basicMode,com.wiris.util.ui.component.BorderPanel.POSITION_WEST);
	bottomButtons.addComponent(advancedMode,com.wiris.util.ui.component.BorderPanel.POSITION_EAST);
	wrapperFeaturePanel2.addComponent(titleAndDescriptionFeaturePanel2,com.wiris.util.ui.component.BorderPanel.POSITION_NORTH);
	wrapperFeaturePanel2.addComponent(bottomButtons,com.wiris.util.ui.component.BorderPanel.POSITION_SOUTH);
	featurePanel2.addComponent(wrapperFeaturePanel2);
	this.featurePanels.addComponent(featurePanel2);
	this.trainingPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.trainingPanel.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD).addClass(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.CLASS_TRAINING_PANEL);
	var trainingHeader = com.wiris.util.ui.component.Label.newHeaderWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_TRAINING_PANEL_HEADER_TEXT));
	var trainingDescription = com.wiris.util.ui.component.Label.newWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_TRAINING_PANEL_TEXT));
	trainingDescription.getStyle().setMargin(12,0,12,0);
	var trainingButton = com.wiris.util.ui.component.HyperlinkButton.newWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_ENROLL_ME_BUTTON_TEXT),com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().buildUrl(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_ENROLL_ME_BUTTON_URL),null,controller);
	trainingButton.addClass(com.wiris.util.ui.component.Button.CLASS_BUTTON_CONTAINED).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
	trainingButton.getStyle().setMargin(8,0,8,0);
	this.trainingPanel.addComponent(trainingHeader);
	this.trainingPanel.addComponent(trainingDescription);
	this.trainingPanel.addComponent(trainingButton);
	this.actionsPanel = new com.wiris.util.ui.component.BorderPanel(false);
	var contactUs = com.wiris.util.ui.component.HyperlinkButton.newWithTextAndIcon(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_CONTACT_US_BUTTON_TEXT),new com.wiris.util.ui.MaterialIcon("alternate_email"),com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().buildUrl(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_CONTACT_US_BUTTON_URL),null,controller);
	contactUs.addClass(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.CLASS_GETTING_STARTED_ABOUT_US_BUTTON).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
	contactUs.getStyle().setMargin(0,0,0,12);
	var visitOurWebpage = com.wiris.util.ui.component.HyperlinkButton.newWithTextAndIcon(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_VISIT_OUR_WEBPAGE_BUTTON_TEXT),new com.wiris.util.ui.MaterialIcon("language"),com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().buildUrl(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_VISIT_OUR_WEBPAGE_BUTTON_URL),null,controller);
	visitOurWebpage.addClass(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.CLASS_GETTING_STARTED_ABOUT_US_BUTTON).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
	var reportAnIssue = com.wiris.util.ui.component.HyperlinkButton.newWithTextAndIcon(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_REPORT_AN_ISSUE_BUTTON_TEXT),new com.wiris.util.ui.MaterialIcon("bug_report"),com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().buildUrl(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_REPORT_AN_ISSUE_BUTTON_URL),null,controller);
	reportAnIssue.addClass(com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.CLASS_GETTING_STARTED_ABOUT_US_BUTTON).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
	reportAnIssue.getStyle().setMargin(0,21,0,0);
	this.actionsPanel.addComponent(contactUs,com.wiris.util.ui.component.BorderPanel.POSITION_WEST);
	this.actionsPanel.addComponent(visitOurWebpage,com.wiris.util.ui.component.BorderPanel.POSITION_CENTER);
	this.actionsPanel.addComponent(reportAnIssue,com.wiris.util.ui.component.BorderPanel.POSITION_EAST);
	this.addComponent(this.welcomeCard);
	this.addComponent(this.featurePanels);
	this.addComponent(this.trainingPanel);
	this.addComponent(this.actionsPanel);
};
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.__name__ = ["com","wiris","quizzes","impl","ui","component","HomeGettingStartedPanel"];
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	actionsPanel: null
	,trainingPanel: null
	,featurePanels: null
	,welcomeCard: null
	,__class__: com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel
});
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer = $hxClasses["com.wiris.quizzes.impl.ui.component.HomeMainContentContainer"] = function(controller) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_MAIN_CONTENT_CONTAINER_CLASS);
	this.correctAnswerInitialContent = new com.wiris.util.ui.component.ToggleButtonsPanel();
	var initialContent = com.wiris.util.ui.component.ToggleButton.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_INITIAL_CONTENT_BUTTON_TEXT),com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.INITIAL_CONTENT_SELECTABLE_ID,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.ACTION_INITIAL_CONTENT_SELECTED,com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.ACTION_INITIAL_CONTENT_SELECTED),controller);
	initialContent.setId("initialContent");
	this.correctAnswerInitialContent.addToggleButton(initialContent,false,true);
	var correctAnswer = com.wiris.util.ui.component.ToggleButton.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_CORRECT_ANSWER_BUTTON_TEXT),com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.CORRECT_ANSWER_SELECTABLE_ID,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.ACTION_CORRECT_ANSWER_SELECTED,com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.ACTION_CORRECT_ANSWER_SELECTED),controller);
	correctAnswer.setId("correctAnswer");
	this.correctAnswerInitialContent.addToggleButton(correctAnswer,true,true);
	this.addComponent(this.correctAnswerInitialContent);
	this.getStyle().setPadding(0,24,24,12);
	this.description = com.wiris.util.ui.component.Label.newWithText(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_CORRECT_ANSWER_DESCRIPTION_MATH);
	this.description.getStyle().setMargin(12,0,12,0).setLineHeight(18);
	this.addComponent(this.description);
	this.auxiliarDescription = com.wiris.util.ui.component.Label.newWithText(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_CORRECT_ANSWER_DESCRIPTION_SKETCH_PARAGRAPH_2);
	this.auxiliarDescription.getStyle().setMargin(0,0,12,0).setLineHeight(18);
	this.addComponent(this.auxiliarDescription);
	this.compoundMathtype = new com.wiris.quizzes.impl.ui.component.QuizzesCompoundMathTypePopupTextField(null,null,this,null);
	this.compoundMathtype.setId("mainCompoundMathField");
	this.compoundMathtype.setChangeActionId(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.ACTION_MAIN_CONTENT_CHANGED);
	this.compoundMathtype.addActionListener(controller);
	this.compoundMathtype.setVisible(false);
	this.compoundMathtype.setEasyModalClose(true);
	this.compoundTextField = new com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField(null,null,this);
	this.compoundTextField.setId("mainCompoundTextField");
	this.compoundTextField.setChangeActionId(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.ACTION_MAIN_CONTENT_CHANGED);
	this.compoundTextField.addActionListener(controller);
	this.compoundTextField.setVisible(false);
	var mtParams = new Hash();
	mtParams.set("flexEditor","true");
	this.mathtype = new com.wiris.quizzes.impl.ui.component.MathTypeInputComponent(mtParams,false);
	this.mathtype.addClass(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.CLASS_MAIN_COMPONENT_MATHTYPE).setId("mainMathField").getStyle().setMaxWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	this.mathtype.setChangeAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.ACTION_MAIN_CONTENT_CHANGED,null));
	this.mathtype.addActionListener(controller);
	this.textField = com.wiris.util.ui.component.TextField.newWithLabel(controller.t(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_CORRECT_ANSWER_BUTTON_TEXT));
	this.textField.setId("mainTextField");
	this.textField.setChangeAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.ACTION_MAIN_CONTENT_CHANGED,null));
	this.textField.addActionListener(controller);
	this.textField.setVisible(false);
	var parameters = new Hash();
	parameters.set(com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_ALLOW_ANIMATIONS,"true");
	parameters.set(com.wiris.quizzes.impl.Assertion.PARAM_GRAPH_MODE,com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD);
	this.graph = new com.wiris.quizzes.impl.ui.component.GraphInputComponent(parameters);
	this.graph.setId("mainGraph");
	this.graph.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHeight(470);
	this.graph.setChangeAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.ACTION_MAIN_CONTENT_CHANGED,null));
	this.graph.addActionListener(controller);
	this.copyCorrectAnswerButton = com.wiris.util.ui.component.Button.newWithTextAndIcon(controller.t(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_COPY_CORRECT_ANSWER_BUTTON_TEXT),new com.wiris.util.ui.MaterialIcon("undo"),new com.wiris.util.ui.Action("copyCorrectAnswer",null),controller);
	this.copyCorrectAnswerButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
	this.copyCorrectAnswerButton.setId("copyCorrectAnswerButton");
	this.copyInitialContentButton = com.wiris.util.ui.component.Button.newWithTextAndIcon(controller.t(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_COPY_INITIAL_CONTENT_BUTTON_TEXT),new com.wiris.util.ui.MaterialIcon("redo"),new com.wiris.util.ui.Action("copyInitialContent",null),controller);
	this.copyInitialContentButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
	this.copyInitialContentButton.setId("copyInitialContentButton");
	this.mainfieldAndCopyButton = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.mainfieldAndCopyButton.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_RIGHT);
	this.mainfieldAndCopyButton.addComponent(this.copyCorrectAnswerButton);
	this.mainfieldAndCopyButton.addComponent(this.copyInitialContentButton);
	this.mainfieldAndCopyButton.addComponent(this.compoundMathtype);
	this.mainfieldAndCopyButton.addComponent(this.compoundTextField);
	this.mainfieldAndCopyButton.addComponent(this.mathtype);
	this.mainfieldAndCopyButton.addComponent(this.graph);
	this.mainfieldAndCopyButton.addComponent(this.textField);
	this.addComponent(this.mainfieldAndCopyButton);
	this.randomVariables = new com.wiris.quizzes.impl.ui.component.RandomVariablesComponent(controller);
	this.randomVariables.addActionListener(this);
	this.addComponent(this.randomVariables);
};
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.__name__ = ["com","wiris","quizzes","impl","ui","component","HomeMainContentContainer"];
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener,com.wiris.util.ui.interaction.MouseListener];
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	mouseExit: function(e) {
	}
	,mouseEnter: function(e) {
	}
	,mouseRelease: function(e) {
	}
	,mousePress: function(e) {
	}
	,mouseDoubleClick: function(e) {
	}
	,mouseClick: function(e) {
	}
	,actionPerformed: function(e) {
	}
	,getGraphComponent: function() {
		return this.graph;
	}
	,getMainFocus: function() {
		if(this.textField.isVisible()) return this.textField; else if(this.graph.isVisible()) return this.graph; else if(this.mathtype.isVisible()) return this.mathtype; else return null;
	}
	,updateCompoundMathType: function(value,params) {
		this.compoundMathtype.setValue(value);
		if(params != null) this.compoundMathtype.setParameters(params);
	}
	,updateCompoundText: function(value) {
		this.compoundTextField.setValue(value);
	}
	,updateText: function(value,initialContent) {
		this.textField.setValue(value);
		this.textField.setLabel(initialContent?com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_INITIAL_CONTENT_BUTTON_TEXT):com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_CORRECT_ANSWER_BUTTON_TEXT));
	}
	,updateGraph: function(value,toolbar,enableHidingActions) {
		this.graph.setValue(value);
		this.graph.updateGraphToolbar(toolbar);
		this.graph.setHidingActionsEnabled(enableHidingActions);
	}
	,updateMathType: function(value,params) {
		this.mathtype.setValue(value);
		if(params != null) this.mathtype.setParameters(params);
	}
	,isAnswerFieldTypeMathEditor: function(type) {
		return type == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR || type == com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR;
	}
	,updateVisibility: function(context) {
		var show = context.isOptOpenAnswer();
		this.correctAnswerInitialContent.setVisible(show);
		this.description.setVisible(show);
		this.mainfieldAndCopyButton.setVisible(show);
		this.auxiliarDescription.setVisible(false);
		var slot = context.getSlot();
		var syntaxName = slot.getSyntax().getName();
		var homePageStatus = context.getHomePageStatusCorrectAnswerInitialContent();
		this.correctAnswerInitialContent.pickTogglebuttonWithId(homePageStatus == com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_CORRECT_ANSWER?com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.CORRECT_ANSWER_SELECTABLE_ID:com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.INITIAL_CONTENT_SELECTABLE_ID);
		if(homePageStatus == com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_CORRECT_ANSWER) {
			this.mathtype.setVisible(syntaxName == com.wiris.quizzes.api.assertion.SyntaxName.MATH);
			this.textField.setVisible(syntaxName == com.wiris.quizzes.api.assertion.SyntaxName.STRING);
			this.graph.setVisible(syntaxName == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC);
			this.compoundMathtype.setVisible(false);
			this.compoundTextField.setVisible(false);
			var value = context.getAuthorAnswer().getValue();
			if(syntaxName == com.wiris.quizzes.api.assertion.SyntaxName.MATH) {
				this.description.setText(context.t(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_CORRECT_ANSWER_DESCRIPTION_MATH));
				this.updateMathType(value,context.getMathTypeParameters());
			} else if(syntaxName == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC) {
				if(context.getAuthorAnswer().getComparison().getName() == com.wiris.quizzes.api.assertion.ComparisonName.GRAPHICALLY_EQUAL) {
					this.description.setText(context.t(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_CORRECT_ANSWER_DESCRIPTION_GRAPHIC));
					var graphToolbar = slot.getProperty(com.wiris.quizzes.api.PropertyName.GRAPH_TOOLBAR);
					var mode = slot.getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE);
					this.updateGraph(value,graphToolbar != null?com.wiris.util.ui.controller.ToolbarDefinition.deserialize(graphToolbar):com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.getDefaultToolbarDefinition(mode),false);
				} else if(context.getAuthorAnswer().getComparison().getName() == com.wiris.quizzes.api.assertion.ComparisonName.SKETCH_EQUAL) {
					this.description.setText(context.t(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_CORRECT_ANSWER_DESCRIPTION_SKETCH_PARAGRAPH_1));
					this.auxiliarDescription.setText(context.t(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_CORRECT_ANSWER_DESCRIPTION_SKETCH_PARAGRAPH_2));
					this.auxiliarDescription.setVisible(true);
					var mode = slot.getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE);
					this.updateGraph(value,com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.getDefaultToolbarDefinition(mode),false);
				}
			} else {
				this.description.setText(context.t(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_CORRECT_ANSWER_DESCRIPTION_TEXT));
				this.updateText(value,false);
			}
		} else {
			var answerFieldType = slot.getAnswerFieldType();
			var isCompoundAnswer = "true" == slot.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER);
			var isSimpleMathType = this.isAnswerFieldTypeMathEditor(answerFieldType) && !isCompoundAnswer;
			this.mathtype.setVisible(isSimpleMathType);
			var isSimpleTextField = answerFieldType == com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD && !isCompoundAnswer;
			this.textField.setVisible(isSimpleTextField);
			this.graph.setVisible(answerFieldType == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR);
			var isCompoundMathType = this.isAnswerFieldTypeMathEditor(answerFieldType) && isCompoundAnswer;
			this.compoundMathtype.setVisible(isCompoundMathType);
			var isCompoundTextField = answerFieldType == com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD && isCompoundAnswer;
			this.compoundTextField.setVisible(isCompoundTextField);
			var value = slot.getInitialContent();
			if(isSimpleMathType) {
				this.description.setText(context.t(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_INITIAL_CONTENT_DESCRIPTION_MATH));
				value = StringTools.replace(value,"wrs:positionable=\"false\"","");
				this.updateMathType(value,context.getMathTypeParameters());
			} else if(isSimpleTextField) {
				this.description.setText(context.t(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_INITIAL_CONTENT_DESCRIPTION_TEXT));
				this.updateText(value,true);
			} else if(isCompoundMathType) {
				this.description.setText(context.t(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_INITIAL_CONTENT_DESCRIPTION_MATH));
				this.updateCompoundMathType(slot.getInitialContent(),context.getMathTypeParameters());
			} else if(isCompoundTextField) {
				this.description.setText(context.t(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_INITIAL_CONTENT_DESCRIPTION_TEXT));
				this.updateCompoundText(slot.getInitialContent());
			} else if(context.getAuthorAnswer().getComparison().getName() == com.wiris.quizzes.api.assertion.ComparisonName.SKETCH_EQUAL) {
				this.description.setText(context.t(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_INITIAL_CONTENT_DESCRIPTION_SKETCH));
				this.updateGraph(value,com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.getDefaultToolbarDefinition(com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD),true);
			} else {
				this.description.setText(context.t(com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_INITIAL_CONTENT_DESCRIPTION_GRAPHIC));
				var mode = slot.getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE);
				this.updateGraph(value,com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.getDefaultToolbarDefinition(mode),true);
			}
		}
		this.copyCorrectAnswerButton.setVisible(homePageStatus == com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_INITIAL_CONTENT);
		this.copyInitialContentButton.setVisible(homePageStatus == com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_CORRECT_ANSWER);
		this.randomVariables.updateVisibility(context);
	}
	,randomVariables: null
	,correctAnswerInitialContent: null
	,mainfieldAndCopyButton: null
	,copyCorrectAnswerButton: null
	,copyInitialContentButton: null
	,auxiliarDescription: null
	,description: null
	,textField: null
	,graph: null
	,mathtype: null
	,compoundTextField: null
	,compoundMathtype: null
	,__class__: com.wiris.quizzes.impl.ui.component.HomeMainContentContainer
});
com.wiris.quizzes.impl.ui.component.InputMethodComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.InputMethodComponent"] = function(controller) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_FULL_SIZE_PANEL);
	this.controller = controller;
	this.label = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_FIELD_LABEL));
	var content = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	content.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD);
	this.inputFieldContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	var inputFieldLabel = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ANSWER_INPUT_FIELD_LABEL));
	this.inputFieldSelectionController = com.wiris.util.ui.controller.SelectionController.newMutuallyExclusive(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_FIELD_ID);
	this.mathEditorEmbeddedRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_MATHEDITOR_EMBEDDED),controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_MATHEDITOR_EMBEDDED),com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_MATHEDITOR_EMBEDDED,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_MATHEDITOR_EMBEDDED,null),controller);
	this.mathEditorEmbeddedRadioButton.setId("inputOptionsEmbeddedMathtype");
	this.inputFieldSelectionController.addSelectable(this.mathEditorEmbeddedRadioButton,true);
	this.mathEditorPopupRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_MATHEDITOR_POPUP),controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_MATHEDITOR_POPUP),com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_MATHEDITOR_POPUP,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_MATHEDITOR_POPUP,null),controller);
	this.mathEditorPopupRadioButton.setId("inputOptionsPopupMathtype");
	this.inputFieldSelectionController.addSelectable(this.mathEditorPopupRadioButton,false);
	this.plainTextRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_PLAINTEXT),controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_PLAINTEXT),com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_PLAINTEXT,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_PLAINTEXT,null),controller);
	this.plainTextRadioButton.setId("inputOptionsPlainText");
	this.inputFieldSelectionController.addSelectable(this.plainTextRadioButton,false);
	this.inputFieldContainer.addComponent(inputFieldLabel);
	this.inputFieldContainer.addComponent(this.mathEditorEmbeddedRadioButton);
	this.inputFieldContainer.addComponent(this.mathEditorPopupRadioButton);
	this.inputFieldContainer.addComponent(this.plainTextRadioButton);
	this.auxiliaryInputContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.auxiliaryInputContainer.getStyle().setWidth(com.wiris.util.ui.Style.SIZE_FULL);
	var auxiliaryInputLabel = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_AUXILIARY_INPUT_LABEL));
	this.auxiliaryInputFieldSelectionController = com.wiris.util.ui.controller.SelectionController.newMutuallyExclusive(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_FIELD_ID);
	var displayAuxiliaryPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	displayAuxiliaryPanel.setIndentationLevel(2);
	displayAuxiliaryPanel.setId("inputOptionsDisplayAuxiliaryInputHideFileMenuPanel");
	this.displayAuxiliaryContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.displayAuxiliaryExpansionController = new com.wiris.util.ui.controller.ExpansionController(this,displayAuxiliaryPanel,false);
	this.displayAuxiliaryInputRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_DISPLAY_AUXILIARY_INPUT),controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_DISPLAY_AUXILIARY_INPUT),com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_DISPLAY_AUXILIARY_INPUT,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_DISPLAY_AUXILIARY_INPUT,null),controller);
	this.displayAuxiliaryInputRadioButton.setId("inputOptionsDisplayAuxiliaryInput");
	this.auxiliaryInputFieldSelectionController.addSelectable(this.displayAuxiliaryInputRadioButton,false);
	this.displayAuxiliaryInputRadioButton.addActionListener(this);
	this.displayAuxiliaryInputHideFileMenuCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_HIDE_FILE_MENU_AUXILIARY_INPUT),this.controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_HIDE_FILE_MENU_AUXILIARY_INPUT),com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_DISPLAY_AUXILIARY_INPUT,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_AUXILIARY_CAS_HIDE_FILE_MENU,null),controller);
	this.displayAuxiliaryInputHideFileMenuCheckBox.setId("inputOptionsDisplayAuxiliaryInputHideFileMenu");
	displayAuxiliaryPanel.addComponent(this.displayAuxiliaryInputHideFileMenuCheckBox);
	this.displayAuxiliaryContainer.addComponent(this.displayAuxiliaryInputRadioButton);
	this.displayAuxiliaryContainer.addComponent(displayAuxiliaryPanel);
	this.textAuxiliaryInputRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_TEXT_AUXILIARY_INPUT),controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_TEXT_AUXILIARY_INPUT),com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_TEXT_AUXILIARY_INPUT,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_TEXT_AUXILIARY_INPUT,null),controller);
	this.textAuxiliaryInputRadioButton.setId("inputOptionsTextAuxiliaryInput");
	this.auxiliaryInputFieldSelectionController.addSelectable(this.textAuxiliaryInputRadioButton,false);
	this.textAuxiliaryInputRadioButton.addActionListener(this);
	var replaceAuxiliaryPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	replaceAuxiliaryPanel.setIndentationLevel(2);
	replaceAuxiliaryPanel.setId("inputOptionsReplaceAuxiliaryInputHideFileMenuPanel");
	this.replaceAuxiliaryContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.replaceAuxiliaryExpansionController = new com.wiris.util.ui.controller.ExpansionController(this,replaceAuxiliaryPanel,false);
	this.replaceAuxiliaryInputRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_REPLACE_AUXILIARY_INPUT),controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_REPLACE_AUXILIARY_INPUT),com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_REPLACE_AUXILIARY_INPUT,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_REPLACE_AUXILIARY_INPUT,null),controller);
	this.replaceAuxiliaryInputRadioButton.setId("inputOptionsReplaceAuxiliaryInput");
	this.auxiliaryInputFieldSelectionController.addSelectable(this.replaceAuxiliaryInputRadioButton,false);
	this.replaceAuxiliaryInputRadioButton.addActionListener(this);
	this.replaceAuxiliaryInputHideFileMenuCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_HIDE_FILE_MENU_AUXILIARY_INPUT),this.controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_HIDE_FILE_MENU_AUXILIARY_INPUT),com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_REPLACE_AUXILIARY_INPUT,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_AUXILIARY_CAS_HIDE_FILE_MENU,null),controller);
	this.replaceAuxiliaryInputHideFileMenuCheckBox.setId("inputOptionsReplaceAuxiliaryInputHideFileMenu");
	replaceAuxiliaryPanel.addComponent(this.replaceAuxiliaryInputHideFileMenuCheckBox);
	this.replaceAuxiliaryContainer.addComponent(this.replaceAuxiliaryInputRadioButton);
	this.replaceAuxiliaryContainer.addComponent(replaceAuxiliaryPanel);
	this.noAuxiliaryInputRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_NO_AUXILIARY_INPUT),controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_NO_AUXILIARY_INPUT),com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_NO_AUXILIARY_INPUT,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_NO_AUXILIARY_INPUT,null),controller);
	this.noAuxiliaryInputRadioButton.setId("inputOptionsNoAuxiliaryInput");
	this.auxiliaryInputFieldSelectionController.addSelectable(this.noAuxiliaryInputRadioButton,true);
	this.noAuxiliaryInputRadioButton.addActionListener(this);
	this.displayDefineInitialContentButton = com.wiris.util.ui.component.Button.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_DEFINE_INITIAL_CONTENT_BUTTON_LABEL),new com.wiris.util.ui.Action("showActivity",com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_AUXILIARY_INITIAL_CONTENT_ID),controller);
	this.displayDefineInitialContentButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON).setId("inputOptionsDefineInitialContent");
	this.displayDefineInitialContentButton.setVisible(false);
	this.replaceDefineInitialContentButton = com.wiris.util.ui.component.Button.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_DEFINE_INITIAL_CONTENT_BUTTON_LABEL),new com.wiris.util.ui.Action("showActivity",com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_AUXILIARY_INITIAL_CONTENT_ID),controller);
	this.replaceDefineInitialContentButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON).setId("inputOptionsDefineInitialContent");
	this.replaceDefineInitialContentButton.setVisible(false);
	this.displayAuxiliaryInputPanel = new com.wiris.util.ui.component.BorderPanel(false);
	this.displayAuxiliaryInputPanel.setId("inputOptionsDisplayAuxiliaryInput");
	this.displayAuxiliaryInputPanel.addComponent(this.displayAuxiliaryContainer,com.wiris.util.ui.component.BorderPanel.POSITION_WEST);
	this.displayAuxiliaryInputPanel.addComponent(this.displayDefineInitialContentButton,com.wiris.util.ui.component.BorderPanel.POSITION_EAST);
	this.replaceAuxiliaryInputPanel = new com.wiris.util.ui.component.BorderPanel(false);
	this.replaceAuxiliaryInputPanel.setId("inputOptionsReplaceAuxiliaryInput");
	this.replaceAuxiliaryInputPanel.addComponent(this.replaceAuxiliaryContainer,com.wiris.util.ui.component.BorderPanel.POSITION_WEST);
	this.replaceAuxiliaryInputPanel.addComponent(this.replaceDefineInitialContentButton,com.wiris.util.ui.component.BorderPanel.POSITION_EAST);
	this.auxiliaryInputContainer.addComponent(auxiliaryInputLabel);
	this.auxiliaryInputContainer.addComponent(this.displayAuxiliaryInputPanel);
	this.auxiliaryInputContainer.addComponent(this.replaceAuxiliaryInputPanel);
	this.auxiliaryInputContainer.addComponent(this.textAuxiliaryInputRadioButton);
	this.auxiliaryInputContainer.addComponent(this.noAuxiliaryInputRadioButton);
	this.lockContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	var lockInitialContentLabel = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_INITIAL_CONTENT));
	this.lockCheckbox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_LOCK_INITIAL_CONTENT),controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_LOCK_INITIAL_CONTENT),"lockInitialContent",new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputMethodComponent.ACTION_LOCK_INITIAL_CONTENT,com.wiris.quizzes.impl.ui.component.InputMethodComponent.ACTION_LOCK_INITIAL_CONTENT),controller);
	this.lockContainer.addComponent(lockInitialContentLabel);
	this.lockContainer.addComponent(this.lockCheckbox);
	this.displaySettingsContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	var displaySettingsLabel = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_DISPLAY_SETTINGS));
	var displaySettingsText = com.wiris.util.ui.component.Label.newTinyWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_DISPLAY_SETTINGS));
	var displaySettingsLabelName = com.wiris.util.ui.component.Label.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_DISPLAY_SETTINGS_NAME));
	this.displayNameDropdown = new com.wiris.util.ui.component.Dropdown();
	this.displayNameDropdown.addValue(com.wiris.util.graphics.DisplaySettings.ALWAYS,controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.ALWAYS));
	this.displayNameDropdown.addValue(com.wiris.util.graphics.DisplaySettings.FOCUS,controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.FOCUS));
	this.displayNameDropdown.addValue(com.wiris.util.graphics.DisplaySettings.NEVER,controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.NEVER));
	this.displayNameDropdown.pickValue(com.wiris.util.graphics.DisplaySettings.ALWAYS);
	this.displayNameDropdown.setChangeValueAction(new com.wiris.util.ui.Action("graphDisplayNameInLabels",null));
	this.displayNameDropdown.addActionListener(this.controller);
	this.displaySettingsContainerName = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.displaySettingsContainerName.addClass(com.wiris.quizzes.impl.ui.component.InputMethodComponent.CLASS_SEPARATOR_ROW_DISPLAY);
	this.displaySettingsContainerName.addComponent(displaySettingsLabelName);
	this.displaySettingsContainerName.addComponent(this.displayNameDropdown);
	var displaySettingsLabelValue = com.wiris.util.ui.component.Label.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_DISPLAY_SETTINGS_VALUE));
	this.displayValueDropdown = new com.wiris.util.ui.component.Dropdown();
	this.displayValueDropdown.addValue(com.wiris.util.graphics.DisplaySettings.ALWAYS,controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.ALWAYS));
	this.displayValueDropdown.addValue(com.wiris.util.graphics.DisplaySettings.FOCUS,controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.FOCUS));
	this.displayValueDropdown.addValue(com.wiris.util.graphics.DisplaySettings.NEVER,controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.NEVER));
	this.displayValueDropdown.pickValue(com.wiris.util.graphics.DisplaySettings.FOCUS);
	this.displayValueDropdown.setChangeValueAction(new com.wiris.util.ui.Action("graphDisplayValueInLabels",null));
	this.displayValueDropdown.addActionListener(this.controller);
	this.displaySettingsContainerValue = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.displaySettingsContainerValue.addClass(com.wiris.quizzes.impl.ui.component.InputMethodComponent.CLASS_SEPARATOR_ROW_DISPLAY);
	this.displaySettingsContainerValue.addComponent(displaySettingsLabelValue);
	this.displaySettingsContainerValue.addComponent(this.displayValueDropdown);
	this.displaySettingsContainer.addComponent(displaySettingsLabel);
	this.displaySettingsContainer.addComponent(this.displaySettingsContainerName);
	this.displaySettingsContainer.addComponent(this.displaySettingsContainerValue);
	this.displaySettingsContainer.addComponent(displaySettingsText);
	this.magneticGridContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	var magneticGridLabel = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_MAGNETIC_GRID));
	var magneticGridText = com.wiris.util.ui.component.Label.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_MAGNETIC_GRID_TEXT));
	this.magneticGridSmallContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.magneticGridSmallContainer.addClass(com.wiris.quizzes.impl.ui.component.InputMethodComponent.CLASS_SEPARATOR_ROW_DISPLAY);
	this.magneticGridDropdown = new com.wiris.util.ui.component.Dropdown();
	this.magneticGridDropdown.addValue(com.wiris.util.graphics.DisplaySettings.FORCE,controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.FORCE));
	this.magneticGridDropdown.addValue(com.wiris.util.graphics.DisplaySettings.SNAP,controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.SNAP));
	this.magneticGridDropdown.addValue(com.wiris.util.graphics.DisplaySettings.DISABLED,controller.t(com.wiris.quizzes.impl.ui.component.InputMethodComponent.DISABLED));
	this.magneticGridDropdown.pickValue(com.wiris.util.graphics.DisplaySettings.SNAP);
	this.magneticGridDropdown.setChangeValueAction(new com.wiris.util.ui.Action("graphDisplayMagneticGrid",null));
	this.magneticGridDropdown.addActionListener(this.controller);
	this.magneticGridSmallContainer.addComponent(magneticGridText);
	this.magneticGridSmallContainer.addComponent(this.magneticGridDropdown);
	this.magneticGridContainer.addComponent(magneticGridLabel);
	this.magneticGridContainer.addComponent(this.magneticGridSmallContainer);
	content.addComponent(this.inputFieldContainer);
	content.addComponent(this.auxiliaryInputContainer);
	content.addComponent(this.lockContainer);
	content.addComponent(this.displaySettingsContainer);
	content.addComponent(this.magneticGridContainer);
	this.addComponent(this.label);
	this.addComponent(content);
};
com.wiris.quizzes.impl.ui.component.InputMethodComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","InputMethodComponent"];
com.wiris.quizzes.impl.ui.component.InputMethodComponent.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.component.InputMethodComponent.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.InputMethodComponent.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	actionPerformed: function(e) {
		var action = e.getAction();
		var actionId = action.getId();
		var source = e.getSource();
		if(actionId == com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_NO_AUXILIARY_INPUT || actionId == com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_TEXT_AUXILIARY_INPUT) {
			if(source.isSelected()) {
				this.displayDefineInitialContentButton.setVisible(false);
				this.replaceDefineInitialContentButton.setVisible(false);
				this.displayAuxiliaryExpansionController.collapse();
				this.replaceAuxiliaryExpansionController.collapse();
			}
		} else if(actionId == com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_REPLACE_AUXILIARY_INPUT) {
			if(source.isSelected()) {
				this.displayDefineInitialContentButton.setVisible(false);
				this.displayAuxiliaryExpansionController.collapse();
				this.replaceDefineInitialContentButton.setVisible(true);
				this.replaceAuxiliaryExpansionController.expand();
			}
		} else if(actionId == com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_DISPLAY_AUXILIARY_INPUT) {
			if(source.isSelected()) {
				this.displayDefineInitialContentButton.setVisible(true);
				this.displayAuxiliaryExpansionController.expand();
				this.replaceDefineInitialContentButton.setVisible(false);
				this.replaceAuxiliaryExpansionController.collapse();
			}
		}
	}
	,setAuxiliaryInput: function(auxiliaryInput,auxiliaryTextInput,hideCasFileMenu) {
		if(auxiliaryInput == com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_SHOW_CAS_FALSE) {
			if(auxiliaryTextInput != null && auxiliaryTextInput == "true") this.textAuxiliaryInputRadioButton.setSelected(true); else this.noAuxiliaryInputRadioButton.setSelected(true);
		} else if(auxiliaryInput == com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_SHOW_CAS_REPLACE) {
			this.replaceAuxiliaryInputRadioButton.setSelected(true);
			if(hideCasFileMenu != null && hideCasFileMenu == "true") this.replaceAuxiliaryInputHideFileMenuCheckBox.setSelected(true); else this.replaceAuxiliaryInputHideFileMenuCheckBox.setSelected(false);
		} else if(auxiliaryInput == com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_SHOW_CAS_ADD) {
			this.displayAuxiliaryInputRadioButton.setSelected(true);
			if(hideCasFileMenu != null && hideCasFileMenu == "true") this.displayAuxiliaryInputHideFileMenuCheckBox.setSelected(true); else this.displayAuxiliaryInputHideFileMenuCheckBox.setSelected(false);
		}
	}
	,setInputMethod: function(inputMethod) {
		if(inputMethod == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR) this.mathEditorEmbeddedRadioButton.setSelected(true); else if(inputMethod == com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR) this.mathEditorPopupRadioButton.setSelected(true); else if(inputMethod == com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD) this.plainTextRadioButton.setSelected(true);
	}
	,updateVisibility: function(context) {
		this.setVisible(this.controller.getConfigurationKey("inputOptions/answerInputMethod"));
		var slot = context.getSlot();
		var compoundAnswer = "true" == slot.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER);
		var syntax = slot.getSyntax();
		var isGraphicSyntax = syntax.getName() == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC;
		var answerInputFieldVisible = this.controller.getConfigurationKey("inputOptions/answerInputMethod/answerInputField");
		this.inputFieldContainer.setVisible(answerInputFieldVisible && !isGraphicSyntax);
		this.mathEditorEmbeddedRadioButton.setVisible(!compoundAnswer && this.controller.getContext().isOptAnswerFieldInlineEditor());
		this.mathEditorPopupRadioButton.setVisible(this.controller.getContext().isOptAnswerFieldPopupEditor());
		this.plainTextRadioButton.setVisible(this.controller.getContext().isOptAnswerFieldPlainText());
		var displayVisible = this.controller.getConfigurationKey("inputOptions/answerInputMethod/auxiliaryInput/auxiliaryInputDisplay");
		var replaceVisible = this.controller.getConfigurationKey("inputOptions/answerInputMethod/auxiliaryInput/auxiliaryInputReplace");
		replaceVisible = replaceVisible && context.getSlot().getSyntax().getName() != com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC;
		var textVisible = this.controller.getConfigurationKey("inputOptions/answerInputMethod/auxiliaryInput/auxiliaryTextInput");
		this.displayAuxiliaryInputPanel.setVisible(displayVisible);
		this.replaceAuxiliaryInputPanel.setVisible(replaceVisible);
		this.textAuxiliaryInputRadioButton.setVisible(textVisible);
		var auxiliaryVisible = this.controller.getConfigurationKey("inputOptions/answerInputMethod/auxiliaryInput") && (displayVisible || replaceVisible || textVisible);
		this.auxiliaryInputContainer.setVisible(auxiliaryVisible);
		this.lockContainer.setVisible(answerInputFieldVisible && context.isOptOpenAnswer() && (slot.getAnswerFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR || slot.getAnswerFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR || slot.getAnswerFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR));
		this.lockCheckbox.setSelected(context.isInitialContentLocked());
		this.setInputMethod(com.wiris.quizzes.impl.QuizzesEnumUtils.string2answerFieldType(slot.getProperty(com.wiris.quizzes.api.PropertyName.ANSWER_FIELD_TYPE)));
		this.setAuxiliaryInput(slot.getProperty(com.wiris.quizzes.api.PropertyName.SHOW_CAS),slot.getProperty(com.wiris.quizzes.api.PropertyName.SHOW_AUXILIARY_TEXT_INPUT),slot.getProperty(com.wiris.quizzes.api.PropertyName.AUXILIARY_CAS_HIDE_FILE_MENU));
		if(context.getSlot().getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE) != null && context.getSlot().getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE) == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH) {
			this.lockContainer.setVisible(false);
			if(this.displayValueDropdown.getValue() == com.wiris.util.graphics.DisplaySettings.FOCUS) context.getSlot().setProperty(com.wiris.quizzes.api.PropertyName.GRAPH_SHOW_VALUE_IN_LABEL,com.wiris.util.graphics.DisplaySettings.NEVER);
			if(this.displayNameDropdown.getValue() == com.wiris.util.graphics.DisplaySettings.FOCUS) context.getSlot().setProperty(com.wiris.quizzes.api.PropertyName.GRAPH_SHOW_NAME_IN_LABEL,com.wiris.util.graphics.DisplaySettings.ALWAYS);
			this.displayValueDropdown.disableValue(com.wiris.util.graphics.DisplaySettings.FOCUS);
			this.displayNameDropdown.disableValue(com.wiris.util.graphics.DisplaySettings.FOCUS);
		} else {
			this.displayValueDropdown.enableValue(com.wiris.util.graphics.DisplaySettings.FOCUS);
			this.displayNameDropdown.enableValue(com.wiris.util.graphics.DisplaySettings.FOCUS);
		}
		this.displayNameDropdown.setValue(slot.getProperty(com.wiris.quizzes.api.PropertyName.GRAPH_SHOW_NAME_IN_LABEL));
		this.displayValueDropdown.setValue(slot.getProperty(com.wiris.quizzes.api.PropertyName.GRAPH_SHOW_VALUE_IN_LABEL));
		this.displaySettingsContainer.setVisible(isGraphicSyntax);
		this.magneticGridContainer.setVisible(context.getSlot().getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE) != null && context.getSlot().getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE) == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD && context.getSlot().getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC);
		this.magneticGridDropdown.setValue(slot.getProperty(com.wiris.quizzes.api.PropertyName.GRAPH_MAGNETIC_GRID));
	}
	,controller: null
	,replaceAuxiliaryExpansionController: null
	,displayAuxiliaryExpansionController: null
	,magneticGridDropdown: null
	,magneticGridSmallContainer: null
	,magneticGridContainer: null
	,displayNameDropdown: null
	,displayValueDropdown: null
	,displaySettingsContainerValue: null
	,displaySettingsContainerName: null
	,displaySettingsContainer: null
	,lockCheckbox: null
	,lockContainer: null
	,replaceAuxiliaryContainer: null
	,displayAuxiliaryContainer: null
	,auxiliaryInputContainer: null
	,inputFieldContainer: null
	,auxiliaryInputFieldSelectionController: null
	,inputFieldSelectionController: null
	,replaceAuxiliaryInputPanel: null
	,displayAuxiliaryInputPanel: null
	,replaceDefineInitialContentButton: null
	,displayDefineInitialContentButton: null
	,noAuxiliaryInputRadioButton: null
	,textAuxiliaryInputRadioButton: null
	,replaceAuxiliaryInputHideFileMenuCheckBox: null
	,replaceAuxiliaryInputRadioButton: null
	,displayAuxiliaryInputHideFileMenuCheckBox: null
	,displayAuxiliaryInputRadioButton: null
	,plainTextRadioButton: null
	,mathEditorPopupRadioButton: null
	,mathEditorEmbeddedRadioButton: null
	,label: null
	,__class__: com.wiris.quizzes.impl.ui.component.InputMethodComponent
});
com.wiris.quizzes.impl.ui.component.InputOptionsActivity = $hxClasses["com.wiris.quizzes.impl.ui.component.InputOptionsActivity"] = function(controller) {
	com.wiris.util.ui.component.ActivityPanel.call(this);
	this.setId("inputOptions").addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_SOLID).addClass(com.wiris.quizzes.impl.ui.component.InputOptionsActivity.CLASS_QUIZZES_STUDIO_INPUT_OPTIONS);
	this.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	this.controller = controller;
	this.optionsFilter = new com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent(controller,"inputOptions");
	this.compoundAnswer = new com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent(controller);
	this.inputMethod = new com.wiris.quizzes.impl.ui.component.InputMethodComponent(controller);
	this.inputSyntax = new com.wiris.quizzes.impl.ui.component.InputSyntaxComponent(controller);
	var content = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	content.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setVerticalAlignment(com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_TOP);
	content.addComponent(this.optionsFilter);
	content.addComponent(this.compoundAnswer);
	content.addComponent(this.inputMethod);
	content.addComponent(this.inputSyntax);
	this.addComponent(content);
};
com.wiris.quizzes.impl.ui.component.InputOptionsActivity.__name__ = ["com","wiris","quizzes","impl","ui","component","InputOptionsActivity"];
com.wiris.quizzes.impl.ui.component.InputOptionsActivity.__super__ = com.wiris.util.ui.component.ActivityPanel;
com.wiris.quizzes.impl.ui.component.InputOptionsActivity.prototype = $extend(com.wiris.util.ui.component.ActivityPanel.prototype,{
	showAllSyntaxAssertions: function() {
		if(this.optionsFilter.isOptionsFiltered()) this.optionsFilter.setOptionsFilter(false);
		this.inputSyntax.showAllSyntaxAssertions();
	}
	,showFeaturedSyntaxAssertions: function(featuredParams) {
		this.inputSyntax.showFeaturedSyntaxAssertions(featuredParams);
	}
	,setUnitPrefixes: function(unitPrefixes) {
		this.inputSyntax.setUnitPrefixes(unitPrefixes);
	}
	,setUnits: function(units) {
		this.inputSyntax.setUnits(units);
	}
	,setFunctions: function(functions,userFunctions) {
		this.inputSyntax.setFunctions(functions,userFunctions);
	}
	,setConstants: function(constants,userConstants) {
		this.inputSyntax.setConstants(constants,userConstants);
	}
	,showAllUnitPrefixes: function() {
		this.inputSyntax.showAllUnitPrefixes();
	}
	,showAllUnits: function() {
		this.inputSyntax.showAllUnits();
	}
	,showAllFunctions: function() {
		this.inputSyntax.showAllFunctions();
	}
	,showAllConstants: function() {
		this.inputSyntax.showAllConstants();
	}
	,setCompoundAnswers: function(compoundAnswers,compoundDistribution) {
		this.compoundAnswer.setCompoundAnswers(compoundAnswers,compoundDistribution);
	}
	,setSpaceSeparator: function(separator) {
		this.inputSyntax.setSpaceSeparator(separator);
	}
	,setCommaSeparator: function(separator) {
		this.inputSyntax.setCommaSeparator(separator);
	}
	,setPointSeparator: function(separator) {
		this.inputSyntax.setPointSeparator(separator);
	}
	,setScientificNotation: function(selected) {
		this.inputSyntax.setScientificNotation(selected);
	}
	,setRatios: function(selected) {
		this.inputSyntax.setRatios(selected);
	}
	,setIntervals: function(selected) {
		this.inputSyntax.setIntervals(selected);
	}
	,setNoBracketsLists: function(selected) {
		this.inputSyntax.setNoBracketsLists(selected);
	}
	,setLists: function(selected) {
		this.inputSyntax.setLists(selected);
	}
	,setMixedFractions: function(selected) {
		this.inputSyntax.setMixedFractions(selected);
	}
	,setAllAnswersCorrect: function(selected) {
		this.compoundAnswer.setAllAnswersCorrect(selected);
	}
	,setCompoundAnswer: function(selected) {
		this.compoundAnswer.setCompoundAnswer(selected);
	}
	,updateVisibility: function(context) {
		this.optionsFilter.setVisible(this.controller.getContext().isOptOpenAnswer() && this.controller.getContext().isOptInputSyntax());
		var isQuestionCompoundAnswer = "true" == context.getSlot().getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER);
		this.inputMethod.updateVisibility(context);
		this.inputSyntax.updateVisibility();
		if(!context.isShowAllOptions()) {
			var correctAnswer = new com.wiris.quizzes.impl.MathContent();
			correctAnswer.set(context.getAuthorAnswer().getValue());
			var isCorrectAnswerCompoundSyntax = com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswer(correctAnswer).length > 0;
			this.compoundAnswer.setVisible(this.controller.getContext().isOptOpenAnswer() && this.controller.getContext().isOptCompoundAnswer() && (isQuestionCompoundAnswer || isCorrectAnswerCompoundSyntax));
			this.showFeaturedSyntaxAssertions(context.getFeaturedParams());
			this.optionsFilter.setOptionsFilter(true);
		} else {
			this.compoundAnswer.setVisible(this.controller.getContext().isOptOpenAnswer() && this.controller.getContext().isOptCompoundAnswer());
			if(this.controller.getContext().isOptInputSyntax()) {
				this.showAllSyntaxAssertions();
				this.optionsFilter.setOptionsFilter(false);
			}
		}
	}
	,inputSyntax: null
	,inputMethod: null
	,compoundAnswer: null
	,optionsFilter: null
	,controller: null
	,__class__: com.wiris.quizzes.impl.ui.component.InputOptionsActivity
});
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.InputSyntaxComponent"] = function(controller) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.setId(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_FIELD_ID).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_FULL_SIZE_PANEL);
	this.controller = controller;
	this.label = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_FIELD_LABEL));
	var content = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	content.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD);
	this.constantsContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.constantsContainer.setId("inputOptionsConstants").addClass(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.CLASS_INPUT_SYNTAX_ROW);
	var constantsLabel = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_CONSTANTS_LABEL));
	var constantsHelperText = com.wiris.util.ui.component.Label.newTinyWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_CONSTANTS_HELPER_TEXT));
	var constantsSelectAll = com.wiris.util.ui.component.ActionLabel.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_SELECT_ALL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SELECT_ALL_CONSTANTS,null),this);
	constantsSelectAll.setId("inputOptionsConstantsAll");
	var constantsClearAll = com.wiris.util.ui.component.ActionLabel.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_CLEAR_ALL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CLEAR_ALL_CONSTANTS,null),this);
	constantsClearAll.setId("inputOptionsConstantsClear");
	var constantsTopLabels = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	constantsTopLabels.addComponent(constantsLabel);
	constantsTopLabels.addComponent(constantsSelectAll);
	constantsTopLabels.addComponent(constantsClearAll);
	var constantsGroup = new com.wiris.util.ui.component.BorderPanel(false);
	this.constantsChipGroup = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT_WITH_WRAP);
	this.constantsSelectionController = new com.wiris.util.ui.controller.SelectionController(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_CONSTANTS_ID);
	this.constantPiChip = com.wiris.util.ui.component.FilterChip.newFilterChip(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_CONSTANT_PI),com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CONSTANT_PI,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CONSTANT_PI,null),controller);
	this.constantPiChip.setId("inputOptionsConstantPi");
	this.constantsSelectionController.addSelectable(this.constantPiChip,true);
	this.constantEChip = com.wiris.util.ui.component.FilterChip.newFilterChip(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_CONSTANT_E),com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CONSTANT_E,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CONSTANT_E,null),controller);
	this.constantEChip.setId("inputOptionsConstantE");
	this.constantsSelectionController.addSelectable(this.constantEChip,true);
	this.constantIChip = com.wiris.util.ui.component.FilterChip.newFilterChip(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_CONSTANT_I),com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CONSTANT_I,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CONSTANT_I,null),controller);
	this.constantIChip.setId("inputOptionsConstantI");
	this.constantsSelectionController.addSelectable(this.constantIChip,true);
	this.constantJChip = com.wiris.util.ui.component.FilterChip.newFilterChip(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_CONSTANT_J),com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CONSTANT_J,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CONSTANT_J,null),controller);
	this.constantJChip.setId("inputOptionsConstantJ");
	this.constantsSelectionController.addSelectable(this.constantJChip,true);
	this.moreConstantsChip = com.wiris.util.ui.component.ActionChip.newActionChip(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_CONSTANT_MORE_CONSTANTS),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CONSTANT_MORE_CONSTANTS,null),controller);
	this.moreConstantsChip.setId("inputOptionsConstantMore");
	this.constantsChipGroup.addComponent(this.constantPiChip);
	this.constantsChipGroup.addComponent(this.constantEChip);
	this.constantsChipGroup.addComponent(this.constantIChip);
	this.constantsChipGroup.addComponent(this.constantJChip);
	this.constantChips = new Array();
	var defineNewConstantButton = com.wiris.util.ui.component.Button.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_BUTTON_DEFINE_NEW_CONSTANT),new com.wiris.util.ui.Action("showActivity",com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VARIABLES_FUNCTIONS_ID),controller);
	defineNewConstantButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
	constantsGroup.addComponent(this.constantsChipGroup,com.wiris.util.ui.component.BorderPanel.POSITION_WEST);
	constantsGroup.addComponent(defineNewConstantButton,com.wiris.util.ui.component.BorderPanel.POSITION_EAST);
	this.constantsContainer.addComponent(constantsTopLabels);
	this.constantsContainer.addComponent(constantsGroup);
	this.constantsContainer.addComponent(constantsHelperText);
	this.functionsContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.functionsContainer.setId("inputOptionsFunctions").addClass(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.CLASS_INPUT_SYNTAX_ROW);
	var functionsLabel = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_FUNCTIONS_LABEL));
	var functionsHelperText = com.wiris.util.ui.component.Label.newTinyWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_FUNCTIONS_HELPER_TEXT));
	var functionsSelectAll = com.wiris.util.ui.component.ActionLabel.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_SELECT_ALL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SELECT_ALL_FUNCTIONS,null),this);
	functionsSelectAll.setId("inputOptionsFunctionsAll");
	var functionsClearAll = com.wiris.util.ui.component.ActionLabel.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_CLEAR_ALL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CLEAR_ALL_FUNCTIONS,null),this);
	functionsClearAll.setId("inputOptionsFunctionsClear");
	var functionsTopLabels = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	functionsTopLabels.addComponent(functionsLabel);
	functionsTopLabels.addComponent(functionsSelectAll);
	functionsTopLabels.addComponent(functionsClearAll);
	var functionsGroup = new com.wiris.util.ui.component.BorderPanel(false);
	this.functionsChipGroup = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT_WITH_WRAP);
	this.functionsSelectionController = new com.wiris.util.ui.controller.SelectionController(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_FUNCTIONS_ID);
	this.functionExpLogChip = com.wiris.util.ui.component.FilterChip.newFilterChip(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_FUNCTION_EXP_LOG),com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_FUNCTION_EXP_LOG,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_FUNCTION_EXP_LOG,null),controller);
	this.functionExpLogChip.setId("inputOptionsFunctionExpLog");
	this.functionsSelectionController.addSelectable(this.functionExpLogChip,true);
	this.functionTrigonometricChip = com.wiris.util.ui.component.FilterChip.newFilterChip(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_FUNCTION_TRIGONOMETRIC),com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_FUNCTION_TRIGONOMETRIC,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_FUNCTION_TRIGONOMETRIC,null),controller);
	this.functionTrigonometricChip.setId("inputOptionsFunctionTrigonometric");
	this.functionsSelectionController.addSelectable(this.functionTrigonometricChip,true);
	this.functionHyperbolicChip = com.wiris.util.ui.component.FilterChip.newFilterChip(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_FUNCTION_HYPERBOLIC),com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_FUNCTION_HYPERBOLIC,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_FUNCTION_HYPERBOLIC,null),controller);
	this.functionHyperbolicChip.setId("inputOptionsFunctionHyperbolic");
	this.functionsSelectionController.addSelectable(this.functionHyperbolicChip,true);
	this.functionArithmeticChip = com.wiris.util.ui.component.FilterChip.newFilterChip(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_FUNCTION_ARITHMETIC),com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_FUNCTION_ARITHMETIC,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_FUNCTION_ARITHMETIC,null),controller);
	this.functionArithmeticChip.setId("inputOptionsFunctionArithmetic");
	this.functionsSelectionController.addSelectable(this.functionArithmeticChip,true);
	this.moreFunctionsChip = com.wiris.util.ui.component.ActionChip.newActionChip(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_FUNCTION_MORE_FUNCTIONS),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_FUNCTION_MORE_FUNCTIONS,null),controller);
	this.moreFunctionsChip.setId("inputOptionsFunctionMore");
	this.functionsChipGroup.addComponent(this.functionExpLogChip);
	this.functionsChipGroup.addComponent(this.functionTrigonometricChip);
	this.functionsChipGroup.addComponent(this.functionHyperbolicChip);
	this.functionsChipGroup.addComponent(this.functionArithmeticChip);
	this.functionChips = new Array();
	var defineNewFunctionButton = com.wiris.util.ui.component.Button.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_BUTTON_DEFINE_NEW_FUNCTION),new com.wiris.util.ui.Action("showActivity",com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VARIABLES_FUNCTIONS_ID),controller);
	defineNewFunctionButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
	functionsGroup.addComponent(this.functionsChipGroup,com.wiris.util.ui.component.BorderPanel.POSITION_WEST);
	functionsGroup.addComponent(defineNewFunctionButton,com.wiris.util.ui.component.BorderPanel.POSITION_EAST);
	this.functionsContainer.addComponent(functionsTopLabels);
	this.functionsContainer.addComponent(functionsGroup);
	this.functionsContainer.addComponent(functionsHelperText);
	this.measureUnitsContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.measureUnitsContainer.setId("inputOptionsMeasureUnits").addClass(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.CLASS_INPUT_SYNTAX_ROW);
	var measureUnitsLabel = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_MEASURE_UNITS_LABEL));
	var measureUnitsHelperText = com.wiris.util.ui.component.Label.newTinyWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_MEASURE_UNITS_HELPER_TEXT));
	var measureUnitsSelectAll = com.wiris.util.ui.component.ActionLabel.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_SELECT_ALL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SELECT_ALL_UNITS,null),this);
	measureUnitsSelectAll.setId("inputOptionsUnitsAll");
	var measureUnitsClearAll = com.wiris.util.ui.component.ActionLabel.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_CLEAR_ALL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CLEAR_ALL_UNITS,null),this);
	measureUnitsClearAll.setId("inputOptionsUnitsClear");
	var measureUnitsTopLabels = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	measureUnitsTopLabels.addComponent(measureUnitsLabel);
	measureUnitsTopLabels.addComponent(measureUnitsSelectAll);
	measureUnitsTopLabels.addComponent(measureUnitsClearAll);
	var measureUnitsChipGroup = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT_WITH_WRAP);
	this.measureUnitsSelectionController = new com.wiris.util.ui.controller.SelectionController(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_MEASURE_UNITS_ID);
	this.measureUnits = new Hash();
	var _g = 0, _g1 = com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.MEASURE_UNITS_MAIN;
	while(_g < _g1.length) {
		var unit = _g1[_g];
		++_g;
		this.createFilterChip(unit,"measure_units","measureUnits",this.measureUnits,this.measureUnitsSelectionController,measureUnitsChipGroup);
	}
	var _g = 0, _g1 = com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.MEASURE_UNITS_SECONDARY;
	while(_g < _g1.length) {
		var unit = _g1[_g];
		++_g;
		this.createFilterChip(unit,"measure_units","measureUnits",this.measureUnits,this.measureUnitsSelectionController,measureUnitsChipGroup).setVisible(false);
	}
	this.measureUnitsMoreUnitsChip = com.wiris.util.ui.component.ActionChip.newActionChip(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_MEASURE_UNITS_MORE_UNITS),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_MEASURE_UNITS_MORE_UNITS,null),controller);
	this.measureUnitsMoreUnitsChip.setId("inputOptionsMeasureUnitsMore");
	measureUnitsChipGroup.addComponent(this.measureUnitsMoreUnitsChip);
	this.measureUnitsContainer.addComponent(measureUnitsTopLabels);
	this.measureUnitsContainer.addComponent(measureUnitsChipGroup);
	this.measureUnitsContainer.addComponent(measureUnitsHelperText);
	this.unitPrefixesContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.unitPrefixesContainer.setId("inputOptionsUnitPrefixes").addClass(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.CLASS_INPUT_SYNTAX_ROW);
	var unitPrefixesLabel = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_UNIT_PREFIXES_LABEL));
	var unitPrefixesHelperText = com.wiris.util.ui.component.Label.newTinyWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_UNIT_PREFIXES_HELPER_TEXT));
	var unitPrefixesSelectAll = com.wiris.util.ui.component.ActionLabel.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_SELECT_ALL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SELECT_ALL_PREFIXES,null),this);
	measureUnitsSelectAll.setId("inputOptionsPrefixesAll");
	var unitPrefixesClearAll = com.wiris.util.ui.component.ActionLabel.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_CLEAR_ALL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CLEAR_ALL_PREFIXES,null),this);
	measureUnitsClearAll.setId("inputOptionsPrefixesClear");
	var unitPrefixesTopLabels = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	unitPrefixesTopLabels.addComponent(unitPrefixesLabel);
	unitPrefixesTopLabels.addComponent(unitPrefixesSelectAll);
	unitPrefixesTopLabels.addComponent(unitPrefixesClearAll);
	var unitPrefixesChipGroup = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT_WITH_WRAP);
	this.unitPrefixesSelectionController = new com.wiris.util.ui.controller.SelectionController(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_UNIT_PREFIXES_ID);
	this.unitPrefixes = new Hash();
	var _g = 0, _g1 = com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.UNIT_PREFIXES_MAIN;
	while(_g < _g1.length) {
		var prefix = _g1[_g];
		++_g;
		this.createFilterChip(prefix,"unit_prefixes","unitPrefixes",this.unitPrefixes,this.unitPrefixesSelectionController,unitPrefixesChipGroup);
	}
	var _g = 0, _g1 = com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.UNIT_PREFIXES_SECONDARY;
	while(_g < _g1.length) {
		var prefix = _g1[_g];
		++_g;
		this.createFilterChip(prefix,"unit_prefixes","unitPrefixes",this.unitPrefixes,this.unitPrefixesSelectionController,unitPrefixesChipGroup).setVisible(false);
	}
	this.unitPrefixesMorePrefixesChip = com.wiris.util.ui.component.ActionChip.newActionChip(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_UNIT_PREFIXES_MORE_PREFIXES),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_UNIT_PREFIXES_MORE_PREFIXES,null),controller);
	this.unitPrefixesMorePrefixesChip.setId("inputOptionsUnitPrefixesMore");
	unitPrefixesChipGroup.addComponent(this.unitPrefixesMorePrefixesChip);
	this.unitPrefixesContainer.addComponent(unitPrefixesTopLabels);
	this.unitPrefixesContainer.addComponent(unitPrefixesChipGroup);
	this.unitPrefixesContainer.addComponent(unitPrefixesHelperText);
	this.allowedConstructionsContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.allowedConstructionsContainer.setId("inputSyntaxAllowedConstructions");
	var allowedConstructionsLabel = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ALLOWED_CONSTRUCTIONS_LABEL));
	this.allowedConstructionsSelectionController = new com.wiris.util.ui.controller.SelectionController(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ALLOWED_CONSTRUCTIONS_ID);
	this.mixedFractionsCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_MIXED_FRACTIONS),controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_HELPER_TEXT_MIXED_FRACTIONS),com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_MIXED_FRACTIONS,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_MIXED_FRACTIONS,null),controller);
	this.mixedFractionsCheckBox.getHelperTextPanel().addComponent(com.wiris.quizzes.impl.ui.component.MathLabel.newWithText("<math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mn>1</mn><mfrac><mn>1</mn><mn>2</mn></mfrac></math>"));
	this.mixedFractionsCheckBox.getHelperTextPanel().addComponent(com.wiris.util.ui.component.Label.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_HELPER_TEXT_MIXED_FRACTIONS_2)));
	this.mixedFractionsCheckBox.getHelperTextPanel().addComponent(com.wiris.quizzes.impl.ui.component.MathLabel.newWithText("<math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mn>1</mn><mo>+</mo><mfrac><mn>1</mn><mn>2</mn></mfrac></math>"));
	this.mixedFractionsCheckBox.getHelperTextPanel().addComponent(com.wiris.util.ui.component.Label.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_HELPER_TEXT_MIXED_FRACTIONS_3)));
	this.mixedFractionsCheckBox.getHelperTextPanel().addComponent(com.wiris.quizzes.impl.ui.component.MathLabel.newWithText("<math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mn>1</mn><mo>&#xB7;</mo><mfrac><mn>1</mn><mn>2</mn></mfrac></math>"));
	this.mixedFractionsCheckBox.getHelperTextPanel().addComponent(com.wiris.util.ui.component.Label.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_HELPER_TEXT_MIXED_FRACTIONS_4)));
	this.allowedConstructionsSelectionController.addSelectable(this.mixedFractionsCheckBox,false);
	this.listsCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_LISTS),controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_HELPER_TEXT_LISTS),com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_LISTS,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_LISTS,null),controller);
	this.allowedConstructionsSelectionController.addSelectable(this.listsCheckBox,true);
	this.listsCheckBox.addActionListener(this);
	this.intervalsCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_INTERVALS),controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_HELPER_TEXT_INTERVALS),com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_INTERVALS,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_INTERVALS,null),controller);
	this.allowedConstructionsSelectionController.addSelectable(this.intervalsCheckBox,false);
	this.ratiosCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_RATIOS),controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_HELPER_TEXT_RATIOS),com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_RATIOS,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_RATIOS,null),controller);
	this.allowedConstructionsSelectionController.addSelectable(this.ratiosCheckBox,false);
	this.computerScientificNotationCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_COMPUTER_SCIENTIFIC_NOTATION),controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_HELPER_TEXT_COMPUTER_SCIENTIFIC_NOTATION),com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_COMPUTER_SCIENTIFIC_NOTATION,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_COMPUTER_SCIENTIFIC_NOTATION,null),controller);
	this.allowedConstructionsSelectionController.addSelectable(this.computerScientificNotationCheckBox,false);
	this.listsWithoutEnclosersCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_LISTS_WITHOUT_ENCLOSERS),controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_HELPER_TEXT_LISTS_WITHOUT_ENCLOSERS),com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_LISTS_WITHOUT_ENCLOSERS,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_LISTS_WITHOUT_ENCLOSERS,null),controller);
	this.allowedConstructionsSelectionController.addSelectable(this.listsWithoutEnclosersCheckBox,false);
	var listsWithoutEnclosersPanel = com.wiris.util.ui.component.FlowPanel.newWithChild(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM,this.listsWithoutEnclosersCheckBox);
	listsWithoutEnclosersPanel.setIndentationLevel(2);
	this.listsCheckBoxContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.listsCheckBoxContainer.addComponent(this.listsCheckBox);
	this.listsCheckBoxContainer.addComponent(listsWithoutEnclosersPanel);
	this.expansionController = new com.wiris.util.ui.controller.ExpansionController(this,listsWithoutEnclosersPanel,true);
	this.allowedConstructionsContainer.addComponent(allowedConstructionsLabel);
	this.allowedConstructionsContainer.addComponent(this.mixedFractionsCheckBox);
	this.allowedConstructionsContainer.addComponent(this.listsCheckBoxContainer);
	this.allowedConstructionsContainer.addComponent(this.intervalsCheckBox);
	this.allowedConstructionsContainer.addComponent(this.ratiosCheckBox);
	this.allowedConstructionsContainer.addComponent(this.computerScientificNotationCheckBox);
	this.separatorsContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	var separatorSymbolsLabel = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_SEPARATOR_SYMBOLS_LABEL));
	var separatorSymbolsHelperText = com.wiris.util.ui.component.Label.newTinyWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_SEPARATOR_SYMBOLS_HELPER_TEXT));
	var pointSeparatorLabel = com.wiris.util.ui.component.Label.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_SEPARATOR_POINT_LABEL));
	this.pointSeparatorDropdown = new com.wiris.util.ui.component.Dropdown();
	this.pointSeparatorDropdown.setId("inputOptionsPointSeparator");
	this.pointSeparatorDropdown.addValue(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_NOTHING,controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_SEPARATOR_NOTHING)).setId("inputOptionsPointSeparatorNothing");
	this.pointSeparatorDropdown.addValue(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_DECIMAL_PLACES,controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_SEPARATOR_DECIMAL_PLACES)).setId("inputOptionsPointSeparatorDecimal");
	this.pointSeparatorDropdown.addValue(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_DIGIT_GROUPS,controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_SEPARATOR_DIGIT_GROUPS)).setId("inputOptionsPointSeparatorDigitGroup");
	this.pointSeparatorDropdown.pickValue(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_DECIMAL_PLACES);
	this.pointSeparatorDropdown.setChangeValueAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_SEPARATOR_POINT_ID,null));
	this.pointSeparatorDropdown.addActionListener(controller);
	var pointSeparatorPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	pointSeparatorPanel.addClass(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.CLASS_SEPARATOR_ROW);
	pointSeparatorPanel.addComponent(pointSeparatorLabel);
	pointSeparatorPanel.addComponent(this.pointSeparatorDropdown);
	var commaSeparatorLabel = com.wiris.util.ui.component.Label.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_SEPARATOR_COMMA_LABEL));
	this.commaSeparatorDropdown = new com.wiris.util.ui.component.Dropdown();
	this.commaSeparatorDropdown.setId("inputOptionsCommaSeparator");
	this.commaSeparatorDropdown.addValue(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_DECIMAL_PLACES,controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_SEPARATOR_DECIMAL_PLACES)).setId("inputOptionsCommaSeparatorDecimal");
	this.commaSeparatorDropdown.addValue(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_DIGIT_GROUPS,controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_SEPARATOR_DIGIT_GROUPS)).setId("inputOptionsCommaSeparatorDigitGroup");
	this.commaSeparatorDropdown.addValue(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_LIST_ITEMS,controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_SEPARATOR_LIST_ITEMS)).setId("inputOptionsCommaSeparatorListItem");
	this.commaSeparatorDropdown.pickValue(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_LIST_ITEMS);
	this.commaSeparatorDropdown.setChangeValueAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_SEPARATOR_COMMA_ID,null));
	this.commaSeparatorDropdown.addActionListener(controller);
	var commaSeparatorPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	commaSeparatorPanel.addClass(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.CLASS_SEPARATOR_ROW);
	commaSeparatorPanel.addComponent(commaSeparatorLabel);
	commaSeparatorPanel.addComponent(this.commaSeparatorDropdown);
	var spaceSeparatorLabel = com.wiris.util.ui.component.Label.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_SEPARATOR_SPACE_LABEL));
	this.spaceSeparatorDropdown = new com.wiris.util.ui.component.Dropdown();
	this.spaceSeparatorDropdown.setId("inputOptionsSpaceSeparator");
	this.spaceSeparatorDropdown.addValue(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_NOTHING,controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_SEPARATOR_NOTHING)).setId("inputOptionsSpaceSeparatorNothing");
	this.spaceSeparatorDropdown.addValue(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_DIGIT_GROUPS,controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_SEPARATOR_DIGIT_GROUPS)).setId("inputOptionsSpaceSeparatorDigitGroup");
	this.spaceSeparatorDropdown.addValue(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_LIST_ITEMS,controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_SEPARATOR_LIST_ITEMS)).setId("inputOptionsSpaceSeparatorListItem");
	this.spaceSeparatorDropdown.pickValue(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_NOTHING);
	this.spaceSeparatorDropdown.setChangeValueAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_SEPARATOR_SPACE_ID,null));
	this.spaceSeparatorDropdown.addActionListener(controller);
	var spaceSeparatorPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	spaceSeparatorPanel.addClass(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.CLASS_SEPARATOR_ROW);
	spaceSeparatorPanel.addComponent(spaceSeparatorLabel);
	spaceSeparatorPanel.addComponent(this.spaceSeparatorDropdown);
	this.separatorsContainer.addComponent(separatorSymbolsLabel);
	this.separatorsContainer.addComponent(pointSeparatorPanel);
	this.separatorsContainer.addComponent(commaSeparatorPanel);
	this.separatorsContainer.addComponent(spaceSeparatorPanel);
	this.separatorsContainer.addComponent(separatorSymbolsHelperText);
	content.addComponent(this.constantsContainer);
	content.addComponent(this.functionsContainer);
	content.addComponent(this.measureUnitsContainer);
	content.addComponent(this.unitPrefixesContainer);
	content.addComponent(this.allowedConstructionsContainer);
	content.addComponent(this.separatorsContainer);
	this.addComponent(this.label);
	this.addComponent(content);
};
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","InputSyntaxComponent"];
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.getLabel = function(type,name) {
	return "quizzes_studio_input_options_input_syntax_" + type + "_" + name + "_label";
}
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.getActionId = function(type,name) {
	return type + name.substring(0,1).toUpperCase() + name.substring(1);
}
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.getChipId = function(type,name) {
	return "inputOptions" + type.substring(0,1).toUpperCase() + type.substring(1) + name.substring(0,1).toUpperCase() + name.substring(1);
}
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	showAllSyntaxAssertions: function() {
		this.setVisible(true);
		this.constantsContainer.setVisible(true);
		this.functionsContainer.setVisible(true);
		this.measureUnitsContainer.setVisible(true);
		this.unitPrefixesContainer.setVisible(true);
		this.allowedConstructionsContainer.setVisible(true);
		this.mixedFractionsCheckBox.setVisible(true);
		this.listsCheckBox.setVisible(true);
		this.listsWithoutEnclosersCheckBox.setVisible(true);
		this.intervalsCheckBox.setVisible(true);
		this.ratiosCheckBox.setVisible(true);
		this.computerScientificNotationCheckBox.setVisible(true);
		this.separatorsContainer.setVisible(true);
	}
	,showFeaturedSyntaxAssertions: function(featuredParams) {
		var showConstants = com.wiris.system.ArrayEx.contains(featuredParams,"constants");
		var showFunctions = com.wiris.system.ArrayEx.contains(featuredParams,"functions");
		var showMeasureUnits = com.wiris.system.ArrayEx.contains(featuredParams,"units");
		var showUnitPrefixes = com.wiris.system.ArrayEx.contains(featuredParams,"unitprefixes");
		var mixedFractions = com.wiris.system.ArrayEx.contains(featuredParams,"mixedfractions");
		var listOperators = com.wiris.system.ArrayEx.contains(featuredParams,"listoperators");
		var groupOperators = com.wiris.system.ArrayEx.contains(featuredParams,"groupoperators");
		var noBracketsList = com.wiris.system.ArrayEx.contains(featuredParams,"nobracketslist");
		var intervals = com.wiris.system.ArrayEx.contains(featuredParams,"intervals");
		var ratios = com.wiris.system.ArrayEx.contains(featuredParams,"ratios");
		var scientificNotation = com.wiris.system.ArrayEx.contains(featuredParams,"scientificnotation");
		var decimalSeparators = com.wiris.system.ArrayEx.contains(featuredParams,"decimalseparators");
		var digitGroupSeparators = com.wiris.system.ArrayEx.contains(featuredParams,"digitgroupseparators");
		var itemSeparators = com.wiris.system.ArrayEx.contains(featuredParams,"itemseparators");
		var showAllowedConstructions = mixedFractions || listOperators || groupOperators || noBracketsList || intervals || ratios || scientificNotation;
		var showSeparators = decimalSeparators || digitGroupSeparators || itemSeparators;
		if(showConstants || showFunctions || showMeasureUnits || showUnitPrefixes || showAllowedConstructions || showSeparators) {
			this.constantsContainer.setVisible(showConstants);
			this.functionsContainer.setVisible(showFunctions);
			this.measureUnitsContainer.setVisible(showMeasureUnits);
			this.unitPrefixesContainer.setVisible(showUnitPrefixes);
			this.allowedConstructionsContainer.setVisible(showAllowedConstructions);
			if(showAllowedConstructions) {
				this.mixedFractionsCheckBox.setVisible(mixedFractions);
				this.listsCheckBox.setVisible(listOperators || groupOperators);
				this.listsWithoutEnclosersCheckBox.setVisible(noBracketsList);
				this.intervalsCheckBox.setVisible(intervals);
				this.ratiosCheckBox.setVisible(ratios);
				this.computerScientificNotationCheckBox.setVisible(scientificNotation);
			}
			this.separatorsContainer.setVisible(showSeparators);
		} else this.setVisible(false);
	}
	,compareStrings: function(s1,s2) {
		if(s1.length > s2.length) return 1; else if(s2.length > s1.length) return -1; else return com.wiris.system.StringEx.compareTo(s1,s2);
	}
	,sortArrayByLengthAndName: function(array) {
		var result = new Array();
		var i;
		var _g1 = 0, _g = array.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(result.length == 0 || this.compareStrings(array[i1],result[result.length - 1]) >= 0) result.push(array[i1]); else {
				var j;
				var _g3 = 0, _g2 = result.length;
				while(_g3 < _g2) {
					var j1 = _g3++;
					if(this.compareStrings(array[i1],result[j1]) <= 0) {
						result.splice(j1,0,array[i1]);
						break;
					}
				}
			}
		}
		return result;
	}
	,setAllValues: function(h,state) {
		var it = h.keys();
		while(it.hasNext()) h.get(it.next()).setSelected(state);
	}
	,actionPerformed: function(e) {
		var action = e.getAction();
		var actionId = action.getId();
		if(actionId == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_LISTS) this.expansionController.toggle(); else if(actionId == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SELECT_ALL_CONSTANTS || actionId == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CLEAR_ALL_CONSTANTS) {
			var state = actionId == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SELECT_ALL_CONSTANTS;
			this.constantPiChip.setSelected(state);
			this.constantEChip.setSelected(state);
			this.constantIChip.setSelected(state);
			this.constantJChip.setSelected(state);
			var i = HxOverrides.iter(this.constantChips);
			while(i.hasNext()) {
				var chip = i.next();
				chip.setSelected(state);
			}
		} else if(actionId == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SELECT_ALL_FUNCTIONS || actionId == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CLEAR_ALL_FUNCTIONS) {
			var state = actionId == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SELECT_ALL_FUNCTIONS;
			this.functionExpLogChip.setSelected(state);
			this.functionTrigonometricChip.setSelected(state);
			this.functionHyperbolicChip.setSelected(state);
			this.functionArithmeticChip.setSelected(state);
			var i = HxOverrides.iter(this.functionChips);
			while(i.hasNext()) {
				var chip = i.next();
				chip.setSelected(state);
			}
		} else if(actionId == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SELECT_ALL_UNITS) this.setAllValues(this.measureUnits,true); else if(actionId == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CLEAR_ALL_UNITS) this.setAllValues(this.measureUnits,false); else if(actionId == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SELECT_ALL_PREFIXES) this.setAllValues(this.unitPrefixes,true); else if(actionId == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CLEAR_ALL_PREFIXES) this.setAllValues(this.unitPrefixes,false);
	}
	,setSpaceSeparator: function(separator) {
		if(separator == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_DIGIT_GROUPS || separator == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_LIST_ITEMS || separator == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_NOTHING) this.spaceSeparatorDropdown.pickValue(separator);
	}
	,setCommaSeparator: function(separator) {
		if(separator == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_DECIMAL_PLACES || separator == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_DIGIT_GROUPS || separator == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_LIST_ITEMS) this.commaSeparatorDropdown.pickValue(separator);
	}
	,setPointSeparator: function(separator) {
		if(separator == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_DECIMAL_PLACES || separator == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_DIGIT_GROUPS || separator == com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_NOTHING) this.pointSeparatorDropdown.pickValue(separator);
	}
	,setScientificNotation: function(selected) {
		this.computerScientificNotationCheckBox.setSelected(selected);
	}
	,setRatios: function(selected) {
		this.ratiosCheckBox.setSelected(selected);
	}
	,setIntervals: function(selected) {
		this.intervalsCheckBox.setSelected(selected);
	}
	,setNoBracketsLists: function(selected) {
		this.listsWithoutEnclosersCheckBox.setSelected(selected);
	}
	,setLists: function(selected) {
		this.listsCheckBox.setSelected(selected);
	}
	,setMixedFractions: function(selected) {
		this.mixedFractionsCheckBox.setSelected(selected);
	}
	,hideUnitPrefixes: function() {
		this.unitPrefixesMorePrefixesChip.setVisible(true);
		var _g = 0, _g1 = com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.UNIT_PREFIXES_SECONDARY;
		while(_g < _g1.length) {
			var unit = _g1[_g];
			++_g;
			this.unitPrefixes.get(unit).setVisible(false);
		}
	}
	,showAllUnitPrefixes: function() {
		this.unitPrefixesMorePrefixesChip.setVisible(false);
		var _g = 0, _g1 = com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.UNIT_PREFIXES_SECONDARY;
		while(_g < _g1.length) {
			var unit = _g1[_g];
			++_g;
			this.unitPrefixes.get(unit).setVisible(true);
		}
	}
	,hideUnits: function() {
		this.measureUnitsMoreUnitsChip.setVisible(true);
		var _g = 0, _g1 = com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.MEASURE_UNITS_SECONDARY;
		while(_g < _g1.length) {
			var unit = _g1[_g];
			++_g;
			this.measureUnits.get(unit).setVisible(false);
		}
	}
	,showAllUnits: function() {
		this.measureUnitsMoreUnitsChip.setVisible(false);
		var _g = 0, _g1 = com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.MEASURE_UNITS_SECONDARY;
		while(_g < _g1.length) {
			var unit = _g1[_g];
			++_g;
			this.measureUnits.get(unit).setVisible(true);
		}
	}
	,showAllFunctions: function() {
		var i = HxOverrides.iter(this.functionChips);
		while(i.hasNext()) {
			var chip = i.next();
			chip.setVisible(true);
		}
		this.moreFunctionsChip.setVisible(false);
	}
	,showAllConstants: function() {
		var i = HxOverrides.iter(this.constantChips);
		while(i.hasNext()) {
			var chip = i.next();
			chip.setVisible(true);
		}
		this.moreConstantsChip.setVisible(false);
	}
	,createFilterChip: function(unit,typeLabel,typeId,chipHash,selectionController,chipGroup) {
		var chip = com.wiris.util.ui.component.FilterChip.newFilterChip(this.controller.t(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.getLabel(typeLabel,unit)),com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.getActionId(typeId,unit),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.getActionId(typeId,unit),null),this.controller);
		chip.setId(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.getChipId(typeId,unit));
		selectionController.addSelectable(chip,false);
		chipHash.set(unit,chip);
		chipGroup.addComponent(chip);
		return chip;
	}
	,setUnitPrefixes: function(unitPrefixes) {
		var _g1 = 0, _g = com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.UNIT_PREFIXES_MAIN.length;
		while(_g1 < _g) {
			var i = _g1++;
			this.unitPrefixes.get(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.UNIT_PREFIXES_MAIN[i]).setSelected(com.wiris.system.ArrayEx.contains(unitPrefixes,com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.UNIT_PREFIXES_MAIN_SYMBOLS[i]));
		}
		var secondaryPrefixesSelected = false;
		var _g1 = 0, _g = com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.UNIT_PREFIXES_SECONDARY.length;
		while(_g1 < _g) {
			var i = _g1++;
			var b = com.wiris.system.ArrayEx.contains(unitPrefixes,com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.UNIT_PREFIXES_SECONDARY_SYMBOLS[i]);
			this.unitPrefixes.get(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.UNIT_PREFIXES_SECONDARY[i]).setSelected(b);
			secondaryPrefixesSelected = secondaryPrefixesSelected || b;
		}
		if(!secondaryPrefixesSelected) this.hideUnitPrefixes();
	}
	,setUnits: function(units) {
		var _g1 = 0, _g = com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.MEASURE_UNITS_MAIN.length;
		while(_g1 < _g) {
			var i = _g1++;
			this.measureUnits.get(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.MEASURE_UNITS_MAIN[i]).setSelected(com.wiris.system.ArrayEx.contains(units,com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.MEASURE_UNITS_MAIN_SYMBOLS[i]));
		}
		var secondaryUnitsSelected = false;
		var _g1 = 0, _g = com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.MEASURE_UNITS_SECONDARY.length;
		while(_g1 < _g) {
			var i = _g1++;
			var b = com.wiris.system.ArrayEx.contains(units,com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.MEASURE_UNITS_SECONDARY_SYMBOLS[i]);
			this.measureUnits.get(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.MEASURE_UNITS_SECONDARY[i]).setSelected(b);
			secondaryUnitsSelected = secondaryUnitsSelected || b;
		}
		if(!secondaryUnitsSelected) this.hideUnits();
	}
	,setFunctions: function(functions,userFunctions) {
		this.functionExpLogChip.setSelected(com.wiris.system.ArrayEx.contains(functions,"exp"));
		this.functionTrigonometricChip.setSelected(com.wiris.system.ArrayEx.contains(functions,"sin"));
		this.functionHyperbolicChip.setSelected(com.wiris.system.ArrayEx.contains(functions,"sinh"));
		this.functionArithmeticChip.setSelected(com.wiris.system.ArrayEx.contains(functions,"min"));
		var i = HxOverrides.iter(this.functionChips);
		while(i.hasNext()) {
			var chip = i.next();
			chip.setSelected(false);
			this.functionsSelectionController.removeSelectable(chip.getSelectableId());
			this.functionsChipGroup.removeComponent(com.wiris.util.type.Arrays.indexOfElement(this.functionsChipGroup.getComponents(),chip));
		}
		var moreFunctionsIndex = com.wiris.util.type.Arrays.indexOfElement(this.functionsChipGroup.getComponents(),this.moreFunctionsChip);
		if(moreFunctionsIndex > 0) this.functionsChipGroup.removeComponent(moreFunctionsIndex);
		this.functionChips = new Array();
		userFunctions = this.sortArrayByLengthAndName(userFunctions);
		var j;
		var hiddenFunctions = true;
		var _g1 = 0, _g = functions.length;
		while(_g1 < _g) {
			var j1 = _g1++;
			if(com.wiris.util.type.Arrays.indexOfElement(userFunctions,functions[j1]) >= 3) hiddenFunctions = false;
		}
		var _g1 = 0, _g = userFunctions.length;
		while(_g1 < _g) {
			var j1 = _g1++;
			var chip = com.wiris.util.ui.component.FilterChip.newFilterChip(userFunctions[j1],userFunctions[j1],new com.wiris.util.ui.Action("function" + userFunctions[j1],null),this.controller);
			if(j1 >= 3 && hiddenFunctions) chip.setVisible(false);
			this.functionsSelectionController.addSelectable(chip,com.wiris.system.ArrayEx.contains(functions,userFunctions[j1]));
			this.functionChips.push(chip);
			this.functionsChipGroup.addComponent(chip);
		}
		if(userFunctions.length > 3) {
			this.functionsChipGroup.addComponent(this.moreFunctionsChip);
			this.moreFunctionsChip.setVisible(hiddenFunctions);
		}
	}
	,setConstants: function(constants,userConstants) {
		this.constantPiChip.setSelected(com.wiris.system.ArrayEx.contains(constants,com.wiris.system.Utf8.uchr(960)));
		this.constantEChip.setSelected(com.wiris.system.ArrayEx.contains(constants,"e"));
		this.constantIChip.setSelected(com.wiris.system.ArrayEx.contains(constants,"i"));
		this.constantJChip.setSelected(com.wiris.system.ArrayEx.contains(constants,"j"));
		var i = HxOverrides.iter(this.constantChips);
		while(i.hasNext()) {
			var chip = i.next();
			chip.setSelected(false);
			this.constantsSelectionController.removeSelectable(chip.getSelectableId());
			this.constantsChipGroup.removeComponent(com.wiris.util.type.Arrays.indexOfElement(this.constantsChipGroup.getComponents(),chip));
		}
		var moreConstantsIndex = com.wiris.util.type.Arrays.indexOfElement(this.constantsChipGroup.getComponents(),this.moreConstantsChip);
		if(moreConstantsIndex > 0) this.constantsChipGroup.removeComponent(moreConstantsIndex);
		this.constantChips = new Array();
		userConstants = this.sortArrayByLengthAndName(userConstants);
		var j;
		var hiddenConstants = true;
		var _g1 = 0, _g = constants.length;
		while(_g1 < _g) {
			var j1 = _g1++;
			if(com.wiris.util.type.Arrays.indexOfElement(userConstants,constants[j1]) >= 3) hiddenConstants = false;
		}
		var _g1 = 0, _g = userConstants.length;
		while(_g1 < _g) {
			var j1 = _g1++;
			var chip = com.wiris.util.ui.component.FilterChip.newFilterChip(userConstants[j1],userConstants[j1],new com.wiris.util.ui.Action("constant" + userConstants[j1],null),this.controller);
			if(j1 >= 3 && hiddenConstants) chip.setVisible(false);
			this.constantsSelectionController.addSelectable(chip,com.wiris.system.ArrayEx.contains(constants,userConstants[j1]));
			this.constantChips.push(chip);
			this.constantsChipGroup.addComponent(chip);
		}
		if(userConstants.length > 3) {
			this.constantsChipGroup.addComponent(this.moreConstantsChip);
			this.moreConstantsChip.setVisible(hiddenConstants);
		}
	}
	,updateVisibility: function() {
		this.setVisible(this.controller.getContext().isOptInputSyntax());
		this.constantsContainer.setVisible(this.controller.getConfigurationKey("inputOptions/inputSyntax/constants"));
		this.functionsContainer.setVisible(this.controller.getConfigurationKey("inputOptions/inputSyntax/functions"));
		this.measureUnitsContainer.setVisible(this.controller.getConfigurationKey("inputOptions/inputSyntax/measureUnits"));
		this.unitPrefixesContainer.setVisible(this.controller.getConfigurationKey("inputOptions/inputSyntax/unitPrefixes"));
		var allowedConstructions = this.controller.getConfigurationKey("inputOptions/inputSyntax/allowedConstructions");
		this.allowedConstructionsContainer.setVisible(allowedConstructions);
		if(allowedConstructions) {
			this.mixedFractionsCheckBox.setVisible(this.controller.getConfigurationKey("inputOptions/inputSyntax/allowedConstructions/mixedFractions"));
			this.listsCheckBoxContainer.setVisible(this.controller.getConfigurationKey("inputOptions/inputSyntax/allowedConstructions/lists"));
			this.intervalsCheckBox.setVisible(this.controller.getConfigurationKey("inputOptions/inputSyntax/allowedConstructions/intervals"));
			this.ratiosCheckBox.setVisible(this.controller.getConfigurationKey("inputOptions/inputSyntax/allowedConstructions/ratios"));
			this.computerScientificNotationCheckBox.setVisible(this.controller.getConfigurationKey("inputOptions/inputSyntax/allowedConstructions/computerScientificNotation"));
		}
		this.separatorsContainer.setVisible(this.controller.getConfigurationKey("inputOptions/inputSyntax/separatorSymbols"));
	}
	,allowedConstructionsContainer: null
	,allowedConstructionsSelectionController: null
	,unitPrefixesSelectionController: null
	,measureUnitsSelectionController: null
	,functionsSelectionController: null
	,constantsSelectionController: null
	,expansionController: null
	,controller: null
	,separatorsContainer: null
	,spaceSeparatorDropdown: null
	,commaSeparatorDropdown: null
	,pointSeparatorDropdown: null
	,listsCheckBoxContainer: null
	,listsWithoutEnclosersCheckBox: null
	,computerScientificNotationCheckBox: null
	,ratiosCheckBox: null
	,intervalsCheckBox: null
	,listsCheckBox: null
	,mixedFractionsCheckBox: null
	,unitPrefixesContainer: null
	,unitPrefixesMorePrefixesChip: null
	,unitPrefixes: null
	,measureUnitsMoreUnitsChip: null
	,measureUnits: null
	,measureUnitsContainer: null
	,functionsContainer: null
	,functionsChipGroup: null
	,moreFunctionsChip: null
	,functionChips: null
	,functionArithmeticChip: null
	,functionHyperbolicChip: null
	,functionTrigonometricChip: null
	,functionExpLogChip: null
	,constantsContainer: null
	,constantsChipGroup: null
	,moreConstantsChip: null
	,constantChips: null
	,constantJChip: null
	,constantIChip: null
	,constantEChip: null
	,constantPiChip: null
	,label: null
	,__class__: com.wiris.quizzes.impl.ui.component.InputSyntaxComponent
});
com.wiris.util.ui.component.Label = $hxClasses["com.wiris.util.ui.component.Label"] = function() {
	com.wiris.util.ui.component.Component.call(this);
	this.addClass(com.wiris.util.ui.component.Label.CLASS_LABEL);
	this.text = null;
};
com.wiris.util.ui.component.Label.__name__ = ["com","wiris","util","ui","component","Label"];
com.wiris.util.ui.component.Label.newWithText = function(text) {
	var label = new com.wiris.util.ui.component.Label();
	label.setText(text);
	return label;
}
com.wiris.util.ui.component.Label.newImportantWithText = function(text) {
	var label = com.wiris.util.ui.component.Label.newWithText(text);
	label.addClass(com.wiris.util.ui.component.Label.CLASS_LABEL_IMPORTANT);
	return label;
}
com.wiris.util.ui.component.Label.newHeaderWithText = function(text) {
	var label = com.wiris.util.ui.component.Label.newWithText(text);
	label.addClass(com.wiris.util.ui.component.Label.CLASS_LABEL_HEADER);
	return label;
}
com.wiris.util.ui.component.Label.newTinyWithText = function(text) {
	var label = com.wiris.util.ui.component.Label.newWithText(text);
	label.addClass(com.wiris.util.ui.component.Label.CLASS_LABEL_TINY);
	return label;
}
com.wiris.util.ui.component.Label.__super__ = com.wiris.util.ui.component.Component;
com.wiris.util.ui.component.Label.prototype = $extend(com.wiris.util.ui.component.Component.prototype,{
	setText: function(text) {
		this.text = text;
		this.changeState();
	}
	,getText: function() {
		return this.text;
	}
	,text: null
	,__class__: com.wiris.util.ui.component.Label
});
com.wiris.quizzes.impl.ui.component.MathLabel = $hxClasses["com.wiris.quizzes.impl.ui.component.MathLabel"] = function() {
	com.wiris.util.ui.component.Label.call(this);
	this.addClass(com.wiris.quizzes.impl.ui.component.MathLabel.CLASS_MATH_LABEL);
	this.mathML = false;
	this.graphic = false;
};
com.wiris.quizzes.impl.ui.component.MathLabel.__name__ = ["com","wiris","quizzes","impl","ui","component","MathLabel"];
com.wiris.quizzes.impl.ui.component.MathLabel.newWithText = function(text) {
	var label = new com.wiris.quizzes.impl.ui.component.MathLabel();
	label.setText(text);
	return label;
}
com.wiris.quizzes.impl.ui.component.MathLabel.newImportantWithText = function(text) {
	var label = com.wiris.quizzes.impl.ui.component.MathLabel.newWithText(text);
	label.addClass(com.wiris.util.ui.component.Label.CLASS_LABEL_IMPORTANT);
	return label;
}
com.wiris.quizzes.impl.ui.component.MathLabel.newHeaderWithText = function(text) {
	var label = com.wiris.quizzes.impl.ui.component.MathLabel.newWithText(text);
	label.addClass(com.wiris.util.ui.component.Label.CLASS_LABEL_HEADER);
	return label;
}
com.wiris.quizzes.impl.ui.component.MathLabel.newTinyWithText = function(text) {
	var label = com.wiris.quizzes.impl.ui.component.MathLabel.newWithText(text);
	label.addClass(com.wiris.util.ui.component.Label.CLASS_LABEL_TINY);
	return label;
}
com.wiris.quizzes.impl.ui.component.MathLabel.__super__ = com.wiris.util.ui.component.Label;
com.wiris.quizzes.impl.ui.component.MathLabel.prototype = $extend(com.wiris.util.ui.component.Label.prototype,{
	isGraphic: function() {
		return this.graphic;
	}
	,isMathML: function() {
		return this.mathML;
	}
	,setText: function(text) {
		if(text == null) text = "";
		var type = com.wiris.quizzes.impl.MathContent.getMathType(text);
		this.mathML = !(text == "") && type == com.wiris.quizzes.impl.MathContent.TYPE_MATHML;
		this.graphic = !(text == "") && type == com.wiris.quizzes.impl.MathContent.TYPE_GEOMETRY_FILE;
		com.wiris.util.ui.component.Label.prototype.setText.call(this,text);
	}
	,graphic: null
	,mathML: null
	,__class__: com.wiris.quizzes.impl.ui.component.MathLabel
});
com.wiris.util.ui.component.TextComponent = $hxClasses["com.wiris.util.ui.component.TextComponent"] = function() {
	com.wiris.util.ui.component.InputComponent.call(this);
	this.addClass(com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT).addClass(com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_EMPTY);
	this.getStyle().setWidth(com.wiris.util.ui.Style.SIZE_FULL);
	this.text = "";
	this.placeholder = "";
	this.label = "";
	this.readOnly = false;
	this.changeAction = null;
};
com.wiris.util.ui.component.TextComponent.__name__ = ["com","wiris","util","ui","component","TextComponent"];
com.wiris.util.ui.component.TextComponent.__interfaces__ = [com.wiris.util.ui.component.Field];
com.wiris.util.ui.component.TextComponent.__super__ = com.wiris.util.ui.component.InputComponent;
com.wiris.util.ui.component.TextComponent.prototype = $extend(com.wiris.util.ui.component.InputComponent.prototype,{
	getComponent: function() {
		return this;
	}
	,setValue: function(value) {
		if(value == null) value = "";
		if(value == this.text) return;
		this.text = value;
		this.changeState();
		if(this.text.length == 0) this.addClass(com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_EMPTY); else this.removeClass(com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_EMPTY);
		if(this.changeAction != null) this.performAction(this.changeAction);
	}
	,getValue: function() {
		return this.text;
	}
	,setChangeAction: function(action) {
		this.changeAction = action;
	}
	,getSuffix: function() {
		return this.suffix;
	}
	,setSuffix: function(suffix) {
		this.suffix = suffix;
		if(this.suffix.length > 0) this.addClass(com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_WITH_SUFFIX); else this.removeClass(com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_WITH_SUFFIX);
	}
	,getPrefix: function() {
		return this.prefix;
	}
	,setPrefix: function(prefix) {
		this.prefix = prefix;
		if(this.prefix.length > 0) this.addClass(com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_WITH_PREFIX); else this.removeClass(com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_WITH_PREFIX);
		this.changeState();
	}
	,setLabel: function(label) {
		this.label = label;
		if(this.label.length > 0) this.addClass(com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_WITH_LABEL); else this.removeClass(com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_WITH_LABEL);
		this.changeState();
	}
	,getLabel: function() {
		return this.label;
	}
	,setPlaceholder: function(placeholder) {
		this.placeholder = placeholder;
	}
	,getPlaceholder: function() {
		return this.placeholder;
	}
	,isReadOnly: function() {
		return this.readOnly;
	}
	,setReadOnly: function(readOnly) {
		this.readOnly = readOnly;
		this.changeState();
	}
	,isEmpty: function() {
		return this.text.length == 0;
	}
	,getChangeAction: function() {
		return this.changeAction;
	}
	,setEnabled: function(enabled) {
		if(enabled) this.removeClass(com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_DISABLED); else this.addClass(com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_DISABLED);
		return com.wiris.util.ui.component.InputComponent.prototype.setEnabled.call(this,enabled);
	}
	,changeAction: null
	,readOnly: null
	,placeholder: null
	,suffix: null
	,prefix: null
	,label: null
	,text: null
	,__class__: com.wiris.util.ui.component.TextComponent
});
com.wiris.util.ui.component.TextField = $hxClasses["com.wiris.util.ui.component.TextField"] = function() {
	com.wiris.util.ui.component.TextComponent.call(this);
	this.addClass(com.wiris.util.ui.component.TextField.CLASS_TEXT_FIELD);
	this.valid = true;
	this.required = false;
	this.errorText = "";
	this.helperText = "";
	this.size = com.wiris.util.ui.component.TextField.NO_SIZE;
};
com.wiris.util.ui.component.TextField.__name__ = ["com","wiris","util","ui","component","TextField"];
com.wiris.util.ui.component.TextField.newWithLabel = function(label) {
	var textField = new com.wiris.util.ui.component.TextField();
	textField.setLabel(label);
	return textField;
}
com.wiris.util.ui.component.TextField.newWithPlaceholder = function(placeholder) {
	var textField = new com.wiris.util.ui.component.TextField();
	textField.setPlaceholder(placeholder);
	return textField;
}
com.wiris.util.ui.component.TextField.newWithLabelAndPlaceholder = function(label,placeholder) {
	var textField = new com.wiris.util.ui.component.TextField();
	textField.setPlaceholder(placeholder);
	textField.setLabel(label);
	return textField;
}
com.wiris.util.ui.component.TextField.__super__ = com.wiris.util.ui.component.TextComponent;
com.wiris.util.ui.component.TextField.prototype = $extend(com.wiris.util.ui.component.TextComponent.prototype,{
	getSize: function() {
		return this.size;
	}
	,setSize: function(size) {
		this.size = size;
		this.changeState();
	}
	,usesSize: function() {
		return this.size == com.wiris.util.ui.component.TextField.NO_SIZE;
	}
	,getErrorText: function() {
		return this.errorText;
	}
	,setHelperText: function(helperText) {
		this.helperText = helperText;
	}
	,getHelperText: function() {
		return this.helperText;
	}
	,clearError: function() {
		this.setError(null);
	}
	,setError: function(error) {
		if(error != null) {
			if(this.getStatus() != com.wiris.util.ui.component.InputComponent.STATUS_ERROR) {
				this.setStatus(com.wiris.util.ui.component.InputComponent.STATUS_ERROR);
				this.errorText = error;
				this.changeState();
			}
		} else if(this.getStatus() == com.wiris.util.ui.component.InputComponent.STATUS_ERROR) {
			this.setStatus(com.wiris.util.ui.component.InputComponent.STATUS_INDETERMINATE);
			this.errorText = "";
			this.changeState();
		}
	}
	,setRequired: function(required) {
		this.required = required;
	}
	,isRequired: function() {
		return this.required;
	}
	,isValid: function() {
		return this.valid;
	}
	,setValid: function(valid) {
		this.valid = valid;
	}
	,size: null
	,helperText: null
	,errorText: null
	,required: null
	,valid: null
	,__class__: com.wiris.util.ui.component.TextField
});
com.wiris.quizzes.impl.ui.component.MathTextField = $hxClasses["com.wiris.quizzes.impl.ui.component.MathTextField"] = function() {
	com.wiris.util.ui.component.TextField.call(this);
	this.addClass(com.wiris.quizzes.impl.ui.component.MathTextField.CLASS_MATH_TEXT_FIELD);
	this.getStyle().setMinHeight(50);
	this.mathML = false;
	this.graphic = false;
};
com.wiris.quizzes.impl.ui.component.MathTextField.__name__ = ["com","wiris","quizzes","impl","ui","component","MathTextField"];
com.wiris.quizzes.impl.ui.component.MathTextField.__super__ = com.wiris.util.ui.component.TextField;
com.wiris.quizzes.impl.ui.component.MathTextField.prototype = $extend(com.wiris.util.ui.component.TextField.prototype,{
	isEmpty: function() {
		if(com.wiris.quizzes.impl.MathContent.getMathType(this.getValue()) == com.wiris.quizzes.impl.MathContent.TYPE_MATHML) return com.wiris.quizzes.impl.MathContent.isEmpty(this.getValue()); else return com.wiris.util.ui.component.TextField.prototype.isEmpty.call(this);
	}
	,setGraphicValue: function(value) {
		this.mathML = false;
		this.graphic = true;
		com.wiris.util.ui.component.TextField.prototype.setValue.call(this,value);
	}
	,setMathMLValue: function(value) {
		this.mathML = true;
		this.graphic = false;
		com.wiris.util.ui.component.TextField.prototype.setValue.call(this,value);
	}
	,setTextValue: function(value) {
		this.graphic = false;
		this.mathML = false;
		com.wiris.util.ui.component.TextField.prototype.setValue.call(this,value);
	}
	,setValue: function(value) {
		var tools = new com.wiris.quizzes.impl.HTMLTools();
		if(value == null) value = "";
		var type = com.wiris.quizzes.impl.MathContent.getMathType(value);
		if(type == com.wiris.quizzes.impl.MathContent.TYPE_MATHML) {
			if(com.wiris.quizzes.impl.MathContent.isEmpty(value)) this.setTextValue(""); else if(tools.isTokensMathML(value)) this.setTextValue(tools.mathMLToText(value)); else this.setMathMLValue(value);
		} else if(type == com.wiris.quizzes.impl.MathContent.TYPE_GEOMETRY_FILE) this.setGraphicValue(value); else this.setTextValue(value);
	}
	,isGraphic: function() {
		return this.graphic;
	}
	,isMathML: function() {
		return this.mathML;
	}
	,graphic: null
	,mathML: null
	,__class__: com.wiris.quizzes.impl.ui.component.MathTextField
});
com.wiris.util.ui.interaction.KeyListener = $hxClasses["com.wiris.util.ui.interaction.KeyListener"] = function() { }
com.wiris.util.ui.interaction.KeyListener.__name__ = ["com","wiris","util","ui","interaction","KeyListener"];
com.wiris.util.ui.interaction.KeyListener.prototype = {
	keyType: null
	,keyRelease: null
	,keyPress: null
	,__class__: com.wiris.util.ui.interaction.KeyListener
}
com.wiris.util.ui.interaction.ComponentListener = $hxClasses["com.wiris.util.ui.interaction.ComponentListener"] = function() { }
com.wiris.util.ui.interaction.ComponentListener.__name__ = ["com","wiris","util","ui","interaction","ComponentListener"];
com.wiris.util.ui.interaction.ComponentListener.prototype = {
	styleChanged: null
	,blurRequested: null
	,focusRequested: null
	,draggableChanged: null
	,enabledChanged: null
	,visibilityChanged: null
	,__class__: com.wiris.util.ui.interaction.ComponentListener
}
com.wiris.quizzes.impl.ui.component.PopupTextField = $hxClasses["com.wiris.quizzes.impl.ui.component.PopupTextField"] = function(tooltip,icon) {
	com.wiris.quizzes.impl.ui.component.MathTextField.call(this);
	this.addClass(com.wiris.quizzes.impl.ui.component.PopupTextField.CLASS_POPUP_TEXT_FIELD);
	this.openPopupAction = new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.PopupTextField.OPENED_POPUP_ACTION_ID,null);
	this.windowLoadedAction = new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.PopupTextField.POPUP_TEXT_FIELD_WINDOW_LOADED_ACTION_ID,null);
	this.button = com.wiris.util.ui.component.Button.newWithIcon(tooltip,icon,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.PopupTextField.POPUP_TEXT_FIELD_BUTTON_ACTION_ID,null),this);
	this.button.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
	this.button.getStyle().setWidth(34).setHeight(34);
	this.button.setParent(this);
	this.windowComponent = this.createWindowComponent();
	this.windowLoaded = false;
	this.setModalWindow(this.createModalWindow());
	this.addKeyListener(this);
	this.addMouseListener(this);
	if(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().isForceLTR()) this.addClass(com.wiris.util.ui.component.TextField.CLASS_FORCE_LTR);
};
com.wiris.quizzes.impl.ui.component.PopupTextField.__name__ = ["com","wiris","quizzes","impl","ui","component","PopupTextField"];
com.wiris.quizzes.impl.ui.component.PopupTextField.__interfaces__ = [com.wiris.util.ui.interaction.MouseListener,com.wiris.util.ui.interaction.KeyListener,com.wiris.util.ui.interaction.ComponentListener,com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.component.PopupTextField.newWithComponent = function(tooltip,icon,content) {
	var textField = new com.wiris.quizzes.impl.ui.component.PopupTextField(tooltip,icon);
	textField.getModalWindow().addComponent(content);
	return textField;
}
com.wiris.quizzes.impl.ui.component.PopupTextField.__super__ = com.wiris.quizzes.impl.ui.component.MathTextField;
com.wiris.quizzes.impl.ui.component.PopupTextField.prototype = $extend(com.wiris.quizzes.impl.ui.component.MathTextField.prototype,{
	styleChanged: function(e) {
	}
	,blurRequested: function(e) {
	}
	,focusRequested: function(e) {
	}
	,draggableChanged: function(e) {
	}
	,enabledChanged: function(e) {
	}
	,visibilityChanged: function(e) {
		if(e.getSource().isVisible()) {
			if(this.getMainFocus() != null) new com.wiris.util.ui.async.FocusTask(this.getMainFocus());
		} else new com.wiris.util.ui.async.FocusTask(this);
	}
	,actionPerformed: function(e) {
		var action = e.getAction();
		var actionId = action.getId();
		if(actionId == com.wiris.quizzes.impl.ui.component.PopupTextField.POPUP_TEXT_FIELD_BUTTON_ACTION_ID) this.open();
	}
	,mouseExit: function(e) {
	}
	,mouseEnter: function(e) {
	}
	,mouseRelease: function(e) {
	}
	,mousePress: function(e) {
	}
	,mouseDoubleClick: function(e) {
	}
	,mouseClick: function(e) {
		if(e.getTarget() == this) {
			if(this.isMathML() || this.isGraphic()) this.open();
		}
	}
	,keyType: function(e) {
	}
	,keyRelease: function(e) {
		var keyCode = e.getKeyCode();
		if(com.wiris.util.ui.interaction.KeyCode.ENTER == keyCode) {
			if(e.getTarget() == this) this.open();
		}
	}
	,keyPress: function(e) {
	}
	,onWindowLoaded: function() {
		if(!this.windowLoaded) {
			this.windowLoaded = true;
			this.performAction(this.windowLoadedAction);
		}
		this.getMainFocus().requestFocus();
	}
	,setGraphicValue: function(value) {
		com.wiris.quizzes.impl.ui.component.MathTextField.prototype.setGraphicValue.call(this,value);
		this.addClass(com.wiris.quizzes.impl.ui.component.PopupTextField.CLASS_POPUP_TEXT_FIELD_CLICKABLE);
	}
	,setMathMLValue: function(value) {
		com.wiris.quizzes.impl.ui.component.MathTextField.prototype.setMathMLValue.call(this,value);
		this.addClass(com.wiris.quizzes.impl.ui.component.PopupTextField.CLASS_POPUP_TEXT_FIELD_CLICKABLE);
	}
	,setTextValue: function(value) {
		com.wiris.quizzes.impl.ui.component.MathTextField.prototype.setTextValue.call(this,value);
		this.removeClass(com.wiris.quizzes.impl.ui.component.PopupTextField.CLASS_POPUP_TEXT_FIELD_CLICKABLE);
	}
	,open: function() {
		this.performAction(this.openPopupAction);
		this.modalWindow.open();
		if(!this.isWindowLoaded()) this.onWindowLoaded();
	}
	,setOpenPopupAction: function(openPopupAction) {
		this.openPopupAction = openPopupAction;
	}
	,getOpenPopupAction: function() {
		return this.openPopupAction;
	}
	,isWindowLoaded: function() {
		return this.windowLoaded;
	}
	,getMainFocus: function() {
		return null;
	}
	,getWindowComponent: function() {
		return this.windowComponent;
	}
	,setModalWindow: function(window) {
		if(window != null) {
			if(this.modalWindow != null) {
				this.modalWindow.removeComponentListener(this);
				this.windowComponent.removeAllComponents();
			}
			this.modalWindow = window;
			this.modalWindow.addComponentListener(this);
			if(!this.windowComponent.isChild(this.modalWindow)) this.windowComponent.addComponent(this.modalWindow);
		}
	}
	,getModalWindow: function() {
		return this.modalWindow;
	}
	,getButton: function() {
		return this.button;
	}
	,getComponentsByClassName: function(className) {
		var result = new Array();
		if(this.hasClass(className)) result.push(this);
		if(this.button.hasClass(className)) result.push(this.button);
		return result;
	}
	,getComponentById: function(id) {
		if(this.button.getComponentById(id) != null) return this.button.getComponentById(id);
		if(this.isWindowLoaded()) {
			if(this.modalWindow.getComponentById(id) != null) return this.modalWindow.getComponentById(id);
		}
		return com.wiris.quizzes.impl.ui.component.MathTextField.prototype.getComponentById.call(this,id);
	}
	,getChildren: function() {
		var children = new Array();
		children.push(this.button);
		if(this.isWindowLoaded()) children.push(this.modalWindow);
		return children;
	}
	,createWindowComponent: function() {
		var windowComponent = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
		windowComponent.getStyle().setWidth(0).setHeight(0);
		windowComponent.setApplicationClass(com.wiris.quizzes.impl.ui.component.PopupTextField.CLASS_POPUP_TEXT_FIELD_WINDOW);
		windowComponent.setParent(this);
		return windowComponent;
	}
	,createModalWindow: function() {
		return new com.wiris.quizzes.impl.ui.component.PopupWindow(this);
	}
	,windowLoadedAction: null
	,openPopupAction: null
	,windowComponent: null
	,modalWindow: null
	,button: null
	,windowLoaded: null
	,__class__: com.wiris.quizzes.impl.ui.component.PopupTextField
});
com.wiris.quizzes.impl.ui.component.MathTypePopupTextField = $hxClasses["com.wiris.quizzes.impl.ui.component.MathTypePopupTextField"] = function(mathtypeParameters) {
	this.easyModalClose = false;
	com.wiris.quizzes.impl.ui.component.PopupTextField.call(this,com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.POPUP_MATHTYPE_TEXT_FIELD_BUTTON_TOOLTIP),com.wiris.util.ui.ImageIcon.newFromFile(com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.POPUP_MATHTYPE_TEXT_FIELD_BUTTON_ICON));
	this.getButton().addClass(com.wiris.util.ui.component.Button.CLASS_BUTTON_CONTAINED);
	this.getButton().getStyle().setBackgroundColor(com.wiris.util.graphics.Color.fromText("#f26a54"));
	this.editor = com.wiris.quizzes.impl.ui.component.MathTypeInputComponent.newWithValue(this.getValue(),mathtypeParameters);
	this.getModalWindow().setMovable(true);
	this.getModalWindow().setTitle("MathType");
	this.getModalWindow().setResizable(true);
	var closeButton = com.wiris.util.ui.component.Button.newWithIcon(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.TOOLTIP_CLOSE_MATHTYPE_POPUP),new com.wiris.util.ui.MaterialIcon("close"),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.POPUP_MATHTYPE_TEXT_FIELD_CANCEL_ACTION_ID,com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.POPUP_MATHTYPE_TEXT_FIELD_CANCEL_ACTION_ID),this);
	this.getModalWindow().addTitleBarButton(closeButton);
};
com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.__name__ = ["com","wiris","quizzes","impl","ui","component","MathTypePopupTextField"];
com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.__super__ = com.wiris.quizzes.impl.ui.component.PopupTextField;
com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.prototype = $extend(com.wiris.quizzes.impl.ui.component.PopupTextField.prototype,{
	setReadOnly: function(readOnly) {
		com.wiris.quizzes.impl.ui.component.PopupTextField.prototype.setReadOnly.call(this,readOnly);
		this.editor.setReadOnly(readOnly);
	}
	,open: function() {
		com.wiris.quizzes.impl.ui.component.PopupTextField.prototype.open.call(this);
		this.editor.setValue(this.getValue());
		this.editor.requestFocus();
	}
	,setGrammarUrl: function(grammarUrl,check) {
		this.editor.setGrammarUrl(grammarUrl,check);
	}
	,setParameters: function(parameters) {
		this.editor.setParameters(parameters);
	}
	,actionPerformed: function(e) {
		var action = e.getAction();
		var actionId = action.getId();
		if(actionId == com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.POPUP_MATHTYPE_TEXT_FIELD_ACCEPT_VALUE_ACTION_ID) {
			this.setValue(this.editor.getValue());
			this.getModalWindow().close();
		} else if(actionId == com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.POPUP_MATHTYPE_TEXT_FIELD_CANCEL_ACTION_ID) this.getModalWindow().close(); else com.wiris.quizzes.impl.ui.component.PopupTextField.prototype.actionPerformed.call(this,e);
	}
	,onWindowLoaded: function() {
		com.wiris.quizzes.impl.ui.component.PopupTextField.prototype.onWindowLoaded.call(this);
		this.getModalWindow().setEasyModalCloseEnabled(this.easyModalClose);
		this.getModalWindow().getStyle().setMargin(24,8,8,8);
		var buttonsWrapper = new com.wiris.util.ui.component.BorderPanel(false);
		buttonsWrapper.getStyle().setMargin(16,0,0,0);
		var buttonsContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_RIGHT_TO_LEFT);
		var acceptButton = com.wiris.util.ui.component.Button.newWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.POPUP_MATHTYPE_TEXT_FIELD_ACCEPT_DIALOG),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.POPUP_MATHTYPE_TEXT_FIELD_ACCEPT_VALUE_ACTION_ID,null),this);
		acceptButton.addClass(com.wiris.util.ui.component.Button.CLASS_BUTTON_CONTAINED).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
		acceptButton.getStyle().setMargin(0,0,0,16);
		acceptButton.addActionListener(this);
		var cancelButton = com.wiris.util.ui.component.Button.newWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.POPUP_MATHTYPE_TEXT_FIELD_CANCEL_DIALOG),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.POPUP_MATHTYPE_TEXT_FIELD_CANCEL_ACTION_ID,null),this);
		cancelButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
		cancelButton.addActionListener(this);
		buttonsContainer.addComponent(acceptButton);
		buttonsContainer.addComponent(cancelButton);
		buttonsWrapper.addComponent(buttonsContainer,com.wiris.util.ui.component.BorderPanel.POSITION_SOUTH_EAST);
		this.getModalWindow().addComponent(this.editor);
		this.getModalWindow().addComponent(buttonsWrapper);
	}
	,getMainFocus: function() {
		return this.editor;
	}
	,setEasyModalClose: function(easyModalClose) {
		this.easyModalClose = easyModalClose;
	}
	,easyModalClose: null
	,editor: null
	,__class__: com.wiris.quizzes.impl.ui.component.MathTypePopupTextField
});
com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent"] = function(controller) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_FULL_SIZE_PANEL);
	this.label = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.MEASURE_UNITS_VALIDATION_LABEL));
	this.allowPrefixesCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.MEASURE_UNITS_VALIDATION_LABEL_ALLOW_PREFIXES),controller.t(com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.MEASURE_UNITS_VALIDATION_HELPER_TEXT_ALLOW_PREFIXES),com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.MEASURE_UNITS_VALIDATION_ID_ALLOW_PREFIXES,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.MEASURE_UNITS_VALIDATION_ID_ALLOW_PREFIXES,null),controller);
	this.allowPrefixesCheckBox.setId("validationOptionsAllowPrefixes");
	var allowPrefixesPanel = com.wiris.util.ui.component.FlowPanel.newWithChild(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM,this.allowPrefixesCheckBox);
	allowPrefixesPanel.setIndentationLevel(2);
	this.matchUnitsCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.MEASURE_UNITS_VALIDATION_LABEL_MATCH_UNITS),controller.t(com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.MEASURE_UNITS_VALIDATION_HELPER_TEXT_MATCH_UNITS),com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.MEASURE_UNITS_VALIDATION_ID_MATCH_UNITS,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.MEASURE_UNITS_VALIDATION_ID_MATCH_UNITS,null),controller);
	this.matchUnitsCheckBox.setId("validationOptionsMatchMeasureUnit");
	this.matchUnitsCheckBox.addActionListener(this);
	this.expansionController = new com.wiris.util.ui.controller.ExpansionController(this,allowPrefixesPanel,false);
	var content = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	content.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD);
	content.addComponent(this.matchUnitsCheckBox);
	content.addComponent(allowPrefixesPanel);
	this.addComponent(this.label);
	this.addComponent(content);
};
com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","MeasureUnitsValidationComponent"];
com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	showAllValidationAssertions: function() {
		this.setVisible(true);
	}
	,showFeaturedValidationAssertions: function(featuredAssertions) {
		var isVisible = com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.CHECK_UNIT) || com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.CHECK_UNIT_LITERAL) || com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.CHECK_EQUIVALENT_UNITS);
		this.setVisible(isVisible);
	}
	,setAllowAllPrefixes: function(selected) {
		this.allowPrefixesCheckBox.setSelected(selected);
	}
	,setMatchingUnit: function(selected) {
		this.matchUnitsCheckBox.setSelected(selected);
	}
	,actionPerformed: function(e) {
		var action = e.getAction();
		var actionId = action.getId();
		if(actionId == com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.MEASURE_UNITS_VALIDATION_ID_MATCH_UNITS) this.expansionController.toggle();
	}
	,expansionController: null
	,allowPrefixesCheckBox: null
	,matchUnitsCheckBox: null
	,label: null
	,__class__: com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent
});
com.wiris.quizzes.impl.ui.component.NumberValidationComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.NumberValidationComponent"] = function(controller) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_FULL_SIZE_PANEL);
	this.symbolicAnswer = false;
	this.controller = controller;
	this.label = com.wiris.util.ui.component.Label.newImportantWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL));
	this.symbolicAnswerCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_SYMBOLIC_ANSWER),this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_HELPER_TEXT_SYMBOLIC_ANSWER),com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_SYMBOLIC_ANSWER,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_SYMBOLIC_ANSWER,null),this);
	this.symbolicAnswerCheckBox.setId("validationOptionsSymbolic");
	this.symbolicAnswerCheckBox.addActionListener(this.controller);
	this.divider = new com.wiris.util.ui.component.Divider(false);
	this.toleranceLabel = com.wiris.util.ui.component.Label.newImportantWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_TOLERANCE));
	this.formatLabel = com.wiris.util.ui.component.Label.newImportantWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_FORMAT));
	this.precisionLabel = com.wiris.util.ui.component.Label.newImportantWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION));
	this.toleranceSelectionController = com.wiris.util.ui.controller.SelectionController.newMutuallyExclusive(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_TOLERANCE);
	this.exactAnswerRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_EXACT_ANSWER),this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_HELPER_TEXT_EXACT_ANSWER),com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_EXACT_ANSWER,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_EXACT_ANSWER,null),this.controller);
	this.exactAnswerRadioButton.setId("validationOptionsExactAnswer");
	this.toleranceSelectionController.addSelectable(this.exactAnswerRadioButton,false);
	this.errorMarginQtyTextField = com.wiris.util.ui.component.NumberTextField.newWithLabel(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PERCENT_ERROR));
	this.errorMarginQtyTextField.addClass(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.CLASS_QUIZZES_INLINE_TEXT_FIELD);
	this.errorMarginQtyTextField.setValue("0.1");
	this.errorMarginQtyTextField.setChangeAction(new com.wiris.util.ui.Action("errorMarginQty",null));
	this.errorMarginQtyTextField.addActionListener(this.controller);
	this.errorMarginTypeDropdown = new com.wiris.util.ui.component.Dropdown();
	this.errorMarginTypeDropdown.addClass(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.CLASS_QUIZZES_INLINE_DROPDOWN);
	this.errorMarginTypeDropdown.addValue("errorMarginPercentError",this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PERCENT_ERROR));
	this.errorMarginTypeDropdown.addValue("errorMarginAbsoluteError",this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_ABSOLUTE_ERROR));
	this.errorMarginTypeDropdown.pickValue("errorMarginPercentError");
	this.errorMarginTypeDropdown.setChangeValueAction(new com.wiris.util.ui.Action("errorMarginType",null));
	this.errorMarginTypeDropdown.addActionListener(this.controller);
	this.errorMarginTypeDropdown.addActionListener(this);
	this.errorMarginRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_ERROR_MARGIN),this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_HELPER_TEXT_ERROR_MARGIN),com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_ERROR_MARGIN,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_ERROR_MARGIN,null),this.controller);
	this.toleranceSelectionController.addSelectable(this.errorMarginRadioButton,true);
	this.errorMarginPanel = this.errorMarginRadioButton.getTextPanel();
	this.errorMarginPanel.setId("validationOptionsErrorMargin");
	this.errorMarginPanel.addComponent(this.errorMarginQtyTextField);
	this.errorMarginPanel.addComponent(this.errorMarginTypeDropdown);
	this.matchingDigitsQtyTextField = com.wiris.util.ui.component.NumberTextField.newWithLabel(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_SIGNIFICANT_FIGURES));
	this.matchingDigitsQtyTextField.addClass(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.CLASS_QUIZZES_INLINE_TEXT_FIELD);
	this.matchingDigitsQtyTextField.setValue("3");
	this.matchingDigitsQtyTextField.setChangeAction(new com.wiris.util.ui.Action("matchingDigitsQty",null));
	this.matchingDigitsQtyTextField.addActionListener(this.controller);
	this.matchingDigitsTypeDropdown = new com.wiris.util.ui.component.Dropdown();
	this.matchingDigitsTypeDropdown.addClass(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.CLASS_QUIZZES_INLINE_DROPDOWN);
	this.matchingDigitsTypeDropdown.addValue("matchingDigitsSignificantFigures",this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_SIGNIFICANT_FIGURES));
	this.matchingDigitsTypeDropdown.addValue("matchingDigitsDecimalPlaces",this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_DECIMAL_PLACES));
	this.matchingDigitsTypeDropdown.pickValue("matchingDigitsSignificantFigures");
	this.matchingDigitsTypeDropdown.setChangeValueAction(new com.wiris.util.ui.Action("matchingDigitsType",null));
	this.matchingDigitsTypeDropdown.addActionListener(this.controller);
	this.matchingDigitsTypeDropdown.addActionListener(this);
	this.matchingDigitsRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_MATCHING_DIGITS),this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_HELPER_TEXT_MATCHING_DIGITS),com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_MATCHING_DIGITS,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_MATCHING_DIGITS,null),this.controller);
	this.toleranceSelectionController.addSelectable(this.matchingDigitsRadioButton,false);
	this.matchingDigitsPanel = this.matchingDigitsRadioButton.getTextPanel();
	this.matchingDigitsPanel.setId("validationOptionsMatchingDigits");
	this.matchingDigitsPanel.addComponent(this.matchingDigitsQtyTextField);
	this.matchingDigitsPanel.addComponent(this.matchingDigitsTypeDropdown);
	this.formatSelectionController = com.wiris.util.ui.controller.SelectionController.newMutuallyExclusive(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_FORMAT);
	this.scientificNotationRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_SCIENTIFIC_NOTATION),this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_HELPER_TEXT_SCIENTIFIC_NOTATION),com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_SCIENTIFIC_NOTATION,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_SCIENTIFIC_NOTATION,null),this.controller);
	this.scientificNotationRadioButton.setId("validationOptionsScientificNotation");
	var formula = com.wiris.quizzes.impl.ui.component.MathLabel.newWithText("<math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mn>6</mn><mo>.</mo><mn>02</mn><mo>&#xB7;</mo><msup><mn>10</mn><mn>23</mn></msup></math>");
	formula.getStyle().setBorderSize(0,0,2,0);
	this.scientificNotationRadioButton.getHelperTextPanel().addComponent(formula);
	this.formatSelectionController.addSelectable(this.scientificNotationRadioButton,false);
	this.decimalNotationRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_DECIMAL_NOTATION),this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_HELPER_TEXT_DECIMAL_NOTATION),com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_DECIMAL_NOTATION,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_DECIMAL_NOTATION,null),this.controller);
	this.decimalNotationRadioButton.setId("validationOptionsDecimalNotation");
	this.formatSelectionController.addSelectable(this.decimalNotationRadioButton,false);
	this.anyNotationRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_ANY_NOTATION),this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_HELPER_TEXT_ANY_NOTATION),com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_ANY_NOTATION,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_ANY_NOTATION,null),this.controller);
	this.anyNotationRadioButton.setId("validationOptionsAnyNotation");
	this.formatSelectionController.addSelectable(this.anyNotationRadioButton,true);
	this.precisionMinimumTextField = com.wiris.util.ui.component.NumberTextField.newWithLabel(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_SIGNIFICANT_FIGURES));
	this.precisionMinimumTextField.addClass(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.CLASS_QUIZZES_INLINE_TEXT_FIELD);
	this.precisionMinimumTextField.setChangeAction(new com.wiris.util.ui.Action("precisionMinimum",null));
	this.precisionMinimumTextField.addActionListener(this.controller);
	var precisionLabel2 = com.wiris.util.ui.component.Label.newWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_ENABLED_2));
	this.precisionMaximumTextField = com.wiris.util.ui.component.NumberTextField.newWithLabel(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_SIGNIFICANT_FIGURES));
	this.precisionMaximumTextField.addClass(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.CLASS_QUIZZES_INLINE_TEXT_FIELD);
	this.precisionMaximumTextField.setChangeAction(new com.wiris.util.ui.Action("precisionMaximum",null));
	this.precisionMaximumTextField.addActionListener(this.controller);
	this.precisionTypeDropdown = new com.wiris.util.ui.component.Dropdown();
	this.precisionTypeDropdown.addClass(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.CLASS_QUIZZES_INLINE_DROPDOWN);
	this.precisionTypeDropdown.addValue("precisionSignificantFigures",this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_SIGNIFICANT_FIGURES));
	this.precisionTypeDropdown.addValue("precisionDecimalPlaces",this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_DECIMAL_PLACES));
	this.precisionTypeDropdown.pickValue("precisionSignificantFigures");
	this.precisionTypeDropdown.setChangeValueAction(new com.wiris.util.ui.Action("precisionType",null));
	this.precisionTypeDropdown.addActionListener(this.controller);
	this.precisionTypeDropdown.addActionListener(this);
	this.precisionEnabledCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_ENABLED),this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_HELPER_TEXT_PRECISION_ENABLED),com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_PRECISION_ENABLED,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_PRECISION_ENABLED,null),this.controller);
	this.precisionPanel = this.precisionEnabledCheckBox.getTextPanel();
	this.precisionPanel.setId("validationOptionsPrecision");
	this.precisionPanel.addComponent(this.precisionMinimumTextField);
	this.precisionPanel.addComponent(precisionLabel2);
	this.precisionPanel.addComponent(this.precisionMaximumTextField);
	this.precisionPanel.addComponent(this.precisionTypeDropdown);
	var content = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	content.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD);
	content.addComponent(this.symbolicAnswerCheckBox);
	content.addComponent(this.divider);
	content.addComponent(this.toleranceLabel);
	content.addComponent(this.exactAnswerRadioButton);
	content.addComponent(this.errorMarginRadioButton);
	content.addComponent(this.matchingDigitsRadioButton);
	content.addComponent(this.formatLabel);
	content.addComponent(this.scientificNotationRadioButton);
	content.addComponent(this.decimalNotationRadioButton);
	content.addComponent(this.anyNotationRadioButton);
	content.addComponent(this.precisionLabel);
	content.addComponent(this.precisionEnabledCheckBox);
	this.addComponent(this.label);
	this.addComponent(content);
};
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","NumberValidationComponent"];
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	showAllValidationAssertions: function() {
		this.setVisible(true);
		this.symbolicAnswerCheckBox.setVisible(true);
		if(!this.symbolicAnswer) {
			this.divider.setVisible(true);
			this.toleranceLabel.setVisible(true);
			this.exactAnswerRadioButton.setVisible(true);
			this.errorMarginPanel.setVisible(true);
			this.matchingDigitsPanel.setVisible(true);
			this.formatLabel.setVisible(true);
			this.scientificNotationRadioButton.setVisible(true);
			this.decimalNotationRadioButton.setVisible(true);
			this.anyNotationRadioButton.setVisible(true);
			this.precisionLabel.setVisible(true);
			this.precisionEnabledCheckBox.setVisible(true);
			this.precisionPanel.setVisible(true);
		}
	}
	,showFeaturedValidationAssertions: function(featuredAssertions) {
		var symbolic = com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.CHECK_SYMBOLIC);
		var decimalNotation = com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.CHECK_DECIMAL_NOTATION);
		var scientificNotation = com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.CHECK_SCIENTIFIC_NOTATION);
		var precision = com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.CHECK_PRECISION);
		this.symbolicAnswerCheckBox.setVisible(symbolic);
		if(!symbolic || !this.symbolicAnswer) {
			this.setVisible(true);
			this.divider.setVisible(symbolic);
			this.toleranceLabel.setVisible(true);
			this.exactAnswerRadioButton.setVisible(true);
			this.errorMarginPanel.setVisible(true);
			this.matchingDigitsPanel.setVisible(true);
			this.formatLabel.setVisible(decimalNotation || scientificNotation);
			this.scientificNotationRadioButton.setVisible(scientificNotation);
			this.decimalNotationRadioButton.setVisible(decimalNotation);
			this.anyNotationRadioButton.setVisible(decimalNotation || scientificNotation);
			this.precisionLabel.setVisible(precision);
			this.precisionEnabledCheckBox.setVisible(precision);
			this.precisionPanel.setVisible(precision);
		} else {
			this.setVisible(symbolic);
			this.divider.setVisible(false);
			this.toleranceLabel.setVisible(false);
			this.exactAnswerRadioButton.setVisible(false);
			this.errorMarginPanel.setVisible(false);
			this.matchingDigitsPanel.setVisible(false);
			this.formatLabel.setVisible(false);
			this.scientificNotationRadioButton.setVisible(false);
			this.decimalNotationRadioButton.setVisible(false);
			this.anyNotationRadioButton.setVisible(false);
			this.precisionLabel.setVisible(false);
			this.precisionEnabledCheckBox.setVisible(false);
			this.precisionPanel.setVisible(false);
		}
	}
	,setSymbolicAnswer: function(selected) {
		this.symbolicAnswerCheckBox.setSelected(selected);
	}
	,setPrecisionEnabled: function(enabled) {
		if(!this.symbolicAnswer) this.precisionEnabledCheckBox.setSelected(enabled);
	}
	,setPrecisionType: function(type) {
		if(!this.symbolicAnswer) {
			if(type == "significant_figures") this.precisionTypeDropdown.pickValue("precisionSignificantFigures"); else if(type == "decimal_places") this.precisionTypeDropdown.pickValue("precisionDecimalPlaces");
		}
	}
	,setPrecisionMaximum: function(maximum) {
		if(!this.symbolicAnswer) this.precisionMaximumTextField.setValue(maximum);
	}
	,setPrecisionMinimum: function(minimum) {
		if(!this.symbolicAnswer) this.precisionMinimumTextField.setValue(minimum);
	}
	,setMatchingDigitsValue: function(toleranceDigits) {
		if(!this.symbolicAnswer) this.matchingDigitsQtyTextField.setValue(toleranceDigits);
	}
	,setMatchingDigitsType: function(type) {
		if(!this.symbolicAnswer) {
			if(type == "significant_figures") this.matchingDigitsTypeDropdown.pickValue("matchingDigitsSignificantFigures"); else if(type == "decimal_places") this.matchingDigitsTypeDropdown.pickValue("matchingDigitsDecimalPlaces");
		}
	}
	,setErrorMarginValue: function(tolerance) {
		if(!this.symbolicAnswer) this.errorMarginQtyTextField.setValue(tolerance);
	}
	,setErrorMarginType: function(type) {
		if(!this.symbolicAnswer) {
			if(type == "percent_error") this.errorMarginTypeDropdown.pickValue("errorMarginPercentError"); else if(type == "absolute_error") this.errorMarginTypeDropdown.pickValue("errorMarginAbsoluteError");
		}
	}
	,setExactAnswer: function() {
		if(!this.symbolicAnswer) this.exactAnswerRadioButton.setSelected(true);
	}
	,setErrorMargin: function() {
		if(!this.symbolicAnswer) this.errorMarginRadioButton.setSelected(true);
	}
	,setMatchingDigits: function() {
		if(!this.symbolicAnswer) this.matchingDigitsRadioButton.setSelected(true);
	}
	,setAnyNotation: function() {
		if(!this.symbolicAnswer) this.anyNotationRadioButton.setSelected(true);
	}
	,setDecimalNotation: function() {
		if(!this.symbolicAnswer) this.decimalNotationRadioButton.setSelected(true);
	}
	,setScientificNotation: function() {
		if(!this.symbolicAnswer) this.scientificNotationRadioButton.setSelected(true);
	}
	,actionPerformed: function(e) {
		var source = e.getSource();
		var action = e.getAction();
		var actionId = action.getId();
		var command = action.getCommand();
		if("symbolicAnswer" == actionId) {
			if(source.isSelected()) this.symbolicAnswer = true; else this.symbolicAnswer = false;
		} else if("errorMarginType" == actionId) {
			var value = source.getValue();
			if(value == "errorMarginPercentError") this.errorMarginQtyTextField.setLabel(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PERCENT_ERROR)); else if(value == "errorMarginAbsoluteError") this.errorMarginQtyTextField.setLabel(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_ABSOLUTE_ERROR));
			this.errorMarginQtyTextField.changeState();
		} else if("matchingDigitsType" == actionId) {
			var value = source.getValue();
			if(value == "matchingDigitsSignificantFigures") this.matchingDigitsQtyTextField.setLabel(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_SIGNIFICANT_FIGURES)); else if(value == "matchingDigitsDecimalPlaces") this.matchingDigitsQtyTextField.setLabel(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_DECIMAL_PLACES));
			this.matchingDigitsQtyTextField.changeState();
		} else if("precisionType" == actionId) {
			var value = source.getValue();
			if(value == "precisionSignificantFigures") {
				this.precisionMinimumTextField.setLabel(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_SIGNIFICANT_FIGURES));
				this.precisionMaximumTextField.setLabel(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_SIGNIFICANT_FIGURES));
			} else if(value == "precisionDecimalPlaces") {
				this.precisionMinimumTextField.setLabel(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_DECIMAL_PLACES));
				this.precisionMaximumTextField.setLabel(this.controller.t(com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_DECIMAL_PLACES));
			}
			this.precisionMinimumTextField.changeState();
			this.precisionMaximumTextField.changeState();
		}
	}
	,updateVisibility: function() {
		this.setVisible(this.controller.getConfigurationKey("validationOptions/numbers"));
		this.symbolicAnswerCheckBox.setVisible(this.controller.getConfigurationKey("validationOptions/numbers/symbolicAnswer"));
		if(!this.symbolicAnswer) {
			this.divider.setVisible(this.controller.getConfigurationKey("validationOptions/numbers/symbolicAnswer"));
			this.toleranceLabel.setVisible(this.controller.getConfigurationKey("validationOptions/numbers/tolerance"));
			this.exactAnswerRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/numbers/tolerance"));
			this.errorMarginRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/numbers/tolerance"));
			this.errorMarginPanel.setVisible(this.controller.getConfigurationKey("validationOptions/numbers/tolerance"));
			this.matchingDigitsRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/numbers/tolerance"));
			this.matchingDigitsPanel.setVisible(this.controller.getConfigurationKey("validationOptions/numbers/tolerance"));
			this.formatLabel.setVisible(this.controller.getConfigurationKey("validationOptions/numbers/format"));
			this.scientificNotationRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/numbers/format"));
			this.decimalNotationRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/numbers/format"));
			this.anyNotationRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/numbers/format"));
			this.precisionLabel.setVisible(this.controller.getConfigurationKey("validationOptions/numbers/precision"));
			this.precisionEnabledCheckBox.setVisible(this.controller.getConfigurationKey("validationOptions/numbers/precision"));
			this.precisionPanel.setVisible(this.controller.getConfigurationKey("validationOptions/numbers/precision"));
		} else {
			this.divider.setVisible(false);
			this.toleranceLabel.setVisible(false);
			this.exactAnswerRadioButton.setVisible(false);
			this.errorMarginRadioButton.setVisible(false);
			this.errorMarginPanel.setVisible(false);
			this.matchingDigitsRadioButton.setVisible(false);
			this.matchingDigitsPanel.setVisible(false);
			this.formatLabel.setVisible(false);
			this.scientificNotationRadioButton.setVisible(false);
			this.decimalNotationRadioButton.setVisible(false);
			this.anyNotationRadioButton.setVisible(false);
			this.precisionLabel.setVisible(false);
			this.precisionEnabledCheckBox.setVisible(false);
			this.precisionPanel.setVisible(false);
		}
	}
	,symbolicAnswer: null
	,formatSelectionController: null
	,toleranceSelectionController: null
	,controller: null
	,precisionPanel: null
	,precisionTypeDropdown: null
	,precisionMaximumTextField: null
	,precisionMinimumTextField: null
	,precisionEnabledCheckBox: null
	,precisionLabel: null
	,anyNotationRadioButton: null
	,decimalNotationRadioButton: null
	,scientificNotationRadioButton: null
	,formatLabel: null
	,matchingDigitsPanel: null
	,matchingDigitsQtyTextField: null
	,matchingDigitsTypeDropdown: null
	,matchingDigitsRadioButton: null
	,errorMarginPanel: null
	,errorMarginQtyTextField: null
	,errorMarginTypeDropdown: null
	,errorMarginRadioButton: null
	,exactAnswerRadioButton: null
	,toleranceLabel: null
	,divider: null
	,symbolicAnswerCheckBox: null
	,label: null
	,__class__: com.wiris.quizzes.impl.ui.component.NumberValidationComponent
});
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent"] = function(controller) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.setId(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_FIELD_ID).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_FULL_SIZE_PANEL);
	this.controller = controller;
	this.label = com.wiris.util.ui.component.Label.newImportantWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_FIELD_LABEL));
	var content = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	content.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD);
	this.numberFormatLabel = com.wiris.util.ui.component.Label.newImportantWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_NUMBER_FORMAT));
	this.precisionDropdown = new com.wiris.util.ui.component.Dropdown();
	var _g = 1;
	while(_g < 16) {
		var i = _g++;
		this.precisionDropdown.addValue("" + i,"" + i);
	}
	this.precisionDropdown.pickValue("4");
	this.precisionDropdown.setTitle(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_PRECISION_TYPE_SIGNIFICANT_FIGURES));
	this.precisionDropdown.setChangeValueAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_PRECISION,null));
	this.precisionDropdown.addActionListener(this.controller);
	this.precisionDropdown.addActionListener(this);
	this.precisionTypeDropdown = new com.wiris.util.ui.component.Dropdown();
	this.precisionTypeDropdown.setTitle(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_PRECISION));
	this.precisionTypeDropdown.addValue(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_PRECISION_TYPE_SIGNIFICANT_FIGURES,this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_PRECISION_TYPE_SIGNIFICANT_FIGURES));
	this.precisionTypeDropdown.addValue(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_PRECISION_TYPE_DECIMAL_PLACES,this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_PRECISION_TYPE_DECIMAL_PLACES));
	this.precisionTypeDropdown.pickValue(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_PRECISION_TYPE_SIGNIFICANT_FIGURES);
	this.precisionTypeDropdown.setChangeValueAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_PRECISION_TYPE,null));
	this.precisionTypeDropdown.addActionListener(this.controller);
	this.precisionTypeDropdown.addActionListener(this);
	var precisionPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	precisionPanel.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_SPACED);
	precisionPanel.addComponent(this.precisionDropdown);
	precisionPanel.addComponent(this.precisionTypeDropdown);
	this.notationLabel = com.wiris.util.ui.component.Label.newWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_NOTATION));
	this.notationHelperText = com.wiris.util.ui.component.Label.newTinyWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_HELPER_TEXT));
	this.notationToggleButtonsPanel = new com.wiris.util.ui.component.ToggleButtonsPanel();
	this.notationToggleButtonsPanel.newToggleButtonWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_NOTATION_DECIMAL),com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_NOTATION_DECIMAL,false,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_NOTATION_DECIMAL,null),this.controller,true);
	this.notationToggleButtonsPanel.newToggleButtonWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_NOTATION_SCIENTIFIC),com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_NOTATION_SCIENTIFIC,false,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_NOTATION_SCIENTIFIC,null),this.controller,true);
	this.notationToggleButtonsPanel.newToggleButtonWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_NOTATION_AUTO),com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_NOTATION_AUTO,true,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_NOTATION_AUTO,null),this.controller,true);
	this.notationToggleButtonsPanel.addActionListener(this.controller);
	var notationTitlePanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	notationTitlePanel.addComponent(this.notationLabel);
	notationTitlePanel.addComponent(this.notationHelperText);
	var notationPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	notationPanel.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_SPACED);
	notationPanel.addComponent(notationTitlePanel);
	notationPanel.addComponent(this.notationToggleButtonsPanel);
	this.decimalLabel = com.wiris.util.ui.component.Label.newWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_DECIMAL));
	this.decimalHelperText = com.wiris.util.ui.component.Label.newTinyWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_HELPER_TEXT));
	this.decimalToggleButtonsPanel = new com.wiris.util.ui.component.ToggleButtonsPanel();
	this.decimalToggleButtonsPanel.newToggleButtonWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_DECIMAL_COMMA),com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_DECIMAL_COMMA,false,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_DECIMAL_COMMA,null),this.controller,false);
	this.decimalToggleButtonsPanel.newToggleButtonWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_DECIMAL_POINT),com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_DECIMAL_POINT,true,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_DECIMAL_POINT,null),this.controller,true);
	this.decimalToggleButtonsPanel.addActionListener(this.controller);
	var decimalTitlePanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	decimalTitlePanel.addComponent(this.decimalLabel);
	decimalTitlePanel.addComponent(this.decimalHelperText);
	var decimalPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	decimalPanel.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_SPACED);
	decimalPanel.addComponent(decimalTitlePanel);
	decimalPanel.addComponent(this.decimalToggleButtonsPanel);
	this.thousandsLabel = com.wiris.util.ui.component.Label.newWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_THOUSANDS));
	this.thousandsHelperText = com.wiris.util.ui.component.Label.newTinyWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_HELPER_TEXT));
	this.thousandsToggleButtonsPanel = new com.wiris.util.ui.component.ToggleButtonsPanel();
	this.thousandsToggleButtonsPanel.newToggleButtonWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_THOUSANDS_NONE),com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_THOUSANDS_NONE,true,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_THOUSANDS_NONE,null),this.controller,true);
	this.thousandsToggleButtonsPanel.newToggleButtonWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_THOUSANDS_SPACE),com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_THOUSANDS_SPACE,false,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_THOUSANDS_SPACE,null),this.controller,false);
	this.thousandsToggleButtonsPanel.newToggleButtonWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_THOUSANDS_COMMA),com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_THOUSANDS_COMMA,false,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_THOUSANDS_COMMA,null),this.controller,false);
	this.thousandsToggleButtonsPanel.newToggleButtonWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_THOUSANDS_POINT),com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_THOUSANDS_POINT,false,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_THOUSANDS_POINT,null),this.controller,false);
	this.thousandsToggleButtonsPanel.addActionListener(this.controller);
	var thousandsTitlePanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	thousandsTitlePanel.addComponent(this.thousandsLabel);
	thousandsTitlePanel.addComponent(this.thousandsHelperText);
	var thousandsPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	thousandsPanel.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_SPACED);
	thousandsPanel.addComponent(thousandsTitlePanel);
	thousandsPanel.addComponent(this.thousandsToggleButtonsPanel);
	this.expressionFormatLabel = com.wiris.util.ui.component.Label.newImportantWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_EXPRESSION_FORMAT));
	this.imaginaryUnitLabel = com.wiris.util.ui.component.Label.newWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_IMAGINARY_UNIT));
	this.imaginaryUnitHelperText = com.wiris.util.ui.component.Label.newTinyWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_HELPER_TEXT));
	this.imaginaryUnitToggleButtonsPanel = new com.wiris.util.ui.component.ToggleButtonsPanel();
	this.imaginaryUnitToggleButtonsPanel.newToggleButtonWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_IMAGINARY_UNIT_I),com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_IMAGINARY_UNIT_I,true,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_IMAGINARY_UNIT_I,null),this.controller,true);
	this.imaginaryUnitToggleButtonsPanel.newToggleButtonWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_IMAGINARY_UNIT_J),com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_IMAGINARY_UNIT_J,false,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_IMAGINARY_UNIT_J,null),this.controller,true);
	this.imaginaryUnitToggleButtonsPanel.addActionListener(this.controller);
	var imaginaryUnitTitlePanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	imaginaryUnitTitlePanel.addComponent(this.imaginaryUnitLabel);
	imaginaryUnitTitlePanel.addComponent(this.imaginaryUnitHelperText);
	var imaginaryUnitPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	imaginaryUnitPanel.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_SPACED);
	imaginaryUnitPanel.addComponent(imaginaryUnitTitlePanel);
	imaginaryUnitPanel.addComponent(this.imaginaryUnitToggleButtonsPanel);
	this.timesOperatorLabel = com.wiris.util.ui.component.Label.newWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_TIMES_OPERATOR));
	this.timesOperatorHelperText = com.wiris.util.ui.component.Label.newTinyWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_HELPER_TEXT));
	this.timesOperatorToggleButtonsPanel = new com.wiris.util.ui.component.ToggleButtonsPanel();
	this.timesOperatorToggleButtonsPanel.newToggleButtonWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_TIMES_OPERATOR_DOT),com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_TIMES_OPERATOR_DOT,true,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_TIMES_OPERATOR_DOT,null),this.controller,true);
	this.timesOperatorToggleButtonsPanel.newToggleButtonWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_TIMES_OPERATOR_CROSS),com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_TIMES_OPERATOR_CROSS,false,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_TIMES_OPERATOR_CROSS,null),this.controller,true);
	this.timesOperatorToggleButtonsPanel.newToggleButtonWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_INVISIBLE_TIMES_OPERATOR),com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_INVISIBLE_TIMES_OPERATOR,false,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_INVISIBLE_TIMES_OPERATOR,null),this.controller,true);
	this.timesOperatorToggleButtonsPanel.addActionListener(this.controller);
	var timesOperatorTitlePanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	timesOperatorTitlePanel.addComponent(this.timesOperatorLabel);
	timesOperatorTitlePanel.addComponent(this.timesOperatorHelperText);
	var timesOperatorPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	timesOperatorPanel.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_SPACED);
	timesOperatorPanel.addComponent(timesOperatorTitlePanel);
	timesOperatorPanel.addComponent(this.timesOperatorToggleButtonsPanel);
	content.addComponent(this.numberFormatLabel);
	content.addComponent(precisionPanel);
	content.addComponent(notationPanel);
	content.addComponent(decimalPanel);
	content.addComponent(thousandsPanel);
	content.addComponent(new com.wiris.util.ui.component.Divider(false));
	content.addComponent(this.expressionFormatLabel);
	content.addComponent(imaginaryUnitPanel);
	content.addComponent(timesOperatorPanel);
	this.addComponent(this.label);
	this.addComponent(content);
};
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","OutputVariableOptionsComponent"];
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	getTimesOperatorHelperText: function(questionImpl) {
		var times = questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_IMPLICIT_TIMES_OPERATOR) == "true"?"":questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_TIMES_OPERATOR);
		return this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_HELPER_TEXT) + "(a + b)² = a² + 2" + times + "a" + times + "b + b²";
	}
	,getImaginaryUnitHelperText: function(questionImpl) {
		var times = questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_IMPLICIT_TIMES_OPERATOR) == "true"?"":questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_TIMES_OPERATOR);
		var imaginary = questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_IMAGINARY_UNIT);
		return this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_HELPER_TEXT) + "(x² + 4) = (x - 2" + times + imaginary + ")" + times + "(x + 2" + times + imaginary + ")";
	}
	,getThousandsHelperText: function(questionImpl) {
		var times = questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_IMPLICIT_TIMES_OPERATOR) == "true"?"·":questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_TIMES_OPERATOR);
		var thousands = questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_DIGIT_GROUP_SEPARATOR);
		return this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_HELPER_TEXT) + "100" + times + "100 = 10" + thousands + "000";
	}
	,getDecimalHelperText: function(questionImpl) {
		var precision = questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_FLOAT_FORMAT) == "f"?Std.parseInt(questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_PRECISION)):Std.parseInt(questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_PRECISION)) - 1;
		var pi = Math.round(Math.PI * Math.pow(10,precision)) / Math.pow(10,precision);
		var decimals = ("" + pi).substring(2);
		var decimalSeparator = questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_DECIMAL_SEPARATOR);
		return this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_HELPER_TEXT) + "π = 3" + (decimals.length == 0?"":decimalSeparator + decimals);
	}
	,getNotationHelperText: function(questionImpl) {
		var decimalSeparator = questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_DECIMAL_SEPARATOR);
		var thousands = questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_DIGIT_GROUP_SEPARATOR);
		var times = questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_IMPLICIT_TIMES_OPERATOR) == "true"?"·":questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_TIMES_OPERATOR);
		if(questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_FLOAT_FORMAT) == "me") return this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_HELPER_TEXT) + "c = 2" + decimalSeparator + "98" + times + "10⁸"; else return this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_HELPER_TEXT) + "c = 298" + thousands + "000" + thousands + "000";
	}
	,setCasOutputOptions: function(questionImpl,slot) {
		if(questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_FLOAT_FORMAT) == "f") {
			this.notationToggleButtonsPanel.pickTogglebuttonWithId(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_NOTATION_DECIMAL);
			this.notationToggleButtonsPanel.getToggleButtonById(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_NOTATION_AUTO).setEnabled(false);
			this.notationToggleButtonsPanel.getToggleButtonById(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_NOTATION_SCIENTIFIC).setEnabled(false);
		} else if(questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_FLOAT_FORMAT) == "mr") this.notationToggleButtonsPanel.pickTogglebuttonWithId(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_NOTATION_DECIMAL); else if(questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_FLOAT_FORMAT) == "me") this.notationToggleButtonsPanel.pickTogglebuttonWithId(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_NOTATION_SCIENTIFIC); else {
			this.notationToggleButtonsPanel.getToggleButtonById(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_NOTATION_AUTO).setEnabled(true);
			this.notationToggleButtonsPanel.getToggleButtonById(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_NOTATION_SCIENTIFIC).setEnabled(true);
			this.notationToggleButtonsPanel.pickTogglebuttonWithId(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_NOTATION_AUTO);
		}
		var decimalSeparators = slot.getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.DECIMAL_SEPARATORS);
		var digitGroupSeparators = slot.getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.DIGIT_GROUP_SEPARATORS);
		this.decimalToggleButtonsPanel.getToggleButtonById(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_DECIMAL_POINT).setEnabled(decimalSeparators.indexOf(".") > -1);
		this.decimalToggleButtonsPanel.getToggleButtonById(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_DECIMAL_COMMA).setEnabled(decimalSeparators.indexOf("\\,") > -1);
		this.thousandsToggleButtonsPanel.getToggleButtonById(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_THOUSANDS_SPACE).setEnabled(digitGroupSeparators.indexOf(" ") > -1);
		this.thousandsToggleButtonsPanel.getToggleButtonById(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_THOUSANDS_COMMA).setEnabled(digitGroupSeparators.indexOf("\\,") > -1);
		this.thousandsToggleButtonsPanel.getToggleButtonById(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_THOUSANDS_POINT).setEnabled(digitGroupSeparators.indexOf(".") > -1);
		this.notationHelperText.setText(this.getNotationHelperText(questionImpl));
		this.decimalHelperText.setText(this.getDecimalHelperText(questionImpl));
		this.thousandsHelperText.setText(this.getThousandsHelperText(questionImpl));
		this.imaginaryUnitHelperText.setText(this.getImaginaryUnitHelperText(questionImpl));
		this.timesOperatorHelperText.setText(this.getTimesOperatorHelperText(questionImpl));
	}
	,actionPerformed: function(e) {
		var source = e.getSource();
		var action = e.getAction();
		var actionId = action.getId();
		if(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_PRECISION_TYPE == actionId) {
			var value = source.getValue();
			if(value == com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_PRECISION_TYPE_DECIMAL_PLACES) this.precisionDropdown.setTitle(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_PRECISION_TYPE_DECIMAL_PLACES)); else if(value == com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_PRECISION_TYPE_SIGNIFICANT_FIGURES) this.precisionDropdown.setTitle(this.controller.t(com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_PRECISION_TYPE_SIGNIFICANT_FIGURES));
		}
	}
	,timesOperatorToggleButtonsPanel: null
	,timesOperatorHelperText: null
	,timesOperatorLabel: null
	,imaginaryUnitToggleButtonsPanel: null
	,imaginaryUnitHelperText: null
	,imaginaryUnitLabel: null
	,thousandsToggleButtonsPanel: null
	,thousandsHelperText: null
	,thousandsLabel: null
	,decimalToggleButtonsPanel: null
	,decimalHelperText: null
	,decimalLabel: null
	,notationToggleButtonsPanel: null
	,notationHelperText: null
	,notationLabel: null
	,precisionTypeDropdown: null
	,precisionDropdown: null
	,expressionFormatLabel: null
	,numberFormatLabel: null
	,label: null
	,controller: null
	,__class__: com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent
});
com.wiris.util.ui.component.Window = $hxClasses["com.wiris.util.ui.component.Window"] = function() {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.setVisible(false);
	this.getStyle().setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_CENTER);
	this.title = null;
	this.titleBarButtons = new Array();
	this.setEasyModalCloseEnabled(false);
	this.setModal(false);
	this.setRelative(true);
	this.addClass(com.wiris.util.ui.component.Window.CLASS_WINDOW);
	this.addKeyListener(this);
};
com.wiris.util.ui.component.Window.__name__ = ["com","wiris","util","ui","component","Window"];
com.wiris.util.ui.component.Window.__interfaces__ = [com.wiris.util.ui.interaction.KeyListener];
com.wiris.util.ui.component.Window.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.util.ui.component.Window.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	keyType: function(e) {
	}
	,keyRelease: function(e) {
	}
	,keyPress: function(e) {
		if(!this.isVisible()) return;
		if(e.getKeyCode() == com.wiris.util.ui.interaction.KeyCode.ESCAPE) {
			this.easyModalClose();
			e.stopPropagation();
		}
	}
	,setResizable: function(resizable) {
		this.resizable = resizable;
		this.changeState();
	}
	,isResizable: function() {
		return this.resizable;
	}
	,setMovable: function(movable) {
		this.movable = movable;
		this.changeState();
	}
	,isMovable: function() {
		return this.movable;
	}
	,isRelative: function() {
		return this.relative;
	}
	,setRelative: function(relative) {
		this.relative = relative;
		if(relative) this.addClass(com.wiris.util.ui.component.Window.CLASS_WINDOW_RELATIVE); else this.removeClass(com.wiris.util.ui.component.Window.CLASS_WINDOW_RELATIVE);
	}
	,isEasyModalCloseEnabled: function() {
		return this.easyModalCloseEnabled;
	}
	,setEasyModalCloseEnabled: function(easyModalCloseEnabled) {
		this.easyModalCloseEnabled = easyModalCloseEnabled;
	}
	,isModal: function() {
		return this.modal;
	}
	,setModal: function(modal) {
		this.modal = modal;
		if(modal) this.addClass(com.wiris.util.ui.component.Window.CLASS_WINDOW_MODAL); else this.removeClass(com.wiris.util.ui.component.Window.CLASS_WINDOW_MODAL);
	}
	,getTitleBarButtons: function() {
		return this.titleBarButtons;
	}
	,addTitleBarButton: function(button) {
		this.titleBarButtons.push(button);
	}
	,setTitle: function(title) {
		this.title = title;
		this.changeState();
	}
	,getTitle: function() {
		return this.title;
	}
	,easyModalClose: function() {
		if(this.isEasyModalCloseEnabled()) this.close();
	}
	,close: function() {
		this.setVisible(false);
	}
	,open: function() {
		this.setVisible(true);
	}
	,resizable: null
	,movable: null
	,relative: null
	,easyModalCloseEnabled: null
	,modal: null
	,title: null
	,titleBarButtons: null
	,__class__: com.wiris.util.ui.component.Window
});
com.wiris.quizzes.impl.ui.component.PopupWindow = $hxClasses["com.wiris.quizzes.impl.ui.component.PopupWindow"] = function(parent) {
	com.wiris.util.ui.component.Window.call(this);
	this.setModal(true);
	this.setParent(parent);
	this.setRelative(false);
	this.setEasyModalCloseEnabled(false);
	this.quizzesContext = com.wiris.quizzes.impl.ui.QuizzesContext.getInstance();
	this.setConfirmDialog(this.createConfirmDialog());
};
com.wiris.quizzes.impl.ui.component.PopupWindow.__name__ = ["com","wiris","quizzes","impl","ui","component","PopupWindow"];
com.wiris.quizzes.impl.ui.component.PopupWindow.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.component.PopupWindow.newWithConfirmDialog = function(parent,dialog) {
	var window = new com.wiris.quizzes.impl.ui.component.PopupWindow(parent);
	window.setConfirmDialog(dialog);
	return window;
}
com.wiris.quizzes.impl.ui.component.PopupWindow.newWithCustomConfirmDialog = function(parent,title,message,labels,actions) {
	var dialog = new com.wiris.util.ui.component.Dialog();
	dialog.setTitle(title);
	dialog.setMessageText(message);
	var i = HxOverrides.iter(labels);
	var j = HxOverrides.iter(actions);
	var first = true;
	while(i.hasNext() && j.hasNext()) {
		dialog.addPrimaryAction(i.next(),j.next(),first);
		first = false;
	}
	return com.wiris.quizzes.impl.ui.component.PopupWindow.newWithConfirmDialog(parent,dialog);
}
com.wiris.quizzes.impl.ui.component.PopupWindow.__super__ = com.wiris.util.ui.component.Window;
com.wiris.quizzes.impl.ui.component.PopupWindow.prototype = $extend(com.wiris.util.ui.component.Window.prototype,{
	actionPerformed: function(e) {
		var action = e.getAction();
		var actionId = action.getId();
		if(actionId == com.wiris.quizzes.impl.ui.component.PopupWindow.ACCEPT_EASY_MODAL_CLOSE_ACTION_ID) {
			this.confirmDialog.close();
			this.close();
		} else if(actionId == com.wiris.quizzes.impl.ui.component.PopupWindow.CANCEL_EASY_MODAL_CLOSE_ACTION_ID) this.confirmDialog.close();
	}
	,easyModalClose: function() {
		if(this.isEasyModalCloseEnabled()) this.close(); else this.confirmDialog.open();
	}
	,setConfirmDialog: function(dialog) {
		if(this.confirmDialog != null) this.confirmDialog.removeActionListener(this);
		this.confirmDialog = dialog;
		this.addComponent(this.confirmDialog);
		this.confirmDialog.addActionListener(this);
	}
	,createConfirmDialog: function() {
		var dialog = new com.wiris.util.ui.component.Dialog();
		dialog.setTitle(this.quizzesContext.t(com.wiris.quizzes.impl.ui.component.PopupWindow.POPUP_TEXT_FIELD_WARNING_TITLE));
		dialog.setMessageText(this.quizzesContext.t(com.wiris.quizzes.impl.ui.component.PopupWindow.POPUP_TEXT_FIELD_WARNING_MESSAGE));
		dialog.addPrimaryAction(this.quizzesContext.t(com.wiris.quizzes.impl.ui.component.PopupWindow.POPUP_TEXT_FIELD_WARNING_ACCEPT_BUTTON_LABEL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.PopupWindow.ACCEPT_EASY_MODAL_CLOSE_ACTION_ID,null),true).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
		dialog.addPrimaryAction(this.quizzesContext.t(com.wiris.quizzes.impl.ui.component.PopupWindow.POPUP_TEXT_FIELD_WARNING_CANCEL_BUTTON_LABEL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.PopupWindow.CANCEL_EASY_MODAL_CLOSE_ACTION_ID,null),false).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
		return dialog;
	}
	,quizzesContext: null
	,confirmDialog: null
	,__class__: com.wiris.quizzes.impl.ui.component.PopupWindow
});
com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField = $hxClasses["com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField"] = function(slot,instance,answerField) {
	this.changeActionId = "studentAnswerChanged";
	this.updating = false;
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField.CLASS_QUIZZES_COMPOUND_FIELD);
	this.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	this.labels = new Array();
	this.textFields = new Array();
	this.answerField = answerField;
	if(slot != null) {
		this.updateFields(slot,instance);
		this.setValue(slot.getInitialContent());
	}
};
com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField.__name__ = ["com","wiris","quizzes","impl","ui","component","QuizzesCompoundTextField"];
com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField.__interfaces__ = [com.wiris.util.ui.component.Field,com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField.expandCompoundAnswerLabelVariables = function(compoundAnswers,instance) {
	if(instance == null || !instance.hasVariables()) return compoundAnswers;
	var r = new Array();
	var _g1 = 0, _g = compoundAnswers.length;
	while(_g1 < _g) {
		var i = _g1++;
		var answer = compoundAnswers[i];
		var expanded = new Array();
		expanded[0] = instance.expandVariablesMathML(answer[0]);
		expanded[1] = answer[1];
		r.push(expanded);
	}
	return r;
}
com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	setChangeActionId: function(changeActionId) {
		this.changeActionId = changeActionId;
	}
	,isEmpty: function() {
		var _g = 0, _g1 = this.textFields;
		while(_g < _g1.length) {
			var textField = _g1[_g];
			++_g;
			if(!textField.isEmpty()) return false;
		}
		return true;
	}
	,getComponent: function() {
		return this;
	}
	,getAnswerValue: function(answer) {
		if(com.wiris.quizzes.impl.MathContent.getMathType(answer) == com.wiris.quizzes.impl.MathContent.TYPE_MATHML) {
			var tools = new com.wiris.quizzes.impl.HTMLTools();
			return tools.mathMLToText(answer);
		}
		return answer;
	}
	,setValue: function(value) {
		var answers = com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField.expandCompoundAnswerLabelVariables(this.getCompoundAnswers(value),this.instance);
		if(answers.length == 0) {
			var _g = 0, _g1 = this.textFields;
			while(_g < _g1.length) {
				var tf = _g1[_g];
				++_g;
				tf.setValue("");
			}
			return;
		}
		var ok = answers.length == this.labels.length;
		var i = 0;
		while(i < answers.length && ok) {
			var answer = answers[i];
			var label = this.labels[i];
			ok = answer[0] == label.getText();
			if(ok) {
				var textField = this.textFields[i];
				textField.setValue(this.getAnswerValue(answer[1]));
			}
			i++;
		}
		if(!ok) {
			this.updateFieldsImpl(this.slot,this.instance,value);
			this.setValue(value);
		}
		this.changeState();
	}
	,getValue: function() {
		var value = new Array();
		var tools = new com.wiris.quizzes.impl.HTMLTools();
		var _g1 = 0, _g = this.compoundAnswers.length;
		while(_g1 < _g) {
			var i = _g1++;
			value.push([this.compoundAnswers[i][0],tools.textToMathMLWithSemantics(this.textFields[i].getValue())]);
		}
		return com.wiris.quizzes.impl.CompoundAnswerParser.joinCompoundAnswer(value).content;
	}
	,actionPerformed: function(e) {
		if(this.updating) return;
		var action = e.getAction();
		var actionId = action.getId();
		if(actionId == this.changeActionId) {
			this.performAction(action);
			this.changeState();
		}
	}
	,getTextFields: function() {
		return this.textFields;
	}
	,getCompoundAnswers: function(correctAnswer) {
		var mathContent = new com.wiris.quizzes.impl.MathContent();
		mathContent.set(correctAnswer);
		return com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswer(mathContent);
	}
	,newTextField: function(index) {
		var textField = new com.wiris.util.ui.component.TextField();
		textField.getStyle().setWidth(280);
		textField.setChangeAction(new com.wiris.util.ui.Action(this.changeActionId,"" + index));
		textField.addActionListener(this);
		if(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().isForceLTR()) textField.addClass(com.wiris.util.ui.component.TextField.CLASS_FORCE_LTR);
		return textField;
	}
	,updateFieldsImpl: function(slot,instance,model) {
		this.updating = true;
		this.slot = slot;
		this.instance = instance;
		if(model == null) {
			model = "";
			if(slot != null) {
				if(instance != null && instance.getSlotAnswer(slot) != null) {
					var studentAnswer = instance.getSlotAnswer(slot);
					if(this.getCompoundAnswers(studentAnswer).length > 0) model = studentAnswer;
				}
				if(model == "") {
					var correctAnswers = this.slot.getAuthorAnswers();
					if(correctAnswers.length > 0) model = correctAnswers[0].getValue();
				}
			}
		}
		this.compoundAnswers = com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField.expandCompoundAnswerLabelVariables(this.getCompoundAnswers(model),instance);
		this.removeAllComponents();
		this.labels = new Array();
		this.textFields = new Array();
		var _g1 = 0, _g = this.compoundAnswers.length;
		while(_g1 < _g) {
			var i = _g1++;
			var answer = this.compoundAnswers[i];
			var container = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
			container.addClass(com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField.CLASS_QUIZZES_COMPOUND_FIELD_ROW);
			container.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
			var answerLabel = com.wiris.quizzes.impl.ui.component.MathLabel.newWithText(answer[0]);
			var textField = this.newTextField(com.wiris.util.type.Arrays.indexOfElement(this.compoundAnswers,answer));
			this.labels.push(answerLabel);
			this.textFields.push(textField);
			container.addComponent(answerLabel);
			container.addComponent(textField);
			container.addMouseListener(this.answerField);
			this.addComponent(container);
		}
		this.updating = false;
	}
	,updateFields: function(slot,instance) {
		this.updateFieldsImpl(slot,instance,null);
	}
	,setReadOnly: function(readOnly) {
		var _g = 0, _g1 = this.textFields;
		while(_g < _g1.length) {
			var field = _g1[_g];
			++_g;
			field.setReadOnly(readOnly);
		}
	}
	,answerField: null
	,changeActionId: null
	,compoundAnswers: null
	,textFields: null
	,labels: null
	,instance: null
	,slot: null
	,updating: null
	,__class__: com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField
});
com.wiris.quizzes.impl.ui.component.QuizzesCompoundMathTypePopupTextField = $hxClasses["com.wiris.quizzes.impl.ui.component.QuizzesCompoundMathTypePopupTextField"] = function(slot,instance,answerField,mathtypeParameters) {
	this.easyModalClose = false;
	com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField.call(this,slot,instance,answerField);
	this.mathtypeParameters = mathtypeParameters;
};
com.wiris.quizzes.impl.ui.component.QuizzesCompoundMathTypePopupTextField.__name__ = ["com","wiris","quizzes","impl","ui","component","QuizzesCompoundMathTypePopupTextField"];
com.wiris.quizzes.impl.ui.component.QuizzesCompoundMathTypePopupTextField.__super__ = com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField;
com.wiris.quizzes.impl.ui.component.QuizzesCompoundMathTypePopupTextField.prototype = $extend(com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField.prototype,{
	setEasyModalClose: function(easyModalClose) {
		this.easyModalClose = easyModalClose;
		var _g = 0, _g1 = this.textFields;
		while(_g < _g1.length) {
			var field = _g1[_g];
			++_g;
			var textField = field;
			textField.setEasyModalClose(easyModalClose);
		}
	}
	,setGrammarUrl: function(grammarUrl,check) {
		var _g = 0, _g1 = this.textFields;
		while(_g < _g1.length) {
			var field = _g1[_g];
			++_g;
			var textField = field;
			textField.setGrammarUrl(grammarUrl,check);
		}
	}
	,setParameters: function(parameters) {
		var _g = 0, _g1 = this.textFields;
		while(_g < _g1.length) {
			var field = _g1[_g];
			++_g;
			var textField = field;
			textField.setParameters(parameters);
		}
	}
	,getAnswerValue: function(answer) {
		return answer;
	}
	,getValue: function() {
		var htmltools = new com.wiris.quizzes.impl.HTMLTools();
		var compoundAnswers = new Array();
		var i = HxOverrides.iter(this.compoundAnswers);
		var j = HxOverrides.iter(this.textFields);
		while(i.hasNext()) {
			var label = i.next()[0];
			var val = j.next().getValue();
			if(com.wiris.quizzes.impl.MathContent.getMathType(label) == com.wiris.quizzes.impl.MathContent.TYPE_TEXT) label = htmltools.textToMathML(label);
			if(com.wiris.quizzes.impl.MathContent.getMathType(val) == com.wiris.quizzes.impl.MathContent.TYPE_TEXT) val = htmltools.textToMathMLWithSemantics(val);
			compoundAnswers.push([label,val]);
		}
		return com.wiris.quizzes.impl.CompoundAnswerParser.joinCompoundAnswer(compoundAnswers).content;
	}
	,newTextField: function(index) {
		var textField = new com.wiris.quizzes.impl.ui.component.MathTypePopupTextField(this.mathtypeParameters);
		textField.setChangeAction(new com.wiris.util.ui.Action(this.changeActionId,"" + index));
		textField.addActionListener(this);
		textField.setEasyModalClose(this.easyModalClose);
		return textField;
	}
	,mathtypeParameters: null
	,easyModalClose: null
	,__class__: com.wiris.quizzes.impl.ui.component.QuizzesCompoundMathTypePopupTextField
});
com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent"] = function(controller,activityId) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.CLASS_OPTIONS_FILTER);
	this.label = com.wiris.util.ui.component.Label.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.OPTIONS_FILTER_LABEL));
	var radioGroup = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.selectionController = com.wiris.util.ui.controller.SelectionController.newMutuallyExclusive(com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.OPTIONS_FILTER_ID);
	var relevantOptionsChip = com.wiris.util.ui.component.ChoiceChip.newChoiceChip(controller.t(com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.OPTIONS_FILTER_LABEL_RELEVANT_OPTIONS),com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.OPTIONS_FILTER_ID_RELEVANT_OPTIONS,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.OPTIONS_FILTER_ID_RELEVANT_OPTIONS,null),controller);
	relevantOptionsChip.setId(activityId + "RelevantOptionsChip");
	this.selectionController.addSelectable(relevantOptionsChip,true);
	var allOptionsChip = com.wiris.util.ui.component.ChoiceChip.newChoiceChip(controller.t(com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.OPTIONS_FILTER_LABEL_ALL_OPTIONS),com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.OPTIONS_FILTER_ID_ALL_OPTIONS,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.OPTIONS_FILTER_ID_ALL_OPTIONS,null),controller);
	allOptionsChip.setId(activityId + "AllOptionsChip");
	this.selectionController.addSelectable(allOptionsChip,false);
	radioGroup.addComponent(relevantOptionsChip);
	radioGroup.addComponent(allOptionsChip);
	this.addComponent(this.label);
	this.addComponent(radioGroup);
};
com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","QuizzesOptionsFilterComponent"];
com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	isOptionsFiltered: function() {
		return this.selectionController.isSelected(com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.OPTIONS_FILTER_ID_RELEVANT_OPTIONS);
	}
	,setOptionsFilter: function(enabled) {
		if(enabled) this.selectionController.setSelected(com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.OPTIONS_FILTER_ID_RELEVANT_OPTIONS,true); else this.selectionController.setSelected(com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.OPTIONS_FILTER_ID_ALL_OPTIONS,true);
	}
	,selectionController: null
	,label: null
	,__class__: com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent
});
com.wiris.util.ui.component.BorderPanel = $hxClasses["com.wiris.util.ui.component.BorderPanel"] = function(overlap) {
	com.wiris.util.ui.component.Panel.call(this);
	this.addClass(com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL);
	this.overlap = overlap;
	if(overlap) this.addClass(com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_OVERLAP);
	this.positions = new Array();
};
com.wiris.util.ui.component.BorderPanel.__name__ = ["com","wiris","util","ui","component","BorderPanel"];
com.wiris.util.ui.component.BorderPanel.__super__ = com.wiris.util.ui.component.Panel;
com.wiris.util.ui.component.BorderPanel.prototype = $extend(com.wiris.util.ui.component.Panel.prototype,{
	removeComponent: function(index) {
		this.positions.splice(index,1);
		com.wiris.util.ui.component.Panel.prototype.removeComponent.call(this,index);
	}
	,moveComponent: function(index,destination) {
		if(index != destination) {
			var position = this.positions.splice(index,1)[0];
			var newDestination = index < destination?destination - 1:destination;
			this.positions.splice(newDestination,0,position);
		}
		com.wiris.util.ui.component.Panel.prototype.moveComponent.call(this,index,destination);
	}
	,getPositions: function() {
		return this.positions;
	}
	,isOverlapping: function() {
		return this.overlap;
	}
	,insertComponentAt: function(component,index,position) {
		component.addClass(com.wiris.util.ui.component.BorderPanel.positionClasses[position]);
		this.positions.splice(index,0,position);
		this.insertComponentAtImpl(component,index);
	}
	,addStaticComponent: function(component,position) {
		component.addClass(com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_STATIC);
		this.addComponent(component,position);
	}
	,addComponent: function(component,position) {
		component.addClass(com.wiris.util.ui.component.BorderPanel.positionClasses[position]);
		this.positions.push(position);
		this.addComponentImpl(component);
	}
	,overlap: null
	,positions: null
	,__class__: com.wiris.util.ui.component.BorderPanel
});
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent"] = function() {
	this.ready = false;
	com.wiris.util.ui.component.BorderPanel.call(this,false);
	this.setId(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.ID_QUIZZES_STUDIO).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_STUDIO);
	this.getStyle().setWidth(com.wiris.util.ui.Style.SIZE_FULL).setMinHeight(com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.WINDOW_HEIGHT_DEFAULT);
	this.studioController = new com.wiris.quizzes.impl.ui.controller.QuizzesStudioController(this);
	this.activityContainer = new com.wiris.util.ui.component.ActivityContainer();
	this.home = new com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity(this.studioController);
	this.activityContainer.registerActivity(this.home,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_HOME_ID);
	this.inputOptions = new com.wiris.quizzes.impl.ui.component.InputOptionsActivity(this.studioController);
	this.activityContainer.registerActivity(this.inputOptions,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_INPUT_OPTIONS_ID);
	this.validationOptions = new com.wiris.quizzes.impl.ui.component.ValidationOptionsActivity(this.studioController);
	this.activityContainer.registerActivity(this.validationOptions,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VALIDATION_OPTIONS_ID);
	this.variableOptions = new com.wiris.quizzes.impl.ui.component.VariableOptionsActivity(this.studioController);
	this.activityContainer.registerActivity(this.variableOptions,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VARIABLES_FUNCTIONS_ID);
	this.auxiliaryInitialContent = new com.wiris.quizzes.impl.ui.component.AuxiliaryInitialContentActivity(this.studioController);
	this.activityContainer.registerActivity(this.auxiliaryInitialContent,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_AUXILIARY_INITIAL_CONTENT_ID);
	this.testQuestion = new com.wiris.quizzes.impl.ui.component.TestQuestionActivity(this.studioController);
	this.activityContainer.registerActivity(this.testQuestion,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_TEST_QUESTION_ID);
	this.graphInputOptions = new com.wiris.quizzes.impl.ui.component.GraphInputOptionsActivity(this.studioController);
	this.activityContainer.registerActivity(this.graphInputOptions,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_GRAPH_INPUT_OPTIONS_ID);
	this.graphValidationOptions = new com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity(this.studioController);
	this.activityContainer.registerActivity(this.graphValidationOptions,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_GRAPH_VALIDATION_OPTIONS_ID);
	this.viewSource = new com.wiris.quizzes.impl.ui.component.ViewSourceActivity(this.studioController);
	this.activityContainer.registerActivity(this.viewSource,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VIEW_SOURCE_ID);
	var context = com.wiris.quizzes.impl.ui.QuizzesContext.getInstance();
	this.quizzesStudioToolbar = new com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent(context.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_HOME_TOOLBAR_TITLE),context.buildUrl(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_HOME_HELP_URL),this.studioController);
	this.quizzesStudioToolbar.updateToolbarVisibility(context.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_HOME_TOOLBAR_TITLE),false,context.buildUrl(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_HOME_HELP_URL),true);
	this.addComponent(this.quizzesStudioToolbar,com.wiris.util.ui.component.BorderPanel.POSITION_NORTH);
	this.addComponent(this.activityContainer,com.wiris.util.ui.component.BorderPanel.POSITION_CENTER);
	this.openFileDialog = new com.wiris.util.ui.component.OpenFileDialog(".xml");
	this.openFileDialog.setId("importQuestionDialog");
	this.addComponentImpl(this.openFileDialog);
	this.openFileDialog.addChangeListener(this.studioController);
	this.confirmImportDialog = com.wiris.util.ui.component.Dialog.newConfirmDialog(context.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_IMPORT_DIALOG_TITLE),context.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_IMPORT_DIALOG_LABEL),context.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_IMPORT_DIALOG_CONFIRM_BUTTON_LABEL),context.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_IMPORT_DIALOG_CANCEL_BUTTON_LABEL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_IMPORT_DIALOG_CONFIRM_BUTTON_ID,null),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_IMPORT_DIALOG_CANCEL_BUTTON_ID,null));
	this.addComponentImpl(this.confirmImportDialog);
	this.confirmImportDialog.addActionListener(this.studioController);
	this.confirmOptionsDialog = com.wiris.util.ui.component.Dialog.newConfirmDialog(context.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_RELEVANT_OPTIONS_DIALOG_TITLE),context.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_RELEVANT_OPTIONS_DIALOG_LABEL),context.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_RELEVANT_OPTIONS_DIALOG_CONFIRM_BUTTON_LABEL),context.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_RELEVANT_OPTIONS_DIALOG_CANCEL_BUTTON_LABEL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_RELEVANT_OPTIONS_DIALOG_CONFIRM_BUTTON_ID,null),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_RELEVANT_OPTIONS_DIALOG_CANCEL_BUTTON_ID,null));
	this.confirmOptionsDialog.setEasyModalCloseEnabled(false);
	this.addComponentImpl(this.confirmOptionsDialog);
	this.confirmOptionsDialog.addActionListener(this.studioController);
	this.activityContainer.showActivity(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_HOME_ID);
	this.addKeyListener(this);
	this.ready = true;
};
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","QuizzesStudioComponent"];
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.__interfaces__ = [com.wiris.quizzes.impl.ui.component.AuthoringFieldComponent,com.wiris.util.ui.interaction.KeyListener];
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.__super__ = com.wiris.util.ui.component.BorderPanel;
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.prototype = $extend(com.wiris.util.ui.component.BorderPanel.prototype,{
	getMainGraphComponent: function() {
		return this.home.getMainGraphComponent();
	}
	,innerContentChanged: function() {
		this.saveQuestion();
	}
	,getComponent: function() {
		return this;
	}
	,isReady: function() {
		return this.ready;
	}
	,getContext: function() {
		return this.studioController.getContext();
	}
	,setContext: function(context) {
		this.studioController.setContext(context);
		this.resetActivity();
		this.updateHome(context);
	}
	,keyType: function(e) {
	}
	,keyRelease: function(e) {
	}
	,keyPress: function(e) {
		var keyCode = e.getKeyCode();
		if(com.wiris.util.ui.interaction.KeyCode.Y == keyCode) {
			if(e.isCtrlLikeModifierPressed() && e.isShiftPressed()) {
				if(this.activityContainer.getCurrentActivity() != this.viewSource) this.performAction(new com.wiris.util.ui.Action("showActivity",com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VIEW_SOURCE_ID));
			}
		}
	}
	,getMainFocus: function() {
		return this.home.getMainFocus();
	}
	,cancelShowRelevantOptions: function() {
		this.confirmOptionsDialog.close();
		this.getContext().setShowAllOptions(true);
		this.updateCurrentActivity(this.getContext());
	}
	,unfocusGraphElement: function(element) {
		this.graphValidationOptions.unfocusGraphElement(element);
	}
	,focusGraphElement: function(element) {
		this.graphValidationOptions.focusGraphElement(element);
	}
	,updateGraphicalMaxTolerance: function(graphWidth) {
		this.graphValidationOptions.updateGraphicalMaxTolerance(graphWidth);
	}
	,updateGraphElementTolerances: function(context) {
		this.graphValidationOptions.updateGraphElementTolerances(context);
	}
	,closeStudio: function() {
		this.performAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.AUTHORING_FIELD_CLOSE_STUDIO_ACTION_ID,null));
	}
	,algorithmEditorActionWithParams: function(name,parameters) {
		this.variableOptions.setAlgorithm(this.getContext().getQuestion().getAlgorithm());
		this.variableOptions.algorithmEditorActionWithParams(name,parameters);
	}
	,convertAlgorithm: function(algorithm) {
		this.variableOptions.convertAlgorithm(algorithm);
	}
	,resetPreviewAnswerFeedback: function(instance,slot,authorAnswer) {
		this.testQuestion.resetPreviewAnswerFeedback(instance,slot,authorAnswer);
	}
	,setPreviewAnswerFeedback: function(questionInstance,question,slot,authorAnswer) {
		this.testQuestion.setPreviewAnswerFeedback(questionInstance,slot,authorAnswer);
	}
	,setLoadingCorrectAnswer: function(loading) {
		this.testQuestion.setLoadingCorrectAnswer(loading);
	}
	,setPreviewCorrectAnswer: function(correctAnswer,hasAlgorithm) {
		this.testQuestion.setPreviewCorrectAnswer(correctAnswer,hasAlgorithm);
	}
	,showConfirmRelevantOptionsDialog: function() {
		this.confirmOptionsDialog.open();
	}
	,showConfirmImportDialog: function() {
		this.confirmImportDialog.open();
	}
	,showAllValidationAssertions: function() {
		this.confirmOptionsDialog.close();
		this.validationOptions.showAllValidationAssertions();
	}
	,showFeaturedValidationAssertions: function(context) {
		if(context.getFeaturedAssertions() != null) {
			this.confirmOptionsDialog.close();
			this.validationOptions.showFeaturedValidationAssertions(context);
		}
	}
	,showAllSyntaxAssertions: function() {
		this.confirmOptionsDialog.close();
		this.inputOptions.showAllSyntaxAssertions();
	}
	,showFeaturedSyntaxAssertions: function(context) {
		if(context.getFeaturedParams() != null) {
			this.confirmOptionsDialog.close();
			this.inputOptions.showFeaturedSyntaxAssertions(context.getFeaturedParams());
		}
	}
	,showAllUnitPrefixes: function() {
		this.inputOptions.showAllUnitPrefixes();
	}
	,showAllUnits: function() {
		this.inputOptions.showAllUnits();
	}
	,showAllFunctions: function() {
		this.inputOptions.showAllFunctions();
	}
	,showAllConstants: function() {
		this.inputOptions.showAllConstants();
	}
	,getCompoundAnswerString: function(parts) {
		parts[0] = parts[0].substring(0,parts[0].indexOf("</math>"));
		parts[1] = parts[1].substring(49);
		return parts[0] + parts[1];
	}
	,getCompoundAnswers: function(authorAnswer) {
		var compoundAnswers = new Array();
		var correctAnswer = new com.wiris.quizzes.impl.MathContent();
		correctAnswer.set(authorAnswer.getValue());
		var answers = com.wiris.quizzes.impl.CompoundAnswerParser.parseCompoundAnswer(correctAnswer);
		var i = HxOverrides.iter(answers);
		while(i.hasNext()) compoundAnswers.push(this.getCompoundAnswerString(i.next()));
		return compoundAnswers;
	}
	,requestImportFile: function() {
		this.openFileDialog.setVisible(true);
	}
	,copyCorrectAnswer: function(correctAnswer) {
		this.testQuestion.copyCorrectAnswer(correctAnswer);
	}
	,saveQuestion: function() {
		this.getContext().importToInputQuestion();
		this.performAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.AuthoringFieldImpl.AUTHORING_FIELD_CONTENT_CHANGED,null));
	}
	,updateQuestionSource: function(context) {
		this.updateLayout(context,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VIEW_SOURCE_TOOLBAR_TITLE,null,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VIEW_SOURCE_ID);
		this.viewSource.updateQuestionSource(context.getQuestionImpl(),context.getSlot(),context.getReservedWords());
	}
	,updateTestQuestion: function(context) {
		this.updateLayout(context,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_TEST_QUESTION_TOOLBAR_TITLE,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_TEST_QUESTION_HELP_URL,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_TEST_QUESTION_ID);
		this.testQuestion.updateVisibility(context);
	}
	,updateAuxiliaryInitialContent: function(context) {
		this.updateLayout(context,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_AUXILIARY_INITIAL_CONTENT_TOOLBAR_TITLE,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_AUXILIARY_INITIAL_CONTENT_HELP_URL,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_AUXILIARY_INITIAL_CONTENT_ID);
		this.auxiliaryInitialContent.setAlgorithm(context.getSlot().getProperty(com.wiris.quizzes.api.PropertyName.CAS_SESSION));
	}
	,updateVariablesFunctions: function(context) {
		var questionImpl = context.getQuestionImpl();
		this.updateLayout(context,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VARIABLES_FUNCTIONS_TOOLBAR_TITLE,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VARIABLES_FUNCTIONS_HELP_URL,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VARIABLES_FUNCTIONS_ID);
		this.variableOptions.setAlgorithm(questionImpl.getAlgorithm());
		if(this.variableOptions.isUseCas()) this.variableOptions.setCasOutputOptions(questionImpl,context.getSlot());
	}
	,updateGraphValidationOptions: function(context) {
		this.graphValidationOptions.updateContent(context);
		this.updateLayout(context,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_GRAPH_VALIDATION_OPTIONS_TITLE,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_GRAPH_VALIDATION_OPTIONS_HELP_URL,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_GRAPH_VALIDATION_OPTIONS_ID);
	}
	,updateGraphInputOptions: function(context) {
		this.graphInputOptions.updateVisibility(context);
		this.updateLayout(context,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_GRAPH_INPUT_OPTIONS_TOOLBAR_TITLE,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_GRAPH_INPUT_OPTIONS_HELP_URL,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_INPUT_OPTIONS_ID);
	}
	,updateValidationOptions: function(context) {
		var questionImpl = context.getQuestionImpl();
		var slot = context.getSlot();
		var authorAnswer = context.getAuthorAnswer();
		var notation = "";
		var tolerance = questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE);
		var toleranceDigits = questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE_DIGITS);
		var relativeTolerance = questionImpl.getOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_RELATIVE_TOLERANCE) == "true";
		var symbolic = false;
		var simplified = false;
		var expanded = false;
		var factorized = false;
		var commonFactor = false;
		var commonDenominator = false;
		var rationalized = false;
		var minimalRadicands = false;
		var matchingUnit = false;
		var allowAllPrefixes = false;
		var hasPrecision = false;
		var repetitionMatters = true;
		var orderMatters = true;
		var functionArgumentMode = com.wiris.quizzes.impl.Assertion.PARAM_VALUE_FUNCTION_ARGUMENT_EVALUATED;
		var matchCase = false;
		var matchSpaces = false;
		var functionName = "";
		var syntax = slot.getSyntax();
		var syntaxAssertion = syntax.getName();
		var comparison = authorAnswer.getComparison();
		var equivalenceAssertion = comparison.getName();
		var validations = authorAnswer.getValidations();
		var precisionMin = "";
		var precisionMax = "";
		var precisionType = "";
		if(equivalenceAssertion != com.wiris.quizzes.api.assertion.ComparisonName.ANY_ANSWER) {
			if(equivalenceAssertion == com.wiris.quizzes.api.assertion.ComparisonName.LITERALLY_EQUAL) {
				orderMatters = !(comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.ORDER_MATTERS) == "false");
				repetitionMatters = !(comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.REPETITION_MATTERS) == "false");
				matchCase = comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_CASES) == "true";
				matchSpaces = comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_SPACES) == "true";
			} else if(equivalenceAssertion == com.wiris.quizzes.api.assertion.ComparisonName.MATHEMATICALLY_EQUAL) {
				orderMatters = !(comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.ORDER_MATTERS) == "false");
				repetitionMatters = !(comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.REPETITION_MATTERS) == "false");
			} else if(equivalenceAssertion == com.wiris.quizzes.api.assertion.ComparisonName.EQUIVALENT_EQUATIONS) {
			} else if(equivalenceAssertion == com.wiris.quizzes.api.assertion.ComparisonName.GRADING_FUNCTION) {
				functionName = comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.FUNCTION_NAME);
				functionArgumentMode = comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.FUNCTION_ARGUMENT_MODE);
			}
			if(!(comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE) == "")) tolerance = comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE);
			if(!(comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE_DIGITS) == "")) toleranceDigits = comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE_DIGITS);
			if(!(comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.RELATIVE_TOLERANCE) == "")) relativeTolerance = comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.RELATIVE_TOLERANCE) == "true";
		}
		var _g = 0;
		while(_g < validations.length) {
			var v = validations[_g];
			++_g;
			if(v.getName() == com.wiris.quizzes.api.assertion.ValidationName.CHECK_SYMBOLIC) symbolic = true; else if(v.getName() == com.wiris.quizzes.api.assertion.ValidationName.CHECK_SCIENTIFIC_NOTATION) notation = com.wiris.quizzes.impl.Assertion.CHECK_SCIENTIFIC_NOTATION; else if(v.getName() == com.wiris.quizzes.api.assertion.ValidationName.CHECK_DECIMAL_NOTATION) notation = com.wiris.quizzes.impl.Assertion.CHECK_DECIMAL_NOTATION; else if(v.getName() == com.wiris.quizzes.api.assertion.ValidationName.CHECK_SIMPLIFIED) simplified = true; else if(v.getName() == com.wiris.quizzes.api.assertion.ValidationName.CHECK_EXPANDED) expanded = true; else if(v.getName() == com.wiris.quizzes.api.assertion.ValidationName.CHECK_FACTORIZED) factorized = true; else if(v.getName() == com.wiris.quizzes.api.assertion.ValidationName.CHECK_NO_COMMON_FACTOR) commonFactor = true; else if(v.getName() == com.wiris.quizzes.api.assertion.ValidationName.CHECK_COMMON_DENOMINATOR) commonDenominator = true; else if(v.getName() == com.wiris.quizzes.api.assertion.ValidationName.CHECK_RATIONALIZED) rationalized = true; else if(v.getName() == com.wiris.quizzes.api.assertion.ValidationName.CHECK_MINIMAL_RADICANDS) minimalRadicands = true; else if(v.getName() == com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION) {
				hasPrecision = true;
				precisionMin = v.getParameter(com.wiris.quizzes.api.assertion.ValidationParameterName.MIN);
				precisionMax = v.getParameter(com.wiris.quizzes.api.assertion.ValidationParameterName.MAX);
				precisionType = v.getParameter(com.wiris.quizzes.api.assertion.ValidationParameterName.RELATIVE) == "true"?"significant_digits":"decimal_places";
			} else if(v.getName() == com.wiris.quizzes.api.assertion.ValidationName.CHECK_EQUIVALENT_UNITS) {
				matchingUnit = true;
				allowAllPrefixes = v.getParameter(com.wiris.quizzes.api.assertion.ValidationParameterName.ALLOW_PREFIXES) == "true";
			}
		}
		if(equivalenceAssertion == com.wiris.quizzes.api.assertion.ComparisonName.LITERALLY_EQUAL) {
			this.validationOptions.setLiterallyEqual();
			if(orderMatters && repetitionMatters) this.validationOptions.setOrderAndRepetitionMatters(); else if(repetitionMatters) this.validationOptions.setRepetitionMatters(); else this.validationOptions.setUnrestrictedLists();
			this.validationOptions.setMatchCase(matchCase);
			this.validationOptions.setMatchSpaces(matchSpaces);
		} else if(equivalenceAssertion == com.wiris.quizzes.api.assertion.ComparisonName.MATHEMATICALLY_EQUAL) {
			this.validationOptions.setMathematicallyEqual();
			if(orderMatters && repetitionMatters) this.validationOptions.setOrderAndRepetitionMatters(); else if(repetitionMatters) this.validationOptions.setRepetitionMatters(); else this.validationOptions.setUnrestrictedLists();
		} else if(equivalenceAssertion == com.wiris.quizzes.api.assertion.ComparisonName.EQUIVALENT_EQUATIONS) this.validationOptions.setEquivalentEquations(); else if(equivalenceAssertion == com.wiris.quizzes.api.assertion.ComparisonName.ANY_ANSWER) this.validationOptions.setAnyAnswer(); else if(equivalenceAssertion == com.wiris.quizzes.api.assertion.ComparisonName.GRADING_FUNCTION) {
			this.validationOptions.setCustomGradingFunction();
			this.validationOptions.setArgumentsUnevaluated(functionArgumentMode);
		}
		this.validationOptions.setGradingFunctions(this.variableOptions.getFunctionNames(),functionName);
		if(syntaxAssertion == com.wiris.quizzes.api.assertion.SyntaxName.MATH) {
			this.validationOptions.setSimplified(simplified);
			this.validationOptions.setExpanded(expanded);
			this.validationOptions.setFactorized(factorized);
			this.validationOptions.setCommonFactor(commonFactor);
			this.validationOptions.setCommonDenominator(commonDenominator);
			this.validationOptions.setRationalized(rationalized);
			this.validationOptions.setMinimalRadicands(minimalRadicands);
			this.validationOptions.setMatchingUnit(matchingUnit);
			this.validationOptions.setAllowAllPrefixes(allowAllPrefixes);
			if(!symbolic) {
				this.validationOptions.setSymbolicAnswer(false);
				if(notation == com.wiris.quizzes.impl.Assertion.CHECK_SCIENTIFIC_NOTATION) this.validationOptions.setScientificNotation(); else if(notation == com.wiris.quizzes.impl.Assertion.CHECK_DECIMAL_NOTATION) this.validationOptions.setDecimalNotation(); else this.validationOptions.setAnyNotation();
				this.validationOptions.setPrecisionEnabled(hasPrecision);
				if(hasPrecision) {
					this.validationOptions.setPrecisionMinimum(precisionMin);
					this.validationOptions.setPrecisionMaximum(precisionMax);
					this.validationOptions.setPrecisionType(precisionType);
				}
				if(!(toleranceDigits == "false")) {
					this.validationOptions.setMatchingDigits();
					this.validationOptions.setMatchingDigitsType(relativeTolerance?"significant_figures":"decimal_places");
					this.validationOptions.setMatchingDigitsValue(toleranceDigits);
				} else if(!(tolerance == "false")) {
					if(!(tolerance == "0")) {
						this.validationOptions.setErrorMargin();
						this.validationOptions.setErrorMarginType(relativeTolerance?"percent_error":"absolute_error");
						this.validationOptions.setErrorMarginValue(relativeTolerance?"" + Std.parseFloat(tolerance) * 100.0:tolerance);
					} else this.validationOptions.setExactAnswer();
				}
			} else this.validationOptions.setSymbolicAnswer(true);
		}
		this.updateLayout(context,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VALIDATION_OPTIONS_TOOLBAR_TITLE,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VALIDATION_OPTIONS_HELP_URL,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VALIDATION_OPTIONS_ID);
		this.validationOptions.updateVisibility(context);
	}
	,updateInputOptions: function(context) {
		var slot = context.getSlot();
		var authorAnswer = context.getAuthorAnswer();
		var compoundAnswer = slot.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER) == "true";
		this.inputOptions.setCompoundAnswer(compoundAnswer);
		this.inputOptions.setAllAnswersCorrect(compoundAnswer && slot.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE) == "and");
		this.inputOptions.setCompoundAnswers(this.getCompoundAnswers(authorAnswer),slot.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE_DISTRIBUTION));
		var syntax = slot.getSyntax();
		if(syntax.getName() == com.wiris.quizzes.api.assertion.SyntaxName.MATH) {
			this.inputOptions.setConstants(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.CONSTANTS),","),this.variableOptions.getVariableNames());
			this.inputOptions.setFunctions(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.FUNCTIONS),","),this.variableOptions.getFunctionNames());
			this.inputOptions.setUnits(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.UNITS),","));
			this.inputOptions.setUnitPrefixes(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.UNIT_PREFIXES),","));
			this.inputOptions.setMixedFractions(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.MIXED_FRACTIONS) == "true");
			this.inputOptions.setLists(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.LIST_OPERATORS) == "{");
			this.inputOptions.setNoBracketsLists(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.NO_BRACKETS_LIST) == "true");
			this.inputOptions.setIntervals(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.INTERVALS) == "true");
			this.inputOptions.setRatios(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.RATIO) == "true");
			this.inputOptions.setScientificNotation(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.SCIENTIFIC_NOTATION) == "true");
			var decimalPlacesSeparators = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.DECIMAL_SEPARATORS),",");
			var digitGroupsSeparators = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.DIGIT_GROUP_SEPARATORS),",");
			var listItemsSeparators = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.ITEM_SEPARATORS),",");
			var pointSeparator = "nothing";
			var commaSeparator = "nothing";
			var spaceSeparator = "nothing";
			if(com.wiris.system.ArrayEx.contains(decimalPlacesSeparators,".")) pointSeparator = "decimalPlaces";
			if(com.wiris.system.ArrayEx.contains(decimalPlacesSeparators,"\\,")) commaSeparator = "decimalPlaces";
			if(com.wiris.system.ArrayEx.contains(digitGroupsSeparators,".")) pointSeparator = "digitGroups";
			if(com.wiris.system.ArrayEx.contains(digitGroupsSeparators,"\\,")) commaSeparator = "digitGroups";
			if(com.wiris.system.ArrayEx.contains(digitGroupsSeparators,"\\s")) spaceSeparator = "digitGroups";
			if(com.wiris.system.ArrayEx.contains(listItemsSeparators,"\\,")) commaSeparator = "listItems";
			if(com.wiris.system.ArrayEx.contains(listItemsSeparators,"\\s")) spaceSeparator = "listItems";
			this.inputOptions.setPointSeparator(pointSeparator);
			this.inputOptions.setCommaSeparator(commaSeparator);
			this.inputOptions.setSpaceSeparator(spaceSeparator);
		} else {
			this.inputOptions.setConstants(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(com.wiris.quizzes.impl.Assertion.getParameterDefaultValue(com.wiris.quizzes.impl.Assertion.SYNTAX_MATH,"constants"),","),this.variableOptions.getVariableNames());
			this.inputOptions.setFunctions(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(com.wiris.quizzes.impl.Assertion.getParameterDefaultValue(com.wiris.quizzes.impl.Assertion.SYNTAX_MATH,"functions"),","),this.variableOptions.getFunctionNames());
			this.inputOptions.setUnits(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(com.wiris.quizzes.impl.Assertion.getParameterDefaultValue(com.wiris.quizzes.impl.Assertion.SYNTAX_MATH,"units"),","));
			this.inputOptions.setUnitPrefixes(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(com.wiris.quizzes.impl.Assertion.getParameterDefaultValue(com.wiris.quizzes.impl.Assertion.SYNTAX_MATH,"unitprefixes"),","));
		}
		this.updateLayout(context,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_INPUT_OPTIONS_TOOLBAR_TITLE,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_INPUT_OPTIONS_HELP_URL,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_INPUT_OPTIONS_ID);
		this.inputOptions.updateVisibility(context);
	}
	,updateHome: function(context) {
		this.updateLayout(context,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_HOME_TOOLBAR_TITLE,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_HOME_HELP_URL,com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_HOME_ID);
		this.home.updateVisibility(context);
	}
	,updateLayout: function(context,toolbarTitle,toolbarHelpUrl,activityId) {
		var hasBackButton = !(activityId == com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_HOME_ID);
		var tToolbarTitle = toolbarTitle != null?context.t(toolbarTitle):null;
		var tHelpUrl = toolbarHelpUrl != null?context.getGlobalContext().buildUrl(toolbarHelpUrl):null;
		this.quizzesStudioToolbar.updateToolbarVisibility(tToolbarTitle,hasBackButton,tHelpUrl,!context.isInlineQuizzesStudio());
		if(context.isInlineQuizzesStudio()) this.activityContainer.getStyle().setCSSVariable("grid-area","2 / 1 / 4 / 4"); else this.activityContainer.getStyle().removeCSSVariable("grid-area");
	}
	,resetActivity: function() {
		while(this.activityContainer.getHistory().length > 0) this.activityContainer.returnToPreviousActivity();
	}
	,getPreviousActivityId: function() {
		var historyLength = this.activityContainer.getHistory().length;
		if(historyLength > 0) {
			var lastActivity = this.activityContainer.getHistory()[historyLength - 1];
			var registeredActivities = this.activityContainer.getRegisteredActivities();
			var i = registeredActivities.keys();
			while(i.hasNext()) {
				var activityId = i.next();
				if(registeredActivities.get(activityId) == lastActivity) return activityId;
			}
		}
		return null;
	}
	,getCurrentActivityId: function() {
		var currentActivity = this.activityContainer.getCurrentActivity();
		var registeredActivities = this.activityContainer.getRegisteredActivities();
		var i = registeredActivities.keys();
		while(i.hasNext()) {
			var activityId = i.next();
			if(registeredActivities.get(activityId) == currentActivity) return activityId;
		}
		return null;
	}
	,updateCurrentActivity: function(context) {
		var activityId = this.getCurrentActivityId();
		if(activityId != null) this.updateActivity(activityId,context);
	}
	,updateActivity: function(activityId,context) {
		if(activityId == com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_HOME_ID) this.updateHome(context); else if(activityId == com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_INPUT_OPTIONS_ID) this.updateInputOptions(context); else if(activityId == com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VALIDATION_OPTIONS_ID) this.updateValidationOptions(context); else if(activityId == com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VARIABLES_FUNCTIONS_ID) this.updateVariablesFunctions(context); else if(activityId == com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_AUXILIARY_INITIAL_CONTENT_ID) this.updateAuxiliaryInitialContent(context); else if(activityId == com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_TEST_QUESTION_ID) this.updateTestQuestion(context); else if(activityId == com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_GRAPH_INPUT_OPTIONS_ID) this.updateGraphInputOptions(context); else if(activityId == com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_GRAPH_VALIDATION_OPTIONS_ID) this.updateGraphValidationOptions(context); else if(activityId == com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VIEW_SOURCE_ID) this.updateQuestionSource(context);
	}
	,showPreviousActivity: function(context) {
		var activityId = this.getPreviousActivityId();
		var current = this.getCurrentActivityId();
		if(activityId != null) {
			if(this.activityContainer.returnToPreviousActivity()) {
				com.wiris.quizzes.impl.QuizzesImpl.getInstance().getTracker().activitySwitch(context.getQuestion(),current,activityId);
				this.updateActivity(activityId,context);
			}
		}
	}
	,showNextActivity: function(activityId,context) {
		var current = this.getCurrentActivityId();
		if(this.activityContainer.showActivity(activityId)) {
			com.wiris.quizzes.impl.QuizzesImpl.getInstance().getTracker().activitySwitch(context.getQuestion(),current,activityId);
			this.updateActivity(activityId,context);
		}
	}
	,setValue: function(value) {
		this.getContext().getAuthorAnswer().setValue(value);
		this.updateCurrentActivity(this.getContext());
	}
	,getValue: function() {
		return this.getContext().getAuthorAnswer().getValue();
	}
	,ready: null
	,studioController: null
	,openFileDialog: null
	,confirmOptionsDialog: null
	,confirmImportDialog: null
	,viewSource: null
	,graphInputOptions: null
	,testQuestion: null
	,auxiliaryInitialContent: null
	,variableOptions: null
	,graphValidationOptions: null
	,validationOptions: null
	,inputOptions: null
	,home: null
	,quizzesStudioToolbar: null
	,activityContainer: null
	,__class__: com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent
});
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity = $hxClasses["com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity"] = function(controller) {
	com.wiris.util.ui.component.ActivityPanel.call(this);
	this.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_SOLID).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.CLASS_QUIZZES_STUDIO_HOME);
	this.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_STRETCH);
	var wrapper = new com.wiris.util.ui.component.BorderPanel(false);
	wrapper.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setVerticalAlignment(com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_TOP);
	var content = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	content.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_CENTER).setMinWidth(0);
	var selectionController = com.wiris.util.ui.controller.SelectionController.newMutuallyExclusive("answerType");
	this.gettingStartedList = new com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeGettingStartedList(controller,selectionController);
	this.gettingStartedList.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.CLASS_ACTIVITY_LIST).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.CLASS_MAIN_CONTAINER_DISPLAY_CHOOSER);
	this.answerTypeList = new com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList(controller,selectionController);
	this.answerTypeList.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.CLASS_ACTIVITY_LIST).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.CLASS_MAIN_CONTAINER_DISPLAY_CHOOSER);
	this.activityList = new com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList(controller);
	this.activityList.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.CLASS_ACTIVITY_LIST).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.CLASS_MAIN_CONTAINER_DISPLAY_CHOOSER);
	var leftPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	leftPanel.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.CLASS_QUIZZES_STUDIO_HOME_LEFT_PANEL);
	leftPanel.addComponent(this.gettingStartedList);
	leftPanel.addComponent(this.answerTypeList);
	leftPanel.addComponent(this.activityList);
	leftPanel.getStyle().setPadding(0,12,24,24);
	this.versionLabel = com.wiris.util.ui.component.Label.newTinyWithText(com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.VERSION));
	this.versionLabel.getStyle().setMargin(0,24,0,0);
	leftPanel.addComponent(this.versionLabel);
	var leftPanelAndMainContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	leftPanelAndMainContainer.getStyle().setVerticalAlignment(com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_TOP).setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	leftPanelAndMainContainer.addComponent(leftPanel);
	var mainContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	mainContainer.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.CLASS_STUDIO_MAIN_CONTAINER);
	this.homeMainContentContainer = new com.wiris.quizzes.impl.ui.component.HomeMainContentContainer(controller);
	this.homeMainContentContainer.setVisible(false);
	this.homeGettingStartedPanel = new com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel(controller);
	this.homeGettingStartedPanel.setVisible(true);
	mainContainer.addComponent(this.homeMainContentContainer);
	mainContainer.addComponent(this.homeGettingStartedPanel);
	leftPanelAndMainContainer.addComponent(mainContainer);
	content.addComponent(leftPanelAndMainContainer);
	wrapper.addComponent(content,com.wiris.util.ui.component.BorderPanel.POSITION_NORTH);
	this.bottomBar = new com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar(controller);
	var bottomPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	bottomPanel.addComponent(this.bottomBar);
	wrapper.addComponent(bottomPanel,com.wiris.util.ui.component.BorderPanel.POSITION_SOUTH);
	this.addComponent(wrapper);
};
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.__name__ = ["com","wiris","quizzes","impl","ui","component","QuizzesStudioHomeActivity"];
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.__super__ = com.wiris.util.ui.component.ActivityPanel;
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.prototype = $extend(com.wiris.util.ui.component.ActivityPanel.prototype,{
	getMainGraphComponent: function() {
		return this.homeMainContentContainer.getGraphComponent();
	}
	,getMainFocus: function() {
		return this.homeMainContentContainer.getMainFocus();
	}
	,updateVisibility: function(context) {
		this.answerTypeList.updateVisibility(context);
		this.activityList.updateVisibility(context);
		this.homeMainContentContainer.setVisible(context.getHomePageStatusGettingStarted() == com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_MAIN_CONTENT);
		if(context.getHomePageStatusGettingStarted() == com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_MAIN_CONTENT) this.homeMainContentContainer.updateVisibility(context);
		this.homeGettingStartedPanel.setVisible(context.getHomePageStatusGettingStarted() == com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_GETTING_STARTED);
		if(context.getHomePageStatusGettingStarted() == com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_GETTING_STARTED) {
			this.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.CLASS_GETTING_STARTED_PAGE_BACKGROUND_PANEL);
			this.getStyle().setBackgroundImageUrl(com.wiris.quizzes.api.Quizzes.getInstance().getResourceUrl(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.GETTING_STARTED_PAGE_BACKGROUND_FILE_NAME));
		} else {
			this.removeClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.CLASS_GETTING_STARTED_PAGE_BACKGROUND_PANEL);
			this.getStyle().setBackgroundImageUrl(null);
		}
		this.bottomBar.updateVisibility(context);
	}
	,bottomBar: null
	,versionLabel: null
	,homeGettingStartedPanel: null
	,homeMainContentContainer: null
	,reportIssueButton: null
	,visitOurWebsiteButton: null
	,freeTrainingButton: null
	,giveFeedbackButton: null
	,answerTypeList: null
	,activityList: null
	,gettingStartedList: null
	,__class__: com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity
});
com.wiris.util.ui.component.List = $hxClasses["com.wiris.util.ui.component.List"] = function() {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.util.ui.component.List.CLASS_LIST);
};
com.wiris.util.ui.component.List.__name__ = ["com","wiris","util","ui","component","List"];
com.wiris.util.ui.component.List.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.util.ui.component.List.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.util.ui.component.List.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	actionPerformed: function(e) {
		var action = e.getAction();
		if(action != null) this.performAction(action);
	}
	,addInteractiveRow: function(buttonPanel) {
		buttonPanel.addActionListener(this);
		this.addComponent(buttonPanel);
	}
	,addSelectableCustomItem: function(selectableId,primary,textReplacement,secondary,indentationLevel,changeAction) {
		var buttonPanel = com.wiris.util.ui.component.SelectableButtonPanel.newCustomSelectableButtonPanel(selectableId,primary,textReplacement,secondary,indentationLevel,changeAction);
		this.addInteractiveRow(buttonPanel);
		return buttonPanel;
	}
	,addSelectableIndentedItem: function(selectableId,primary,text,secondary,indentationLevel,changeAction) {
		var buttonPanel = com.wiris.util.ui.component.SelectableButtonPanel.newIndentedSelectableButtonPanel(selectableId,primary,text,secondary,indentationLevel,changeAction);
		this.addInteractiveRow(buttonPanel);
		return buttonPanel;
	}
	,addSelectableItem: function(selectableId,primary,text,secondary,changeAction) {
		var buttonPanel = com.wiris.util.ui.component.SelectableButtonPanel.newBasicSelectableButtonPanel(selectableId,primary,text,secondary,changeAction);
		this.addInteractiveRow(buttonPanel);
		return buttonPanel;
	}
	,addClickableCustomItem: function(primary,textReplacement,secondary,indentationLevel,activationAction) {
		var buttonPanel = com.wiris.util.ui.component.ButtonPanel.newCustomButtonPanel(primary,textReplacement,secondary,indentationLevel,activationAction);
		this.addInteractiveRow(buttonPanel);
		return buttonPanel;
	}
	,addClickableIndentedItem: function(primary,text,secondary,indentationLevel,activationAction) {
		var buttonPanel = com.wiris.util.ui.component.ButtonPanel.newIndentedButtonPanel(primary,text,secondary,indentationLevel,activationAction);
		this.addInteractiveRow(buttonPanel);
		return buttonPanel;
	}
	,addClickableItem: function(primary,text,secondary,activationAction) {
		var buttonPanel = com.wiris.util.ui.component.ButtonPanel.newBasicButtonPanel(primary,text,secondary,activationAction);
		this.addInteractiveRow(buttonPanel);
		return buttonPanel;
	}
	,addCustomItem: function(primary,textReplacement,secondary,indentationLevel) {
		var item = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
		item.setIndentationLevel(indentationLevel);
		if(primary != null) item.addComponent(primary);
		if(textReplacement != null) item.addComponent(textReplacement);
		if(secondary != null) {
			item.addComponent(secondary);
			secondary.getStyle().setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_RIGHT);
		}
		this.addComponent(item);
		return item;
	}
	,addIndentedItem: function(primary,text,secondary,indentationLevel) {
		var label = text == null?null:com.wiris.util.ui.component.Label.newWithText(text);
		return this.addCustomItem(primary,label,secondary,indentationLevel);
	}
	,addItem: function(primary,text,secondary) {
		return this.addIndentedItem(primary,text,secondary,0);
	}
	,addDivider: function() {
		this.addComponent(new com.wiris.util.ui.component.Divider(false));
	}
	,addHeader: function(text) {
		this.addComponent(com.wiris.util.ui.component.Label.newHeaderWithText(text));
	}
	,__class__: com.wiris.util.ui.component.List
});
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList = $hxClasses["com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList"] = function(controller) {
	com.wiris.util.ui.component.List.call(this);
	this.addHeader(controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.ACTIVITY_LIST_LABEL));
	this.inputOptions = this.addClickableItem(null,controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.ACTIVITY_LIST_INPUT_OPTIONS_LABEL),com.wiris.util.ui.component.IconBox.newWithMaterialIcon("keyboard_arrow_right"),new com.wiris.util.ui.Action("showActivity",com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_INPUT_OPTIONS_ID));
	this.inputOptions.setId("inputOptionsButton").addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.CLASS_ACTIVITY_ARROW_RIGHT);
	this.graphInputOptions = this.addClickableItem(null,controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.ACTIVITY_LIST_INPUT_OPTIONS_LABEL),com.wiris.util.ui.component.IconBox.newWithMaterialIcon("keyboard_arrow_right"),new com.wiris.util.ui.Action("showActivity",com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_GRAPH_INPUT_OPTIONS_ID));
	this.graphInputOptions.setId("graphOptionsButton").setVisible(false);
	this.graphInputOptions.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.CLASS_ACTIVITY_ARROW_RIGHT);
	this.graphValidationOptions = this.addClickableItem(null,controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.ACTIVITY_LIST_VALIDATION_OPTIONS_LABEL),com.wiris.util.ui.component.IconBox.newWithMaterialIcon("keyboard_arrow_right"),new com.wiris.util.ui.Action("showActivity",com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_GRAPH_VALIDATION_OPTIONS_ID));
	this.graphValidationOptions.setId("graphValidationOptions").setVisible(false);
	this.graphValidationOptions.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.CLASS_BORDER_RADIUS_BOTTOM_RIGHT_HOVER).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.CLASS_ACTIVITY_ARROW_RIGHT);
	this.validationOptions = this.addClickableItem(null,controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.ACTIVITY_LIST_VALIDATION_OPTIONS_LABEL),com.wiris.util.ui.component.IconBox.newWithMaterialIcon("keyboard_arrow_right"),new com.wiris.util.ui.Action("showActivity",com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VALIDATION_OPTIONS_ID));
	this.validationOptions.setId("validationOptionsButton");
	this.validationOptions.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.CLASS_BORDER_RADIUS_BOTTOM_RIGHT_HOVER).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.CLASS_ACTIVITY_ARROW_RIGHT);
	this.addActionListener(controller);
};
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.__name__ = ["com","wiris","quizzes","impl","ui","component","QuizzesStudioHomeActivityList"];
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.__super__ = com.wiris.util.ui.component.List;
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.prototype = $extend(com.wiris.util.ui.component.List.prototype,{
	isConfigShowValidationOptions: function(context) {
		return context.isOptValidationOptions();
	}
	,isConfigShowInputOptions: function(context) {
		return context.isOptOpenAnswer() || context.isOptInputType() || context.isOptInputSyntax() || context.isOptAuxiliaryCas() || context.isOptAuxiliaryCasReplaceEditor() || context.isOptAuxiliaryTextInput();
	}
	,updateVisibility: function(context) {
		var syntaxName = context.getSlot().getSyntax().getName();
		this.inputOptions.setVisible(syntaxName == com.wiris.quizzes.api.assertion.SyntaxName.MATH && this.isConfigShowInputOptions(context));
		this.graphInputOptions.setVisible(syntaxName == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC && this.isConfigShowInputOptions(context));
		this.graphValidationOptions.setVisible(syntaxName == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC && this.isConfigShowValidationOptions(context));
		this.validationOptions.setVisible(syntaxName != com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC && this.isConfigShowValidationOptions(context));
		com.wiris.util.ui.component.List.prototype.setVisible.call(this,context.getHomePageStatusGettingStarted() == com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_MAIN_CONTENT);
	}
	,validationOptions: null
	,graphValidationOptions: null
	,graphInputOptions: null
	,inputOptions: null
	,__class__: com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList
});
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList = $hxClasses["com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList"] = function(controller,selectionController) {
	com.wiris.util.ui.component.List.call(this);
	this.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.CLASS_ANSWER_TYPE_LIST);
	this.addHeader(controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_LABEL));
	this.selectionController = selectionController;
	this.equationType = this.addSelectableItem(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_EQUATION,com.wiris.util.ui.component.IconBox.newIconBox(com.wiris.util.ui.ImageIcon.newFromFile("answer_type_equation.png")),controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_LABEL_EQUATION),null,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_EQUATION,null));
	this.equationType.setSelected(true);
	this.equationType.setSelectionController(this.selectionController);
	this.equationType.setId("equationAnswerType");
	this.textType = this.addSelectableItem(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_TEXT,com.wiris.util.ui.component.IconBox.newIconBox(com.wiris.util.ui.ImageIcon.newFromFile("answer_type_text.png")),controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_LABEL_TEXT),null,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_TEXT,null));
	this.textType.setSelectionController(this.selectionController);
	this.textType.setId("textAnswerType");
	this.graphicGeometry = this.addSelectableItem(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_GEOMETRY,com.wiris.util.ui.component.IconBox.newIconBox(com.wiris.util.ui.ImageIcon.newFromFile("answer_type_geometry_graph.png")),controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_LABEL_GEOMETRY),null,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_GEOMETRY,null));
	this.graphicGeometry.setSelectionController(this.selectionController);
	this.graphicGeometry.setId("geometryAnswerType");
	this.sketchType = this.addSelectableItem(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_SKETCH,com.wiris.util.ui.component.IconBox.newIconBox(com.wiris.util.ui.ImageIcon.newFromFile("answer_type_sketch.png")),controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_LABEL_SKETCH),null,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_SKETCH,null));
	this.sketchType.setSelectionController(this.selectionController);
	this.sketchType.setId("sketchAnswerType");
	this.statisticalChartsIcon = com.wiris.util.ui.component.IconBox.newWithMaterialIcon("expand_more");
	this.statisticalChartsType = this.addClickableItem(com.wiris.util.ui.component.IconBox.newIconBox(com.wiris.util.ui.ImageIcon.newFromFile("answer_type_statistics_graph.png")),controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_LABEL_STATISTICAL_CHARTS),this.statisticalChartsIcon,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_STATS_CHART,null));
	this.statisticalChartsType.setId("statisticsAnswerType");
	this.statisticalChartsType.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.CLASS_ACTIVITY_ARROW_RIGHT);
	this.graphicBarchartType = this.addSelectableItem(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_BAR_CHART,null,controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_LABEL_BAR_CHART),null,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_BAR_CHART,null));
	this.graphicBarchartType.setId("barChartAnswerType");
	this.graphicBarchartType.setSelectionController(this.selectionController);
	this.graphicLinechartType = this.addSelectableItem(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_LINE_CHART,null,controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_LABEL_LINE_CHART),null,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_LINE_CHART,null));
	this.graphicLinechartType.setId("lineChartAnswerType");
	this.graphicLinechartType.setSelectionController(this.selectionController);
	this.graphicPiechartType = this.addSelectableItem(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_PIE_CHART,null,controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_LABEL_PIE_CHART),null,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_PIE_CHART,null));
	this.graphicPiechartType.setId("pieChartAnswerType");
	this.graphicPiechartType.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.CLASS_LIST_BORDER_RADIUS_BOTTOM_RIGHT);
	this.graphicPiechartType.setSelectionController(this.selectionController);
	this.addActionListener(controller);
};
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.__name__ = ["com","wiris","quizzes","impl","ui","component","QuizzesStudioHomeAnswerTypeList"];
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.__super__ = com.wiris.util.ui.component.List;
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.prototype = $extend(com.wiris.util.ui.component.List.prototype,{
	actionPerformed: function(e) {
		var a = e.getAction();
		if(a != null && a.getId() == com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_STATS_CHART) {
			var isStatsChartSelected = this.graphicBarchartType.isSelected() || this.graphicLinechartType.isSelected() || this.graphicPiechartType.isSelected();
			if(!isStatsChartSelected) this.selectionController.setSelected("barChart",true);
			return;
		}
		this.fireEvent(e);
	}
	,updateVisibility: function(context) {
		this.setVisible(context.isOptAnswerType());
		var slot = context.getSlot();
		var syntax = slot.getSyntax().getName();
		var graphMode = slot.getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE);
		var isGraphicSyntax = context.isOptGraphicSyntax();
		this.graphicGeometry.setVisible(isGraphicSyntax);
		this.sketchType.setVisible(isGraphicSyntax);
		this.statisticalChartsType.setVisible(isGraphicSyntax);
		this.graphicLinechartType.setVisible(isGraphicSyntax);
		this.graphicPiechartType.setVisible(isGraphicSyntax);
		this.graphicBarchartType.setVisible(isGraphicSyntax);
		if(context.getHomePageStatusGettingStarted() == com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_MAIN_CONTENT) {
			if(syntax == com.wiris.quizzes.api.assertion.SyntaxName.MATH && !this.equationType.isSelected()) this.selectionController.setSelected(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_EQUATION,true); else if(syntax == com.wiris.quizzes.api.assertion.SyntaxName.STRING && !this.textType.isSelected()) this.selectionController.setSelected(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_TEXT,true); else if(syntax == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC && graphMode != null) {
				if(graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD && !this.graphicGeometry.isSelected()) this.selectionController.setSelected(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_GEOMETRY,true); else if(graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_BAR_CHART && !this.graphicBarchartType.isSelected()) this.selectionController.setSelected(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_BAR_CHART,true); else if(graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_PIE_CHART && !this.graphicPiechartType.isSelected()) this.selectionController.setSelected(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_PIE_CHART,true); else if(graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_LINE_CHART && !this.graphicLinechartType.isSelected()) this.selectionController.setSelected(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_LINE_CHART,true); else if(graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH && !this.sketchType.isSelected()) this.selectionController.setSelected(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_SKETCH,true);
			}
		}
		if(syntax == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC && graphMode != null && !(graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD) && !(graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH)) {
			this.graphicBarchartType.setVisible(true);
			this.graphicLinechartType.setVisible(true);
			this.graphicPiechartType.setVisible(true);
			this.statisticalChartsIcon.setIcon(new com.wiris.util.ui.MaterialIcon("keyboard_arrow_down"));
			if(this.statisticalChartsType.hasClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.CLASS_LIST_BORDER_RADIUS_BOTTOM_RIGHT)) this.statisticalChartsType.removeClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.CLASS_LIST_BORDER_RADIUS_BOTTOM_RIGHT);
		} else {
			this.graphicBarchartType.setVisible(false);
			this.graphicLinechartType.setVisible(false);
			this.graphicPiechartType.setVisible(false);
			this.statisticalChartsIcon.setIcon(new com.wiris.util.ui.MaterialIcon("keyboard_arrow_right"));
			if(!this.statisticalChartsType.hasClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.CLASS_LIST_BORDER_RADIUS_BOTTOM_RIGHT)) this.statisticalChartsType.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.CLASS_LIST_BORDER_RADIUS_BOTTOM_RIGHT);
		}
	}
	,selectionController: null
	,graphicPiechartType: null
	,graphicLinechartType: null
	,graphicBarchartType: null
	,statisticalChartsIcon: null
	,statisticalChartsType: null
	,sketchType: null
	,graphicGeometry: null
	,textType: null
	,equationType: null
	,__class__: com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList
});
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar = $hxClasses["com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar"] = function(controller) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_RIGHT_TO_LEFT);
	this.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_SOLID).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar.CLASS_QUIZZES_STUDIO_BOTTOM_BAR);
	this.cancelButton = com.wiris.util.ui.component.Button.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar.QUIZZES_STUDIO_BOTTOM_BAR_CANCEL_BUTTON_LABEL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar.QUIZZES_STUDIO_BOTTOM_BAR_CANCEL_BUTTON_ID,null),controller);
	this.cancelButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON).setId("quizzesStudioHomeCancelButton");
	this.testQuestionButton = com.wiris.util.ui.component.Button.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar.QUIZZES_STUDIO_BOTTOM_BAR_TEST_QUESTION_LABEL),new com.wiris.util.ui.Action("showActivity",com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_TEST_QUESTION_ID),controller);
	this.testQuestionButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
	this.saveButton = com.wiris.util.ui.component.Button.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar.QUIZZES_STUDIO_BOTTOM_BAR_SAVE_BUTTON_LABEL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar.QUIZZES_STUDIO_BOTTOM_BAR_SAVE_BUTTON_ID,null),controller);
	this.saveButton.addClass(com.wiris.util.ui.component.Button.CLASS_BUTTON_CONTAINED).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON).setId("quizzesStudioHomeSaveButton");
	this.saveButton.getStyle().setMargin(0,0,0,8);
	this.addComponent(this.saveButton);
	this.addComponent(this.testQuestionButton);
	this.addComponent(this.cancelButton);
};
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar.__name__ = ["com","wiris","quizzes","impl","ui","component","QuizzesStudioHomeBottomBar"];
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	updateVisibility: function(context) {
		var displaySaveAndCancel = !context.isInlineQuizzesStudio();
		var displayTest = context.isOptOpenAnswer();
		this.setVisible(displaySaveAndCancel || displayTest);
		if(this.isVisible()) {
			this.saveButton.setVisible(displaySaveAndCancel);
			this.cancelButton.setVisible(displaySaveAndCancel);
			this.testQuestionButton.setVisible(displayTest && context.getHomePageStatusGettingStarted() != com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_GETTING_STARTED);
		}
	}
	,saveButton: null
	,cancelButton: null
	,testQuestionButton: null
	,__class__: com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar
});
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeGettingStartedList = $hxClasses["com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeGettingStartedList"] = function(controller,selectionController) {
	com.wiris.util.ui.component.List.call(this);
	this.gettingStartedButton = this.addSelectableItem("gettingStarted",com.wiris.util.ui.component.IconBox.newWithMaterialIcon("home"),com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeGettingStartedList.HOME_GETTING_STARTED_LIST_BUTTON_TEXT),null,new com.wiris.util.ui.Action("gettingStarted",null));
	this.gettingStartedButton.setSelectionController(selectionController);
	this.gettingStartedButton.setId("gettingStartedButton");
	this.gettingStartedButton.addActionListener(controller);
	this.gettingStartedButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeGettingStartedList.CLASS_GETTING_STARTED_LIST);
};
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeGettingStartedList.__name__ = ["com","wiris","quizzes","impl","ui","component","QuizzesStudioHomeGettingStartedList"];
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeGettingStartedList.__super__ = com.wiris.util.ui.component.List;
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeGettingStartedList.prototype = $extend(com.wiris.util.ui.component.List.prototype,{
	gettingStartedButton: null
	,__class__: com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeGettingStartedList
});
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField = $hxClasses["com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField"] = function(context) {
	com.wiris.quizzes.impl.ui.component.PopupTextField.call(this,context.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.AUTHORING_FIELD_OPEN_STUDIO_BUTTON_TOOLTIP),com.wiris.util.ui.ImageIcon.newFromFile(com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.AUTHORING_FIELD_OPEN_STUDIO_BUTTON_ICON));
	this.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.CLASS_AUTHORING_FIELD);
	this.setId(com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.AUTHORING_FIELD_ID);
	this.context = context;
	this.setOpenPopupAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.AUTHORING_FIELD_OPEN_STUDIO_BUTTON_ID,null));
	this.getButton().setId(com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.AUTHORING_FIELD_OPEN_STUDIO_BUTTON_ID);
	this.getButton().addClass(com.wiris.util.ui.component.Button.CLASS_BUTTON_CONTAINED);
	this.getButton().getStyle().setForegroundColor(com.wiris.util.graphics.Color.fromText(com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.AUTHORING_FIELD_OPEN_STUDIO_BUTTON_FOREGROUND_COLOR));
	this.getWindowComponent().setApplicationClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.CLASS_AUTHORING_FIELD_WINDOW);
	this.setValue(this.context.getInputAuthorAnswer().getValue());
	this.summary = new com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent();
	this.summary.updateSummary(this.context);
	this.setChangeAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.TEXT_FIELD_CORRECT_ANSWER_CHANGED,null));
	this.addActionListener(this);
};
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.__name__ = ["com","wiris","quizzes","impl","ui","component","QuizzesStudioPopupTextField"];
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.__interfaces__ = [com.wiris.quizzes.impl.ui.component.AuthoringFieldComponent];
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.__super__ = com.wiris.quizzes.impl.ui.component.PopupTextField;
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.prototype = $extend(com.wiris.quizzes.impl.ui.component.PopupTextField.prototype,{
	innerContentChanged: function() {
	}
	,getType: function() {
		return com.wiris.quizzes.api.ui.AuthoringFieldType.STUDIO;
	}
	,getComponent: function() {
		return this;
	}
	,actionPerformed: function(e) {
		var action = e.getAction();
		var actionId = action.getId();
		if(actionId == com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.ACCEPT_EASY_MODAL_SAVE_AND_CLOSE_ACTION_ID) {
			this.saveQuestion();
			this.closeWindow();
		} else if(actionId == com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.AUTHORING_FIELD_CLOSE_STUDIO_ACTION_ID) this.closeWindow(); else if(actionId == com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.TEXT_FIELD_CORRECT_ANSWER_CHANGED) {
			this.context.getInputAuthorAnswer().setValue(this.getValue());
			this.performAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.AuthoringFieldImpl.AUTHORING_FIELD_CONTENT_CHANGED,null));
		} else com.wiris.quizzes.impl.ui.component.PopupTextField.prototype.actionPerformed.call(this,e);
	}
	,closeWindow: function() {
		this.getModalWindow().removeActionListener(this);
		this.getModalWindow().removeComponentListener(this);
		this.setValue(this.getContext().getInputAuthorAnswer().getValue());
	}
	,open: function() {
		if(!this.isWindowLoaded()) this.onWindowLoaded();
		if(!this.quizzesWindow.isActionListener(this)) this.quizzesWindow.addActionListener(this);
		if(!this.quizzesWindow.isComponentListener(this)) this.quizzesWindow.addComponentListener(this);
		this.performAction(this.getOpenPopupAction());
		this.quizzesWindow.openStudio(this);
	}
	,saveQuestion: function() {
		this.context.importToInputQuestion();
		var correctAnswer = this.context.getInputAuthorAnswer().getValue();
		if(com.wiris.quizzes.impl.MathContent.getMathType(correctAnswer) == com.wiris.quizzes.impl.MathContent.TYPE_MATHML) {
			var tools = new com.wiris.quizzes.impl.HTMLTools();
			if(tools.isTokensMathML(correctAnswer)) correctAnswer = tools.mathMLToText(correctAnswer);
		}
		this.setValue(correctAnswer);
		this.summary.updateSummary(this.context);
		this.performAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.AuthoringFieldImpl.AUTHORING_FIELD_CONTENT_CHANGED,null));
	}
	,getContext: function() {
		return this.context;
	}
	,getMainFocus: function() {
		if(this.isWindowLoaded()) return this.quizzesWindow.getMainFocus();
		return null;
	}
	,getSummary: function() {
		return this.summary;
	}
	,createWindowComponent: function() {
		this.quizzesWrapper = com.wiris.quizzes.impl.ui.component.QuizzesStudioWindowWrapper.getInstance();
		return this.quizzesWrapper;
	}
	,createModalWindow: function() {
		this.quizzesWindow = com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.getInstance();
		return this.quizzesWindow;
	}
	,summary: null
	,quizzesWrapper: null
	,quizzesWindow: null
	,context: null
	,__class__: com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField
});
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow = $hxClasses["com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow"] = function() {
	com.wiris.quizzes.impl.ui.component.PopupWindow.call(this,null);
	this.getStyle().setMinWidth(975).setCSSVariable("--quizzes-studio-min-height",com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.WINDOW_HEIGHT_DEFAULT + "px").setMaxHeightWithUnit(80,com.wiris.util.ui.Style.SIZE_UNIT_VIEW_HEIGHT);
	this.loadStudio();
};
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.__name__ = ["com","wiris","quizzes","impl","ui","component","QuizzesStudioPopupWindow"];
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.getInstance = function() {
	if(com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.instance == null) com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.instance = new com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow();
	return com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.instance;
}
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.__super__ = com.wiris.quizzes.impl.ui.component.PopupWindow;
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.prototype = $extend(com.wiris.quizzes.impl.ui.component.PopupWindow.prototype,{
	loadStudio: function() {
		if(this.quizzesStudio == null) {
			this.quizzesStudio = new com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent();
			this.addComponent(this.quizzesStudio);
			this.quizzesStudio.addActionListener(this);
		}
	}
	,actionPerformed: function(e) {
		var action = e.getAction();
		var actionId = action.getId();
		if(actionId == com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.ACCEPT_EASY_MODAL_SAVE_AND_CLOSE_ACTION_ID) {
			this.performAction(action);
			this.confirmDialog.close();
			this.close();
		} else if(actionId == com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.ACCEPT_EASY_MODAL_CLOSE_WITHOUT_SAVING_ACTION_ID) {
			this.confirmDialog.close();
			this.close();
		} else if(actionId == com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.AUTHORING_FIELD_CLOSE_STUDIO_ACTION_ID) {
			this.close();
			this.performAction(action);
		} else com.wiris.quizzes.impl.ui.component.PopupWindow.prototype.actionPerformed.call(this,e);
	}
	,closeButtonPressed: function() {
		this.easyModalClose();
	}
	,easyModalClose: function() {
		var inputQuestion = this.getContext().getInputQuestion().getImpl();
		var question = this.getContext().getQuestion().getImpl();
		if(question.serialize() == inputQuestion.serialize()) this.close(); else this.confirmDialog.open();
	}
	,openStudio: function(authoringField) {
		if(this.quizzesStudio == null) this.loadStudio();
		this.setParent(authoringField);
		this.setContext(authoringField.getContext());
		com.wiris.quizzes.impl.QuizzesImpl.getInstance().getTracker().studioOpened(authoringField.getContext().getQuestion());
		this.open();
	}
	,getContext: function() {
		return this.quizzesStudio.getContext();
	}
	,setContext: function(context) {
		this.quizzesStudio.setContext(context);
		if(!context.isOptOpenAnswer()) this.getStyle().setMinWidth(50).setBorderSize(0,0,0,0);
	}
	,getMainFocus: function() {
		if(this.quizzesStudio != null) return this.quizzesStudio.getMainFocus();
		return null;
	}
	,createConfirmDialog: function() {
		var dialog = new com.wiris.util.ui.component.Dialog();
		dialog.setTitle(this.quizzesContext.t(com.wiris.quizzes.impl.ui.component.PopupWindow.POPUP_TEXT_FIELD_WARNING_TITLE));
		dialog.setMessageText(this.quizzesContext.t(com.wiris.quizzes.impl.ui.component.PopupWindow.POPUP_TEXT_FIELD_WARNING_MESSAGE));
		dialog.addPrimaryAction(this.quizzesContext.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.POPUP_TEXT_FIELD_WARNING_SAVE_AND_CLOSE_BUTTON_LABEL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.ACCEPT_EASY_MODAL_SAVE_AND_CLOSE_ACTION_ID,null),true).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
		dialog.addPrimaryAction(this.quizzesContext.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.POPUP_TEXT_FIELD_WARNING_CLOSE_WITHOUT_SAVING_BUTTON_LABEL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.ACCEPT_EASY_MODAL_CLOSE_WITHOUT_SAVING_ACTION_ID,null),false).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
		dialog.addPrimaryAction("",new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.PopupWindow.CANCEL_EASY_MODAL_CLOSE_ACTION_ID,null),false).setVisible(false);
		dialog.addSecondaryAction(this.quizzesContext.t(com.wiris.quizzes.impl.ui.component.PopupWindow.POPUP_TEXT_FIELD_WARNING_CANCEL_BUTTON_LABEL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.PopupWindow.CANCEL_EASY_MODAL_CLOSE_ACTION_ID,null)).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
		dialog.getPrimaryAction(0).getParent().setDirection(com.wiris.util.ui.component.FlowPanel.DIRECTION_RIGHT_TO_LEFT);
		return dialog;
	}
	,quizzesStudio: null
	,__class__: com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow
});
com.wiris.util.ui.component.ToolBar = $hxClasses["com.wiris.util.ui.component.ToolBar"] = function(direction) {
	com.wiris.util.ui.component.FlowPanel.call(this,direction);
	this.addClass(com.wiris.util.ui.component.ToolBar.CLASS_TOOL_BAR).addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_SOLID);
	this.sections = new com.wiris.util.ui.component.FlowPanel(direction);
	this.sectionsAtEnd = new com.wiris.util.ui.component.FlowPanel(direction);
	this.addComponent(this.sections);
	this.addComponent(this.sectionsAtEnd);
};
com.wiris.util.ui.component.ToolBar.__name__ = ["com","wiris","util","ui","component","ToolBar"];
com.wiris.util.ui.component.ToolBar.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.util.ui.component.ToolBar.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	hideAllElements: function() {
		var sectionsComp = this.sections.getChildren();
		var endSectionsComp = this.sectionsAtEnd.getChildren();
		var _g = 0;
		while(_g < sectionsComp.length) {
			var section = sectionsComp[_g];
			++_g;
			var items = section.getChildren();
			var _g1 = 0;
			while(_g1 < items.length) {
				var item = items[_g1];
				++_g1;
				item.setVisible(false);
			}
		}
		var _g = 0;
		while(_g < endSectionsComp.length) {
			var endSection = endSectionsComp[_g];
			++_g;
			var items = endSection.getChildren();
			var _g1 = 0;
			while(_g1 < items.length) {
				var item = items[_g1];
				++_g1;
				item.setVisible(false);
			}
		}
	}
	,removeAllComponents: function() {
		this.sections.removeAllComponents();
		this.sectionsAtEnd.removeAllComponents();
	}
	,addComponentInSection: function(component,sectionIndex) {
		var sectionContainer = this.sections;
		var originalSectionIndex = sectionIndex;
		if(sectionIndex < 0) {
			sectionIndex = -sectionIndex - 1;
			sectionContainer = this.sectionsAtEnd;
		}
		while(sectionIndex >= sectionContainer.getComponents().length) this.createSectionImpl(sectionContainer);
		var section = this.getSection(originalSectionIndex);
		section.addComponent(component);
	}
	,createSectionAtEnd: function() {
		return this.createSectionImpl(this.sectionsAtEnd);
	}
	,createSection: function() {
		return this.createSectionImpl(this.sections);
	}
	,createSectionImpl: function(sectionContainer) {
		var section = new com.wiris.util.ui.component.FlowPanel(this.getDirection());
		sectionContainer.addComponent(section);
		return section;
	}
	,getNumberOfSections: function() {
		return this.sections.getComponents().length + this.sectionsAtEnd.getComponents().length;
	}
	,getSection: function(index) {
		var sectionContainer = this.sections;
		if(index < 0) {
			sectionContainer = this.sectionsAtEnd;
			index = -index - 1;
		} else if(index >= this.sections.getComponents().length) {
			sectionContainer = this.sectionsAtEnd;
			index -= this.sections.getComponents().length;
		}
		return sectionContainer.getComponents()[index];
	}
	,sectionsAtEnd: null
	,sections: null
	,__class__: com.wiris.util.ui.component.ToolBar
});
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent"] = function(titleLabel,helpButtonUrl,controller) {
	com.wiris.util.ui.component.ToolBar.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.setId(com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.ID_QUIZZES_STUDIO_TOOLBAR).addClass(com.wiris.util.ui.component.ToolBar.CLASS_TOOL_BAR_FLAT).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.CLASS_QUIZZES_STUDIO_TOOLBAR);
	this.getStyle().setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_SPACED);
	this.addActionListener(controller);
	this.titleLabel = com.wiris.util.ui.component.Label.newHeaderWithText(titleLabel);
	this.backButton = com.wiris.util.ui.component.Button.newWithIcon(controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_BACK_BUTTON_TOOLTIP),new com.wiris.util.ui.MaterialIcon("keyboard_backspace"),new com.wiris.util.ui.Action("goBack",null),controller);
	this.backButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON).setId("quizzesStudioBackButton");
	this.backButton.setVisible(false);
	this.quizzesIconBox = com.wiris.util.ui.component.IconBox.newIconBox(com.wiris.util.ui.ImageIcon.newFromFile("quizzes24.png"));
	this.helpButton = com.wiris.util.ui.component.HyperlinkButton.newWithIcon(controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_HELP_BUTTON_TOOLTIP),new com.wiris.util.ui.MaterialIcon("help"),helpButtonUrl,new com.wiris.util.ui.Action("help",null),controller);
	this.helpButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON).setId("quizzesStudioHelpButton");
	this.contextMenu = com.wiris.util.ui.component.ContextMenuButton.newWithTextAndIcon(controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_TOOLTIP),new com.wiris.util.ui.MaterialIcon(com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_ICON));
	this.contextMenu.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.CLASS_QUIZZES_FILE_BUTTON);
	this.contextMenu.setId("quizzesStudioContextMenu");
	this.contextMenu.addOption(com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_IMPORT_ID,controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_IMPORT_LABEL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_IMPORT_ID,null));
	this.contextMenu.addOption(com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_EXPORT_ID,controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_EXPORT_LABEL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_EXPORT_ID,null));
	this.contextMenu.addOption(com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_VIEW_SOURCE_ID,controller.t(com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_VIEW_SOURCE_LABEL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_VIEW_SOURCE_ID,null));
	this.contextMenu.addActionListener(controller);
	this.closeButton = com.wiris.util.ui.component.Button.newWithIcon(controller.t("Close"),new com.wiris.util.ui.MaterialIcon("close"),new com.wiris.util.ui.Action("easyModalCloseStudio",null),controller);
	this.closeButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON).setId("quizzesStudioCloseButton");
	var leftPanel = this.createSection();
	leftPanel.addComponent(this.backButton);
	leftPanel.addComponent(this.quizzesIconBox);
	leftPanel.addComponent(this.titleLabel);
	var rightPanel = this.createSectionAtEnd();
	rightPanel.addComponent(this.contextMenu);
	rightPanel.addComponent(this.helpButton);
	rightPanel.addComponent(this.closeButton);
};
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","QuizzesStudioToolbarComponent"];
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.__super__ = com.wiris.util.ui.component.ToolBar;
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.prototype = $extend(com.wiris.util.ui.component.ToolBar.prototype,{
	updateToolbarVisibility: function(titleLabel,hasBackButton,helpButtonUrl,showCloseButton) {
		this.quizzesIconBox.setVisible(!hasBackButton);
		this.backButton.setVisible(hasBackButton);
		this.titleLabel.setText(titleLabel);
		if(helpButtonUrl != null) this.helpButton.setUrl(helpButtonUrl);
		this.helpButton.setVisible(helpButtonUrl != null);
		this.contextMenu.setVisible(!hasBackButton);
		this.closeButton.setVisible(showCloseButton);
	}
	,contextMenu: null
	,helpButton: null
	,titleLabel: null
	,closeButton: null
	,backButton: null
	,quizzesIconBox: null
	,__class__: com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent
});
com.wiris.quizzes.impl.ui.component.QuizzesStudioWindowWrapper = $hxClasses["com.wiris.quizzes.impl.ui.component.QuizzesStudioWindowWrapper"] = function() {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.getStyle().setWidth(0).setHeight(0);
	this.setApplicationClass(com.wiris.quizzes.impl.ui.component.PopupTextField.CLASS_POPUP_TEXT_FIELD_WINDOW);
	this.addComponent(com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.getInstance());
};
com.wiris.quizzes.impl.ui.component.QuizzesStudioWindowWrapper.__name__ = ["com","wiris","quizzes","impl","ui","component","QuizzesStudioWindowWrapper"];
com.wiris.quizzes.impl.ui.component.QuizzesStudioWindowWrapper.instance = null;
com.wiris.quizzes.impl.ui.component.QuizzesStudioWindowWrapper.getInstance = function() {
	if(com.wiris.quizzes.impl.ui.component.QuizzesStudioWindowWrapper.instance == null) com.wiris.quizzes.impl.ui.component.QuizzesStudioWindowWrapper.instance = new com.wiris.quizzes.impl.ui.component.QuizzesStudioWindowWrapper();
	return com.wiris.quizzes.impl.ui.component.QuizzesStudioWindowWrapper.instance;
}
com.wiris.quizzes.impl.ui.component.QuizzesStudioWindowWrapper.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.QuizzesStudioWindowWrapper.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	quizzesWindow: null
	,__class__: com.wiris.quizzes.impl.ui.component.QuizzesStudioWindowWrapper
});
com.wiris.quizzes.impl.ui.component.RandomVariableRow = $hxClasses["com.wiris.quizzes.impl.ui.component.RandomVariableRow"] = function() {
	com.wiris.util.ui.component.BorderPanel.call(this,false);
	var changeAction = new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.RandomVariableRow.ACTION_RANDOM_VARIABLE_FIELD_CHANGED,com.wiris.quizzes.impl.ui.component.RandomVariableRow.ACTION_RANDOM_VARIABLE_FIELD_CHANGED);
	var main = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	main.getStyle().setMargin(16,0,16,0);
	this.variableName = com.wiris.util.ui.component.TextField.newWithLabel(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_NAME_TEXT));
	this.variableName.setPrefix(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_NAME_PREFIX));
	this.variableName.setChangeAction(changeAction);
	this.variableName.addClass(com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_OUTLINED).addActionListener(this);
	var isAn = com.wiris.util.ui.component.Label.newWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_TYPE_TEXT));
	isAn.getStyle().setMargin(0,16,0,16);
	isAn.getStyle().setWidthWithUnit(70,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	this.minValue = com.wiris.util.ui.component.TextField.newWithLabel(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_MIN_VALUE));
	this.minValue.setChangeAction(changeAction);
	this.minValue.addClass(com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_OUTLINED).addActionListener(this);
	this.minValue.getStyle().setBorderSize(0,0,0,10);
	var and = com.wiris.util.ui.component.Label.newWithText(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_ROW_AND));
	and.getStyle().setMargin(0,16,0,16);
	this.maxValue = com.wiris.util.ui.component.TextField.newWithLabel(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_MAX_VALUE));
	this.maxValue.setChangeAction(changeAction);
	this.maxValue.addClass(com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_OUTLINED).addActionListener(this);
	this.maxValue.getStyle().setBorderSize(0,0,0,10);
	main.addComponent(this.variableName);
	main.addComponent(isAn);
	main.addComponent(this.minValue);
	main.addComponent(and);
	main.addComponent(this.maxValue);
	this.addComponent(main,com.wiris.util.ui.component.BorderPanel.POSITION_WEST);
	var removeVariable = com.wiris.util.ui.component.Button.newWithIcon("Delete",new com.wiris.util.ui.MaterialIcon("delete"),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ACTION_REMOVE_RANDOM_VARIABLE,com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ACTION_REMOVE_RANDOM_VARIABLE),this);
	removeVariable.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON).addClass(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.CLASS_RANDOM_VARIABLES_BUTTON);
	this.addComponent(removeVariable,com.wiris.util.ui.component.BorderPanel.POSITION_EAST);
};
com.wiris.quizzes.impl.ui.component.RandomVariableRow.__name__ = ["com","wiris","quizzes","impl","ui","component","RandomVariableRow"];
com.wiris.quizzes.impl.ui.component.RandomVariableRow.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.component.RandomVariableRow.newWithData = function(name,min,max) {
	var row = new com.wiris.quizzes.impl.ui.component.RandomVariableRow();
	row.variableName.setValue(name);
	row.minValue.setValue(min);
	row.maxValue.setValue(max);
	return row;
}
com.wiris.quizzes.impl.ui.component.RandomVariableRow.__super__ = com.wiris.util.ui.component.BorderPanel;
com.wiris.quizzes.impl.ui.component.RandomVariableRow.prototype = $extend(com.wiris.util.ui.component.BorderPanel.prototype,{
	setIds: function(id) {
		this.variableName.setId("basicRandomVariableName" + id);
		this.maxValue.setId("basicRandomVariableMax" + id);
		this.minValue.setId("basicRandomVariableMin" + id);
	}
	,setNameStatus: function(variableNameStatus) {
		if(variableNameStatus == com.wiris.quizzes.impl.ui.component.RandomVariableRow.DUPLICATE_NAME_ERROR) {
			this.variableName.clearError();
			this.variableName.setError(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_NAME_ALREADY_USED_ERROR));
		} else if(variableNameStatus == com.wiris.quizzes.impl.ui.component.RandomVariableRow.INVALID_NAME_ERROR) {
			this.variableName.clearError();
			this.variableName.setError(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_INVALID_NAME_ERROR));
		} else if(variableNameStatus == com.wiris.quizzes.impl.ui.component.RandomVariableRow.MISSING_NAME_ERROR) {
			this.variableName.clearError();
			this.variableName.setError(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_NAME_MISSING_ERROR));
		} else {
			this.variableName.clearError();
			this.variableName.setStatus(variableNameStatus);
		}
	}
	,setStatus: function(variableNameStatus,minValueStatus,maxValueStatus) {
		if(variableNameStatus == com.wiris.quizzes.impl.ui.component.RandomVariableRow.DUPLICATE_NAME_ERROR) {
			this.variableName.clearError();
			this.variableName.setError(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_NAME_ALREADY_USED_ERROR));
		} else if(variableNameStatus == com.wiris.quizzes.impl.ui.component.RandomVariableRow.INVALID_NAME_ERROR) {
			this.variableName.clearError();
			this.variableName.setError(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_INVALID_NAME_ERROR));
		} else if(variableNameStatus == com.wiris.quizzes.impl.ui.component.RandomVariableRow.MISSING_NAME_ERROR) {
			this.variableName.clearError();
			this.variableName.setError(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_NAME_MISSING_ERROR));
		} else {
			this.variableName.clearError();
			this.variableName.setStatus(variableNameStatus);
		}
		if(minValueStatus == com.wiris.quizzes.impl.ui.component.RandomVariableRow.MISSING_VALUE_ERROR && this.minValue.isValid()) {
			this.minValue.clearError();
			this.minValue.setError(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_MIN_VALUE_MISSING_ERROR));
		} else if(minValueStatus == com.wiris.quizzes.impl.ui.component.RandomVariableRow.NOT_A_NUMBER_ERROR || !this.minValue.isValid()) {
			this.minValue.clearError();
			this.minValue.setError(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_NOT_INTEGER_ERROR));
		} else {
			this.minValue.clearError();
			this.minValue.setStatus(minValueStatus);
		}
		if(maxValueStatus == com.wiris.quizzes.impl.ui.component.RandomVariableRow.MISSING_VALUE_ERROR && this.maxValue.isValid()) {
			this.maxValue.clearError();
			this.maxValue.setError(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_MAX_VALUE_MISSING_ERROR));
		} else if(maxValueStatus == com.wiris.quizzes.impl.ui.component.RandomVariableRow.MAX_VALUE_SMALLER_ERROR) {
			this.maxValue.clearError();
			this.maxValue.setError(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_MAX_VALUE_ERROR));
		} else if(maxValueStatus == com.wiris.quizzes.impl.ui.component.RandomVariableRow.NOT_A_NUMBER_ERROR || !this.maxValue.isValid()) {
			this.maxValue.clearError();
			this.maxValue.setError(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_NOT_INTEGER_ERROR));
		} else {
			this.maxValue.clearError();
			this.maxValue.setStatus(maxValueStatus);
		}
	}
	,getMinValue: function() {
		return this.minValue.getValue();
	}
	,getMaxValue: function() {
		return this.maxValue.getValue();
	}
	,getVariableName: function() {
		return this.variableName.getValue();
	}
	,actionPerformed: function(e) {
		this.performAction(e.getAction());
	}
	,maxValue: null
	,minValue: null
	,variableName: null
	,__class__: com.wiris.quizzes.impl.ui.component.RandomVariableRow
});
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.RandomVariablesComponent"] = function(controller) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.setId("randomVariablesComponent");
	this.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	var titlePanel = new com.wiris.util.ui.component.BorderPanel(false);
	titlePanel.getStyle().setMargin(10,0,0,0);
	var leftTitlePanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.title = com.wiris.util.ui.component.Label.newImportantWithText(this.t(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.RANDOM_VARIABLES_COMPONENT_TITLE) + " - " + this.t(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.RANDOM_VARIABLES_COMPONENT_TITLE_BASIC_MODE));
	leftTitlePanel.addComponent(this.title);
	var helpButton = com.wiris.util.ui.component.HyperlinkButton.newWithIcon(this.t(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.QUIZZES_STUDIO_RANDOM_VARIABLES_HELP_BUTTON),new com.wiris.util.ui.MaterialIcon("help"),com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().buildUrl(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.QUIZZES_STUDIO_SIMPLE_RANDOM_VARIABLES_HELP_URL),new com.wiris.util.ui.Action("help",null),controller);
	helpButton.addClass(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.CLASS_RANDOM_VARIABLES_HELP_BUTTON).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON).addClass(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.CLASS_RANDOM_VARIABLES_BUTTON).setId("quizzesStudioHelpButton");
	leftTitlePanel.addComponent(helpButton);
	titlePanel.addComponent(leftTitlePanel,com.wiris.util.ui.component.BorderPanel.POSITION_WEST);
	this.advancedRandomVariables = com.wiris.util.ui.component.Button.newWithTextAndIcon(this.t(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ADVANCED_RANDOM_VARIABLES_COMPONENT_BUTTON_TEXT),com.wiris.util.ui.ImageIcon.newFromFile("calcme.png"),new com.wiris.util.ui.Action("showActivity",com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VARIABLES_FUNCTIONS_ID),controller);
	this.advancedRandomVariables.addClass(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.CLASS_CALCME_BUTTON).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON).addClass(com.wiris.util.ui.component.Button.CLASS_BUTTON_OUTLINED).setId("variableOptionsButton");
	titlePanel.addComponent(this.advancedRandomVariables,com.wiris.util.ui.component.BorderPanel.POSITION_EAST);
	this.addComponent(titlePanel);
	this.description = com.wiris.util.ui.component.Label.newWithText(this.t(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.DESCRIPTION_TEXT));
	this.description.getStyle().setMargin(10,0,10,0);
	this.addComponent(this.description);
	this.randomVariablesPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addComponent(this.randomVariablesPanel);
	this.addNewButton = com.wiris.util.ui.component.Button.newWithText(this.t(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ADD_NEW_BUTTON_TEXT),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ACTION_ADD_NEW_RANDOM_VARIABLE,com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ACTION_ADD_NEW_RANDOM_VARIABLE),this);
	this.addNewButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON).setId("addNewSimpleRandomVariableButton");
	this.addComponent(this.addNewButton);
	this.randomVariables = new Array();
	this.controller = controller;
	this.addActionListener(controller);
};
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","RandomVariablesComponent"];
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	updateRowIds: function() {
		var _g1 = 0, _g = this.randomVariables.length;
		while(_g1 < _g) {
			var i = _g1++;
			this.randomVariables[i].setIds(i + "");
		}
	}
	,t: function(key) {
		return com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(key);
	}
	,hasRandomVariableRows: function() {
		return this.randomVariablesPanel.getChildren().length > 0;
	}
	,isMaxValueValid: function(minValue,maxValue) {
		if(maxValue == "") return com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.MISSING_VALUE_ERROR;
		if(!com.wiris.system.TypeTools.isInteger(maxValue)) return com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.NOT_A_NUMBER_ERROR;
		if(com.wiris.system.TypeTools.isInteger(maxValue) && com.wiris.system.TypeTools.isInteger(minValue) && Std.parseInt(maxValue) >= Std.parseInt(minValue) || com.wiris.system.TypeTools.isInteger(maxValue) && !com.wiris.system.TypeTools.isInteger(minValue)) return com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.STATUS_INDETERMINATE; else return com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.MAX_VALUE_SMALLER_ERROR;
	}
	,isMinValueValid: function(minValue) {
		if(com.wiris.system.TypeTools.isInteger(minValue)) return com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.STATUS_INDETERMINATE; else if(minValue == "") return com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.MISSING_VALUE_ERROR; else return com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.NOT_A_NUMBER_ERROR;
	}
	,isVariableNameValid: function(name) {
		if(name == "") return com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.STATUS_INDETERMINATE;
		if(name.charAt(0) >= "A" && name.charAt(0) <= "Z" || name.charAt(0) >= "a" && name.charAt(0) <= "z") {
			var m = new EReg("[^A-Za-z0-9_]","");
			if(!m.match(name)) return com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.STATUS_INDETERMINATE;
		}
		return com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.INVALID_NAME_ERROR;
	}
	,areParametersValid: function(name,minValue,maxValue) {
		return this.isVariableNameValid(name) == com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.STATUS_INDETERMINATE && this.isMinValueValid(minValue) == com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.STATUS_INDETERMINATE && this.isMaxValueValid(minValue,maxValue) == com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.STATUS_INDETERMINATE;
	}
	,getRandomVariablesCommand: function() {
		var sb = new StringBuf();
		var _g = 0, _g1 = this.randomVariables;
		while(_g < _g1.length) {
			var row = _g1[_g];
			++_g;
			var name = row.getVariableName();
			var minValue = row.getMinValue();
			var maxValue = row.getMaxValue();
			if(!this.areParametersValid(name,minValue,maxValue)) sb.b += Std.string("# Invalid variable ");
			sb.b += Std.string(name + " = random(" + minValue + ", " + maxValue + ");\n");
		}
		return sb.b;
	}
	,fireContentChangedAction: function() {
		var action = new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ACTION_RANDOM_VARIABLES_CHANGED,com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ACTION_RANDOM_VARIABLES_CHANGED);
		action.setParameter(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ACTION_PARAMETER_RANDOM_VARIABLES_CONTENT,this.getRandomVariablesCommand());
		this.performAction(action);
	}
	,isNameDuplicated: function(variableName,variablesList) {
		var j = 0;
		var _g1 = 0, _g = variablesList.length;
		while(_g1 < _g) {
			var i = _g1++;
			if(variablesList[i].getVariableName() == variableName && !(variableName == "")) {
				j++;
				if(j > 1) return true;
			}
		}
		return false;
	}
	,updateVisibilityRow: function(row) {
		row.setStatus(this.isVariableNameValid(row.getVariableName()),this.isMinValueValid(row.getMinValue()),this.isMaxValueValid(row.getMinValue(),row.getMaxValue()));
		var _g1 = 0, _g = this.randomVariables.length;
		while(_g1 < _g) {
			var i = _g1++;
			if(this.randomVariables[i].getVariableName() == "" && this.randomVariables[i].getMinValue() == "" && this.randomVariables[i].getMaxValue() == "") this.randomVariables[i].setStatus(com.wiris.util.ui.component.InputComponent.STATUS_INDETERMINATE,com.wiris.util.ui.component.InputComponent.STATUS_INDETERMINATE,com.wiris.util.ui.component.InputComponent.STATUS_INDETERMINATE); else if(this.isNameDuplicated(this.randomVariables[i].getVariableName(),this.randomVariables)) this.randomVariables[i].setNameStatus(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.DUPLICATE_NAME_ERROR); else this.randomVariables[i].setNameStatus(this.isVariableNameValid(this.randomVariables[i].getVariableName()));
		}
	}
	,actionPerformed: function(e) {
		var actionId = e.getAction().getId();
		if(actionId == com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ACTION_ADD_NEW_RANDOM_VARIABLE) {
			var row = new com.wiris.quizzes.impl.ui.component.RandomVariableRow();
			row.addActionListener(this);
			row.setIds(this.randomVariables.length + "");
			this.randomVariablesPanel.addComponent(row);
			this.randomVariables.push(row);
			if(this.randomVariables.length >= com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.MAX_RANDOM_VARIABLES) this.addNewButton.setVisible(false);
		} else if(actionId == com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ACTION_REMOVE_RANDOM_VARIABLE) {
			var row = e.getSource();
			var index = com.wiris.util.type.Arrays.indexOfElement(this.randomVariables,row);
			this.randomVariablesPanel.removeComponent(index);
			HxOverrides.remove(this.randomVariables,row);
			if(this.randomVariables.length < com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.MAX_RANDOM_VARIABLES) this.addNewButton.setVisible(true);
			var _g1 = 0, _g = this.randomVariables.length;
			while(_g1 < _g) {
				var i = _g1++;
				if(this.randomVariables[i].getVariableName() == "" && this.randomVariables[i].getMinValue() == "" && this.randomVariables[i].getMaxValue() == "") this.randomVariables[i].setStatus(com.wiris.util.ui.component.InputComponent.STATUS_INDETERMINATE,com.wiris.util.ui.component.InputComponent.STATUS_INDETERMINATE,com.wiris.util.ui.component.InputComponent.STATUS_INDETERMINATE); else if(this.isNameDuplicated(this.randomVariables[i].getVariableName(),this.randomVariables)) this.randomVariables[i].setNameStatus(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.DUPLICATE_NAME_ERROR); else this.randomVariables[i].setNameStatus(this.isVariableNameValid(this.randomVariables[i].getVariableName()));
			}
			this.updateRowIds();
		} else if(actionId == com.wiris.quizzes.impl.ui.component.RandomVariableRow.ACTION_RANDOM_VARIABLE_FIELD_CHANGED) {
			var row = e.getSource();
			this.updateVisibilityRow(row);
		}
		this.fireContentChangedAction();
	}
	,isAlgorithmSimpleRandomVariables: function(algorithm) {
		var result = new Array();
		var randomVar;
		var reducedAlgorithm;
		if(algorithm != null) {
			if(algorithm.indexOf("</comment>") != -1 || algorithm.indexOf("</image>") != -1) return null;
			var algorithmCopy = algorithm;
			var command = new EReg("<command><input><math xmlns=\"http://www.w3.org/1998/Math/MathML\"/></input></command>","g");
			algorithmCopy = command.replace(algorithmCopy,"");
			if(algorithmCopy.indexOf("</command>") != -1) return null;
			var i;
			var k = 0;
			var m1 = new EReg("^\\s*([A-Za-z0-9_]+)\\s*(=)\\s*(random\\(\\s*(\\+*|\\-*|\\s*)([0-9]+)\\s*,\\s*(\\+*|\\-*|\\s*)([0-9]+)\\s*\\)\\s*)\\s*$|^\\s*([A-Za-z0-9_]+)\\s*(=)\\s*(random\\(\\s*(\\+*|\\-*|\\s*)([0-9]+)\\s*,\\s*(\\+*|\\-*|\\s*)([0-9]+)\\s*\\)\\s*\\;)\\s*$","");
			var m2 = new EReg("/#.*?#/","gs");
			var m3 = new EReg("(#.*?\\n)|(#.*$)","g");
			var m4 = new EReg("^\\s*$","g");
			var m5 = new EReg("<algorithm><!\\[CDATA\\[","g");
			var m6 = new EReg("((# Invalid variable)\\s*(.+)\\s*(=)\\s*(random\\(\\s*(.+)\\s*)\\s*)","g");
			var m7 = new EReg("\\s","g");
			var algauxiliar = new Array();
			var algauxiliar2 = new Array();
			if(algorithm.indexOf("<algorithm>") != algorithm.lastIndexOf("<algorithm>")) return null;
			if(m5.match(algorithm)) reducedAlgorithm = algorithm.substring(algorithm.indexOf("<algorithm>") + 20,algorithm.indexOf("</algorithm>") - 3); else reducedAlgorithm = algorithm.substring(algorithm.indexOf("<algorithm>") + 11,algorithm.indexOf("</algorithm>"));
			if(reducedAlgorithm.indexOf("/#") != -1) reducedAlgorithm = m2.replace(reducedAlgorithm,"\n");
			var _g1 = 0, _g = reducedAlgorithm.split("\n").length;
			while(_g1 < _g) {
				var i1 = _g1++;
				if(!m4.match(reducedAlgorithm.split("\n")[i1]) && reducedAlgorithm.split("\n")[i1].length > 0) algauxiliar.push(reducedAlgorithm.split("\n")[i1]);
			}
			var algauxiliar3 = new Array();
			var _g1 = 0, _g = algauxiliar.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				if(m3.match(algauxiliar[i1]) && !m6.match(algauxiliar[i1])) {
					if(algauxiliar[i1].indexOf("#") != 0) algauxiliar3.push(m3.replace(algauxiliar[i1],""));
				} else algauxiliar3.push(algauxiliar[i1]);
			}
			var _g1 = 0, _g = algauxiliar3.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var _g3 = 0, _g2 = algauxiliar3[i1].split(";").length;
				while(_g3 < _g2) {
					var j = _g3++;
					if(algauxiliar3[i1].split(";").length > 0 && !m4.match(algauxiliar3[i1].split(";")[j])) {
						k++;
						if(!m1.match(algauxiliar3[i1].split(";")[j]) && !m6.match(algauxiliar3[i1].split(";")[j]) || k > com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.MAX_RANDOM_VARIABLES) return null;
						algauxiliar2.push(m7.replace(algauxiliar3[i1].split(";")[j],""));
					}
				}
			}
			var _g1 = 0, _g = algauxiliar2.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				if(algauxiliar2[i1].indexOf("#Invalidvariable") != -1) {
					randomVar = [algauxiliar2[i1].substring(16,algauxiliar2[i1].indexOf("=random")),algauxiliar2[i1].substring(algauxiliar2[i1].indexOf("=random(") + 8,algauxiliar2[i1].indexOf(",")),algauxiliar2[i1].substring(algauxiliar2[i1].indexOf(",") + 1,algauxiliar2[i1].indexOf(")"))];
					result.push(randomVar);
				} else {
					randomVar = [algauxiliar2[i1].substring(0,algauxiliar2[i1].indexOf("=")),algauxiliar2[i1].substring(algauxiliar2[i1].indexOf("(") + 1,algauxiliar2[i1].indexOf(",")),algauxiliar2[i1].substring(algauxiliar2[i1].indexOf(",") + 1,algauxiliar2[i1].indexOf(")"))];
					result.push(randomVar);
				}
			}
			return result;
		}
		return null;
	}
	,updateVisibility: function(context) {
		if(!this.controller.getContext().isOptShowVariablesDefinition()) {
			this.setVisible(false);
			return;
		}
		var algorithm = context.getQuestion().getAlgorithm();
		var syntaxName = context.getSlot().getSyntax().getName();
		if(syntaxName == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC) this.setVisible(false); else {
			this.setVisible(true);
			if(syntaxName == com.wiris.quizzes.api.assertion.SyntaxName.STRING) {
				this.randomVariablesPanel.setVisible(false);
				this.addNewButton.setVisible(false);
				this.title.setText(this.t(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.RANDOM_VARIABLES_COMPONENT_TITLE));
				this.description.setText(this.t(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.STRING_SYNTAX_TEXT));
				this.advancedRandomVariables.setText(this.t(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ADVANCED_RANDOM_VARIABLES_COMPONENT_BUTTON_TEXT_STRING_SYNTAX));
			} else {
				if(this.isAlgorithmSimpleRandomVariables(algorithm) != null && algorithm != null) {
					this.title.setText(this.t(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.RANDOM_VARIABLES_COMPONENT_TITLE) + " - " + this.t(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.RANDOM_VARIABLES_COMPONENT_TITLE_BASIC_MODE));
					this.randomVariablesPanel.setVisible(true);
					this.addNewButton.setVisible(true);
					this.description.setText(this.t(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.SIMPLE_ALGORITHM_TEXT));
					this.randomVariablesPanel.removeAllComponents();
					this.randomVariables = new Array();
					var allRandomVariablesData = this.isAlgorithmSimpleRandomVariables(algorithm);
					var _g1 = 0, _g = allRandomVariablesData.length;
					while(_g1 < _g) {
						var i = _g1++;
						var randomVariableData = allRandomVariablesData[i];
						var row = com.wiris.quizzes.impl.ui.component.RandomVariableRow.newWithData(randomVariableData[0],randomVariableData[1],randomVariableData[2]);
						row.addActionListener(this);
						this.randomVariables.push(row);
						this.randomVariablesPanel.addComponent(row);
						this.updateVisibilityRow(row);
						this.fireContentChangedAction();
					}
					this.updateRowIds();
				} else if(algorithm == null) {
					this.randomVariablesPanel.setVisible(true);
					this.addNewButton.setVisible(true);
					if(this.randomVariables.length > 0) {
						this.randomVariables = new Array();
						this.randomVariablesPanel.removeAllComponents();
					}
					this.description.setText(this.t(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.SIMPLE_ALGORITHM_TEXT));
					this.title.setText(this.t(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.RANDOM_VARIABLES_COMPONENT_TITLE) + " - " + this.t(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.RANDOM_VARIABLES_COMPONENT_TITLE_BASIC_MODE));
				} else {
					this.randomVariablesPanel.setVisible(false);
					this.addNewButton.setVisible(false);
					this.description.setText(this.t(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.COMPLEX_ALGORITHM_TEXT));
					this.title.setText(this.t(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.RANDOM_VARIABLES_COMPONENT_TITLE));
				}
				this.advancedRandomVariables.setText(this.t(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ADVANCED_RANDOM_VARIABLES_COMPONENT_BUTTON_TEXT));
			}
		}
	}
	,addNewButton: null
	,randomVariables: null
	,advancedRandomVariables: null
	,description: null
	,randomVariablesPanel: null
	,title: null
	,controller: null
	,__class__: com.wiris.quizzes.impl.ui.component.RandomVariablesComponent
});
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent"] = function(controller) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_FULL_SIZE_PANEL);
	this.controller = controller;
	this.label = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL));
	this.generalLabel = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_GENERAL));
	this.factorsLabel = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_FACTORS));
	this.fractionsLabel = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_FRACTIONS));
	this.rootsLabel = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_ROOTS));
	this.simplifiedCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_SIMPLIFIED),controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_HELPER_TEXT_SIMPLIFIED),com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_SIMPLIFIED,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_SIMPLIFIED,null),controller);
	this.simplifiedCheckBox.setId("validationOptionsSimplified");
	this.expandedCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_EXPANDED),controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_HELPER_TEXT_EXPANDED),com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_EXPANDED,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_EXPANDED,null),controller);
	this.expandedCheckBox.setId("validationOptionsExpanded");
	this.factorizedCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_FACTORIZED),controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_HELPER_TEXT_FACTORIZED),com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_FACTORIZED,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_FACTORIZED,null),controller);
	this.factorizedCheckBox.setId("validationOptionsFactorized");
	this.commonFactorCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_COMMON_FACTOR),controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_HELPER_TEXT_COMMON_FACTOR),com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_COMMON_FACTOR,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_COMMON_FACTOR,null),controller);
	this.commonFactorCheckBox.setId("validationOptionsCommonFactor");
	this.commonDenominatorCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_COMMON_DENOMINATOR),controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_HELPER_TEXT_COMMON_DENOMINATOR),com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_COMMON_DENOMINATOR,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_COMMON_DENOMINATOR,null),controller);
	this.commonDenominatorCheckBox.setId("validationOptionsCommonDenominator");
	this.rationalizedCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_RATIONALIZED),controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_HELPER_TEXT_RATIONALIZED),com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_RATIONALIZED,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_RATIONALIZED,null),controller);
	this.rationalizedCheckBox.setId("validationOptionsRationalized");
	this.minimalRadicandsCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_MINIMAL_RADICANDS),controller.t(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_HELPER_TEXT_MINIMAL_RADICANDS),com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_MINIMAL_RADICANDS,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_MINIMAL_RADICANDS,null),controller);
	this.minimalRadicandsCheckBox.setId("validationOptionsMinimalRadicands");
	var content = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	content.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD);
	content.addComponent(this.generalLabel);
	content.addComponent(this.simplifiedCheckBox);
	content.addComponent(this.expandedCheckBox);
	content.addComponent(this.factorsLabel);
	content.addComponent(this.factorizedCheckBox);
	content.addComponent(this.commonFactorCheckBox);
	content.addComponent(this.fractionsLabel);
	content.addComponent(this.commonDenominatorCheckBox);
	content.addComponent(this.rootsLabel);
	content.addComponent(this.rationalizedCheckBox);
	content.addComponent(this.minimalRadicandsCheckBox);
	this.addComponent(this.label);
	this.addComponent(content);
};
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","SimplificationValidationComponent"];
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	showAllValidationAssertions: function() {
		this.setVisible(true);
		this.generalLabel.setVisible(true);
		this.simplifiedCheckBox.setVisible(true);
		this.expandedCheckBox.setVisible(true);
		this.factorsLabel.setVisible(true);
		this.factorizedCheckBox.setVisible(true);
		this.commonFactorCheckBox.setVisible(true);
		this.fractionsLabel.setVisible(true);
		this.commonDenominatorCheckBox.setVisible(true);
		this.rootsLabel.setVisible(true);
		this.rationalizedCheckBox.setVisible(true);
		this.minimalRadicandsCheckBox.setVisible(true);
	}
	,showFeaturedValidationAssertions: function(featuredAssertions) {
		var simplified = com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.CHECK_SIMPLIFIED);
		var expanded = com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.CHECK_EXPANDED);
		var general = simplified || expanded;
		var factorized = com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.CHECK_FACTORIZED);
		var noCommonFactor = com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.CHECK_NO_COMMON_FACTOR);
		var factors = factorized || noCommonFactor;
		var fractions = com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.CHECK_COMMON_DENOMINATOR);
		var rationalized = com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.CHECK_RATIONALIZED);
		var minimalRadicands = com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.CHECK_MINIMAL_RADICANDS);
		var roots = rationalized || minimalRadicands;
		if(general || factors || fractions || roots) {
			this.generalLabel.setVisible(general);
			this.simplifiedCheckBox.setVisible(simplified);
			this.expandedCheckBox.setVisible(expanded);
			this.factorsLabel.setVisible(factors);
			this.factorizedCheckBox.setVisible(factorized);
			this.commonFactorCheckBox.setVisible(noCommonFactor);
			this.fractionsLabel.setVisible(fractions);
			this.commonDenominatorCheckBox.setVisible(fractions);
			this.rootsLabel.setVisible(roots);
			this.rationalizedCheckBox.setVisible(rationalized);
			this.minimalRadicandsCheckBox.setVisible(minimalRadicands);
		} else this.setVisible(false);
	}
	,setMinimalRadicands: function(selected) {
		this.minimalRadicandsCheckBox.setSelected(selected);
	}
	,setRationalized: function(selected) {
		this.rationalizedCheckBox.setSelected(selected);
	}
	,setCommonDenominator: function(selected) {
		this.commonDenominatorCheckBox.setSelected(selected);
	}
	,setCommonFactor: function(selected) {
		this.commonFactorCheckBox.setSelected(selected);
	}
	,setFactorized: function(selected) {
		this.factorizedCheckBox.setSelected(selected);
	}
	,setExpanded: function(selected) {
		this.expandedCheckBox.setSelected(selected);
	}
	,setSimplified: function(selected) {
		this.simplifiedCheckBox.setSelected(selected);
	}
	,updateVisibility: function() {
		this.setVisible(this.controller.getConfigurationKey("validationOptions/simplification"));
		this.generalLabel.setVisible(this.controller.getConfigurationKey("validationOptions/simplification/simplified") || this.controller.getConfigurationKey("validationOptions/simplification/expanded"));
		this.simplifiedCheckBox.setVisible(this.controller.getConfigurationKey("validationOptions/simplification/simplified"));
		this.expandedCheckBox.setVisible(this.controller.getConfigurationKey("validationOptions/simplification/expanded"));
		this.factorsLabel.setVisible(this.controller.getConfigurationKey("validationOptions/simplification/factorized") || this.controller.getConfigurationKey("validationOptions/simplification/commonFactor"));
		this.factorizedCheckBox.setVisible(this.controller.getConfigurationKey("validationOptions/simplification/factorized"));
		this.commonFactorCheckBox.setVisible(this.controller.getConfigurationKey("validationOptions/simplification/commonFactor"));
		this.fractionsLabel.setVisible(this.controller.getConfigurationKey("validationOptions/simplification/commonDenominator"));
		this.commonDenominatorCheckBox.setVisible(this.controller.getConfigurationKey("validationOptions/simplification/commonDenominator"));
		this.rootsLabel.setVisible(this.controller.getConfigurationKey("validationOptions/simplification/rationalized") || this.controller.getConfigurationKey("validationOptions/simplification/minimalRadicands"));
		this.rationalizedCheckBox.setVisible(this.controller.getConfigurationKey("validationOptions/simplification/rationalized"));
		this.minimalRadicandsCheckBox.setVisible(this.controller.getConfigurationKey("validationOptions/simplification/minimalRadicands"));
	}
	,controller: null
	,minimalRadicandsCheckBox: null
	,rationalizedCheckBox: null
	,commonDenominatorCheckBox: null
	,commonFactorCheckBox: null
	,factorizedCheckBox: null
	,expandedCheckBox: null
	,simplifiedCheckBox: null
	,rootsLabel: null
	,fractionsLabel: null
	,factorsLabel: null
	,generalLabel: null
	,label: null
	,__class__: com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent
});
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent"] = function(controller) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_FULL_SIZE_PANEL);
	this.controller = controller;
	this.label = com.wiris.util.ui.component.Label.newImportantWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL));
	this.literallyEqualListsSelectionController = com.wiris.util.ui.controller.SelectionController.newMutuallyExclusive(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID);
	this.mathematicallyEqualListsselectionController = com.wiris.util.ui.controller.SelectionController.newMutuallyExclusive(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID);
	var literallyEqualPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	literallyEqualPanel.setIndentationLevel(2);
	this.literallyEqualOrderAndRepetitionMattersRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_ORDER_AND_REPETITION_MATTERS),this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_ORDER_AND_REPETITION_MATTERS),com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_ORDER_AND_REPETITION_MATTERS,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_ORDER_AND_REPETITION_MATTERS,null),this.controller);
	this.literallyEqualOrderAndRepetitionMattersRadioButton.setId("validationOptionsLiterallyEqualOrderAndRepetitionMatters");
	this.literallyEqualListsSelectionController.addSelectable(this.literallyEqualOrderAndRepetitionMattersRadioButton,false);
	literallyEqualPanel.addComponent(this.literallyEqualOrderAndRepetitionMattersRadioButton);
	this.literallyEqualOrderAndRepetitionMattersRadioButton.addActionListener(this);
	this.literallyEqualRepetitionMattersRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_REPETITION_MATTERS),this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_REPETITION_MATTERS),com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_REPETITION_MATTERS,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_REPETITION_MATTERS,null),this.controller);
	this.literallyEqualRepetitionMattersRadioButton.setId("validationOptionsLiterallyEqualRepetitionMatters");
	this.literallyEqualListsSelectionController.addSelectable(this.literallyEqualRepetitionMattersRadioButton,false);
	literallyEqualPanel.addComponent(this.literallyEqualRepetitionMattersRadioButton);
	this.literallyEqualRepetitionMattersRadioButton.addActionListener(this);
	this.literallyEqualUnrestrictedListsRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_UNRESTRICTED_LISTS),this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_UNRESTRICTED_LISTS),com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_UNRESTRICTED_LISTS,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_UNRESTRICTED_LISTS,null),this.controller);
	this.literallyEqualUnrestrictedListsRadioButton.setId("validationOptionsLiterallyEqualUnrestrictedLists");
	this.literallyEqualListsSelectionController.addSelectable(this.literallyEqualUnrestrictedListsRadioButton,true);
	literallyEqualPanel.addComponent(this.literallyEqualUnrestrictedListsRadioButton);
	this.literallyEqualUnrestrictedListsRadioButton.addActionListener(this);
	this.matchLetterCaseCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_MATCH_LETTER_CASE),this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_MATCH_LETTER_CASE),com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_MATCH_LETTER_CASE,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_MATCH_LETTER_CASE,null),this.controller);
	this.matchLetterCaseCheckBox.setId("validationOptionsLiterallyEqualMatchLetterCase");
	literallyEqualPanel.addComponent(this.matchLetterCaseCheckBox);
	this.matchLetterCaseCheckBox.addActionListener(this);
	this.matchLetterCaseCheckBox.setVisible(false);
	this.matchSpacesCheckBox = com.wiris.util.ui.component.CheckBox.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_MATCH_SPACES),this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_MATCH_SPACES),com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_MATCH_SPACES,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_MATCH_SPACES,null),this.controller);
	this.matchSpacesCheckBox.setId("validationOptionsLiterallyEqualMatchSpaces");
	literallyEqualPanel.addComponent(this.matchSpacesCheckBox);
	this.matchSpacesCheckBox.addActionListener(this);
	this.matchSpacesCheckBox.setVisible(false);
	var mathematicallyEqualPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	mathematicallyEqualPanel.setIndentationLevel(2);
	this.mathematicallyEqualOrderAndRepetitionMattersRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_ORDER_AND_REPETITION_MATTERS),this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_ORDER_AND_REPETITION_MATTERS),com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_ORDER_AND_REPETITION_MATTERS,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_ORDER_AND_REPETITION_MATTERS,null),this.controller);
	this.mathematicallyEqualOrderAndRepetitionMattersRadioButton.setId("validationOptionsMathematicallyEqualOrderAndRepetitionMatters");
	this.mathematicallyEqualListsselectionController.addSelectable(this.mathematicallyEqualOrderAndRepetitionMattersRadioButton,false);
	mathematicallyEqualPanel.addComponent(this.mathematicallyEqualOrderAndRepetitionMattersRadioButton);
	this.mathematicallyEqualOrderAndRepetitionMattersRadioButton.addActionListener(this);
	this.mathematicallyEqualRepetitionMattersRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_REPETITION_MATTERS),this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_REPETITION_MATTERS),com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_REPETITION_MATTERS,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_REPETITION_MATTERS,null),this.controller);
	this.mathematicallyEqualRepetitionMattersRadioButton.setId("validationOptionsMathematicallyEqualRepetitionMatters");
	this.mathematicallyEqualListsselectionController.addSelectable(this.mathematicallyEqualRepetitionMattersRadioButton,false);
	mathematicallyEqualPanel.addComponent(this.mathematicallyEqualRepetitionMattersRadioButton);
	this.mathematicallyEqualRepetitionMattersRadioButton.addActionListener(this);
	this.mathematicallyEqualUnrestrictedListsRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_UNRESTRICTED_LISTS),this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_UNRESTRICTED_LISTS),com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_UNRESTRICTED_LISTS,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_UNRESTRICTED_LISTS,null),this.controller);
	this.mathematicallyEqualUnrestrictedListsRadioButton.setId("validationOptionsMathematicallyEqualUnrestrictedLists");
	this.mathematicallyEqualListsselectionController.addSelectable(this.mathematicallyEqualUnrestrictedListsRadioButton,true);
	mathematicallyEqualPanel.addComponent(this.mathematicallyEqualUnrestrictedListsRadioButton);
	this.mathematicallyEqualUnrestrictedListsRadioButton.addActionListener(this);
	var customGradingFunctionNamePanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.functionNameDropdown = new com.wiris.util.ui.component.Dropdown();
	this.functionNameDropdown.setId("validationOptionsCustomGradingFunctionFunctionNameDropdown");
	this.functionNameDropdown.addValue(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_FUNCTION_NAME,this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_FUNCTION_NAME_DROPDOWN));
	this.functionNameDropdown.setChangeValueAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_FUNCTION_NAME,null));
	this.functionNameDropdown.addActionListener(this.controller);
	this.functionNameDropdown.setVisible(false);
	this.functionNameTextField = com.wiris.util.ui.component.TextField.newWithLabel(this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_FUNCTION_NAME_DROPDOWN));
	this.functionNameTextField.setId("validationOptionsCustomGradingFunctionFunctionNameTextField");
	this.functionNameTextField.setChangeAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_FUNCTION_NAME,null));
	this.functionNameTextField.addActionListener(this.controller);
	var defineFunctionButton = com.wiris.util.ui.component.Button.newWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_DEFINE_FUNCTION_BUTTON),new com.wiris.util.ui.Action("showActivity",com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VARIABLES_FUNCTIONS_ID),this.controller);
	defineFunctionButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
	var defineFunctionPanel = com.wiris.util.ui.component.FlowPanel.newWithChild(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT,defineFunctionButton);
	defineFunctionPanel.getStyle().setMargin(0,4,0,8);
	customGradingFunctionNamePanel.addComponent(this.functionNameDropdown);
	customGradingFunctionNamePanel.addComponent(this.functionNameTextField);
	customGradingFunctionNamePanel.addComponent(defineFunctionPanel);
	var functionArgumentsModeLabel = com.wiris.util.ui.component.Label.newTinyWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_ARGUMENTS_HELPER_TEXT));
	functionArgumentsModeLabel.getStyle().setMargin(8,0,0,0);
	this.functionArgumentsModeDropdown = new com.wiris.util.ui.component.Dropdown();
	this.functionArgumentsModeDropdown.setId("validationOptionsCustomGradingFunctionArgumentsUnevaluated");
	this.functionArgumentsModeDropdown.addValue(com.wiris.quizzes.impl.Assertion.PARAM_VALUE_FUNCTION_ARGUMENT_EVALUATED,this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_ARGUMENTS_EVALUATED));
	this.functionArgumentsModeDropdown.addValue(com.wiris.quizzes.impl.Assertion.PARAM_VALUE_FUNCTION_ARGUMENT_UNEVALUATED,this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_ARGUMENTS_UNEVALUATED));
	this.functionArgumentsModeDropdown.addValue(com.wiris.quizzes.impl.Assertion.PARAM_VALUE_FUNCTION_ARGUMENT_STRING,this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_ARGUMENTS_STRING));
	this.functionArgumentsModeDropdown.setChangeValueAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_ARGUMENTS_UNEVALUATED,null));
	this.functionArgumentsModeDropdown.addActionListener(this.controller);
	this.functionArgumentsModeDropdown.getStyle().setMargin(8,0,0,0);
	this.functionArgumentsModeDropdown.getStyle().setWidth(190);
	var keepArgumentsUnevaluatedPanel = com.wiris.util.ui.component.FlowPanel.newWithChild(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM,this.functionArgumentsModeDropdown);
	var customGradingFunctionPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	customGradingFunctionPanel.setIndentationLevel(2);
	customGradingFunctionPanel.addComponent(customGradingFunctionNamePanel);
	customGradingFunctionPanel.addComponent(functionArgumentsModeLabel);
	customGradingFunctionPanel.addComponent(keepArgumentsUnevaluatedPanel);
	var radioGroup = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	radioGroup.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD);
	this.selectionController = com.wiris.util.ui.controller.SelectionController.newMutuallyExclusive(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID);
	this.literallyEqualRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_LITERALLY_EQUAL),this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_LITERALLY_EQUAL),com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_LITERALLY_EQUAL,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_LITERALLY_EQUAL,null),this.controller);
	this.literallyEqualRadioButton.setId("validationOptionsLiterallyEqual");
	this.selectionController.addSelectable(this.literallyEqualRadioButton,false);
	this.literallyEqualRadioButton.addActionListener(this);
	this.mathematicallyEqualRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_MATHEMATICALLY_EQUAL),this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_MATHEMATICALLY_EQUAL),com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_MATHEMATICALLY_EQUAL,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_MATHEMATICALLY_EQUAL,null),this.controller);
	this.mathematicallyEqualRadioButton.setId("validationOptionsMathematicallyEqual");
	this.selectionController.addSelectable(this.mathematicallyEqualRadioButton,true);
	this.mathematicallyEqualRadioButton.addActionListener(this);
	this.equivalentEquationsRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_EQUIVALENT_EQUATIONS),this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_EQUIVALENT_EQUATIONS),com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_EQUIVALENT_EQUATIONS,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_EQUIVALENT_EQUATIONS,null),this.controller);
	this.equivalentEquationsRadioButton.setId("validationOptionsEquivalentEquations");
	this.selectionController.addSelectable(this.equivalentEquationsRadioButton,false);
	this.anyAnswerRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_ANY_ANSWER),this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_ANY_ANSWER),com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_ANY_ANSWER,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_ANY_ANSWER,null),this.controller);
	this.anyAnswerRadioButton.setId("validationOptionsAnyAnswer");
	this.selectionController.addSelectable(this.anyAnswerRadioButton,false);
	this.customGradingFunctionRadioButton = com.wiris.util.ui.component.RadioButton.newWithHelperText(this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_CUSTOM_GRADING_FUNCTION),this.controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_CUSTOM_GRADING_FUNCTION),com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_CUSTOM_GRADING_FUNCTION,new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_CUSTOM_GRADING_FUNCTION,null),this.controller);
	this.customGradingFunctionRadioButton.setId("validationOptionsCustomGradingFunction");
	this.selectionController.addSelectable(this.customGradingFunctionRadioButton,false);
	this.customGradingFunctionRadioButton.addActionListener(this);
	this.literallyEqualExpansionController = new com.wiris.util.ui.controller.ExpansionController(this,literallyEqualPanel,false);
	this.mathematicallyEqualExpansionController = new com.wiris.util.ui.controller.ExpansionController(this,mathematicallyEqualPanel,true);
	this.customGradingFunctionExpansionController = new com.wiris.util.ui.controller.ExpansionController(this,customGradingFunctionPanel,false);
	this.literallyEqualContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.mathematicallyEqualContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.customGradingFunctionContainer = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.literallyEqualContainer.addComponent(this.literallyEqualRadioButton);
	this.literallyEqualContainer.addComponent(literallyEqualPanel);
	this.mathematicallyEqualContainer.addComponent(this.mathematicallyEqualRadioButton);
	this.mathematicallyEqualContainer.addComponent(mathematicallyEqualPanel);
	this.customGradingFunctionContainer.addComponent(this.customGradingFunctionRadioButton);
	this.customGradingFunctionContainer.addComponent(customGradingFunctionPanel);
	radioGroup.addComponent(this.literallyEqualContainer);
	radioGroup.addComponent(this.mathematicallyEqualContainer);
	radioGroup.addComponent(this.equivalentEquationsRadioButton);
	radioGroup.addComponent(this.anyAnswerRadioButton);
	radioGroup.addComponent(this.customGradingFunctionContainer);
	this.addComponent(this.label);
	this.addComponent(radioGroup);
};
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","StudentAnswerComparisonComponent"];
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	showAllValidationAssertions: function() {
		this.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison"));
		this.literallyEqualRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/literallyEqual"));
		this.mathematicallyEqualRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/mathematicallyEqual"));
		this.equivalentEquationsRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/equivalentEquations"));
		this.anyAnswerRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/anyAnswer"));
		this.customGradingFunctionRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/customGradingFunction"));
		this.literallyEqualContainer.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/literallyEqual"));
		this.mathematicallyEqualContainer.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/mathematicallyEqual"));
		this.customGradingFunctionContainer.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/customGradingFunction"));
		this.mathematicallyEqualOrderAndRepetitionMattersRadioButton.setVisible(true);
		this.mathematicallyEqualRepetitionMattersRadioButton.setVisible(true);
		this.mathematicallyEqualUnrestrictedListsRadioButton.setVisible(true);
	}
	,showFeaturedValidationAssertions: function(context) {
		var featuredAssertions = context.getFeaturedAssertions();
		var literal = com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.EQUIVALENT_LITERAL);
		var symbolic = com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.EQUIVALENT_SYMBOLIC);
		var equations = com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.EQUIVALENT_EQUATIONS);
		var all = com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.EQUIVALENT_ALL);
		var funct = com.wiris.system.ArrayEx.contains(featuredAssertions,com.wiris.quizzes.impl.Assertion.EQUIVALENT_FUNCTION);
		var list = this.showListFeaturesOptions(context);
		var isVisible = literal || symbolic || equations || all || funct;
		this.setVisible(isVisible);
		this.literallyEqualRadioButton.setVisible(this.literallyEqualRadioButton.isVisible() && literal);
		this.mathematicallyEqualRadioButton.setVisible(this.mathematicallyEqualRadioButton.isVisible() && symbolic);
		this.equivalentEquationsRadioButton.setVisible(this.equivalentEquationsRadioButton.isVisible() && equations);
		this.anyAnswerRadioButton.setVisible(this.anyAnswerRadioButton.isVisible() && all);
		this.customGradingFunctionRadioButton.setVisible(this.customGradingFunctionRadioButton.isVisible() && funct);
		this.literallyEqualContainer.setVisible(this.literallyEqualContainer.isVisible() && literal);
		this.mathematicallyEqualContainer.setVisible(this.mathematicallyEqualContainer.isVisible() && symbolic);
		this.customGradingFunctionContainer.setVisible(this.customGradingFunctionContainer.isVisible() && funct);
		this.mathematicallyEqualOrderAndRepetitionMattersRadioButton.setVisible(this.mathematicallyEqualOrderAndRepetitionMattersRadioButton.isVisible() && list);
		this.mathematicallyEqualRepetitionMattersRadioButton.setVisible(this.mathematicallyEqualRepetitionMattersRadioButton.isVisible() && list);
		this.mathematicallyEqualUnrestrictedListsRadioButton.setVisible(this.mathematicallyEqualUnrestrictedListsRadioButton.isVisible() && list);
	}
	,answerContainsListOperator: function(context) {
		var value = context.getAuthorAnswer().getValue();
		var listOperators = context.getSlot().getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.LIST_OPERATORS);
		var listOpsArray = listOperators.split(",");
		var _g = 0;
		while(_g < listOpsArray.length) {
			var op = listOpsArray[_g];
			++_g;
			if(op == "") continue;
			if(value.indexOf("open=\"" + op) != -1 || value.indexOf("<mo>" + op) != -1) return true;
		}
		return false;
	}
	,showListFeaturesOptions: function(context) {
		if(this.answerContainsListOperator(context) || context.getSlot().getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.NO_BRACKETS_LIST) == "true") return true;
		return false;
	}
	,setMatchSpaces: function(selected) {
		this.matchSpacesCheckBox.setSelected(selected);
	}
	,setMatchCase: function(selected) {
		this.matchLetterCaseCheckBox.setSelected(selected);
	}
	,setTextSyntaxVisibility: function() {
		this.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison"));
		this.literallyEqualContainer.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/literallyEqual"));
		this.literallyEqualRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/literallyEqual"));
		this.literallyEqualOrderAndRepetitionMattersRadioButton.setVisible(false);
		this.literallyEqualRepetitionMattersRadioButton.setVisible(false);
		this.literallyEqualUnrestrictedListsRadioButton.setVisible(false);
		this.mathematicallyEqualContainer.setVisible(false);
		this.equivalentEquationsRadioButton.setVisible(false);
		this.anyAnswerRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/anyAnswer"));
		this.customGradingFunctionContainer.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/customGradingFunction"));
		this.customGradingFunctionRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/customGradingFunction"));
		this.matchLetterCaseCheckBox.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/matchLetterCase"));
		this.matchSpacesCheckBox.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/matchSpaces"));
	}
	,setGraphicSyntaxVisibility: function() {
		this.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison"));
	}
	,setEquationSyntaxVisibility: function() {
		this.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison"));
		this.literallyEqualRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/literallyEqual"));
		this.mathematicallyEqualRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/mathematicallyEqual"));
		this.equivalentEquationsRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/equivalentEquations"));
		this.anyAnswerRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/anyAnswer"));
		this.customGradingFunctionRadioButton.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/customGradingFunction"));
		this.literallyEqualContainer.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/literallyEqual"));
		this.mathematicallyEqualContainer.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/mathematicallyEqual"));
		this.customGradingFunctionContainer.setVisible(this.controller.getConfigurationKey("validationOptions/studentAnswerComparison/customGradingFunction"));
		this.literallyEqualOrderAndRepetitionMattersRadioButton.setVisible(true);
		this.literallyEqualRepetitionMattersRadioButton.setVisible(true);
		this.literallyEqualUnrestrictedListsRadioButton.setVisible(true);
		this.mathematicallyEqualOrderAndRepetitionMattersRadioButton.setVisible(true);
		this.mathematicallyEqualRepetitionMattersRadioButton.setVisible(true);
		this.mathematicallyEqualUnrestrictedListsRadioButton.setVisible(true);
		this.matchLetterCaseCheckBox.setVisible(false);
		this.matchSpacesCheckBox.setVisible(false);
	}
	,setArgumentsUnevaluated: function(option) {
		this.functionArgumentsModeDropdown.pickValue(option);
	}
	,setGradingFunctions: function(functions,value) {
		this.functionNameDropdown.removeAllValues();
		if(functions.length > 0 && (com.wiris.system.ArrayEx.contains(functions,value) || value == "")) {
			this.functionNameTextField.setVisible(false);
			this.functionNameDropdown.setVisible(true);
			var _g = 0;
			while(_g < functions.length) {
				var functionName = functions[_g];
				++_g;
				this.functionNameDropdown.addValue(functionName,functionName);
			}
			if(!(value == "")) this.functionNameDropdown.pickValue(value); else {
				this.functionNameDropdown.pickValue(functions[0]);
				this.controller.setGradingFunctionName(functions[0]);
			}
			this.functionNameDropdown.changeState();
		} else {
			this.functionNameDropdown.setVisible(false);
			this.functionNameTextField.setVisible(true);
			this.functionNameTextField.setValue(value);
		}
	}
	,setUnrestrictedLists: function() {
		this.literallyEqualUnrestrictedListsRadioButton.setSelected(true);
		this.mathematicallyEqualUnrestrictedListsRadioButton.setSelected(true);
	}
	,setRepetitionMatters: function() {
		this.literallyEqualRepetitionMattersRadioButton.setSelected(true);
		this.mathematicallyEqualRepetitionMattersRadioButton.setSelected(true);
	}
	,setOrderAndRepetitionMatters: function() {
		this.literallyEqualOrderAndRepetitionMattersRadioButton.setSelected(true);
		this.mathematicallyEqualOrderAndRepetitionMattersRadioButton.setSelected(true);
	}
	,setCustomGradingFunction: function() {
		this.customGradingFunctionRadioButton.setSelected(true);
	}
	,setAnyAnswer: function() {
		this.anyAnswerRadioButton.setSelected(true);
	}
	,setEquivalentEquations: function() {
		this.equivalentEquationsRadioButton.setSelected(true);
	}
	,setMathematicallyEqual: function() {
		this.mathematicallyEqualRadioButton.setSelected(true);
	}
	,setLiterallyEqual: function() {
		this.literallyEqualRadioButton.setSelected(true);
	}
	,actionPerformed: function(e) {
		var action = e.getAction();
		var actionId = action.getId();
		if(actionId == com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_ORDER_AND_REPETITION_MATTERS) {
			var source = e.getSource();
			var value = source.isSelected();
			this.literallyEqualOrderAndRepetitionMattersRadioButton.setSelected(value);
			this.mathematicallyEqualOrderAndRepetitionMattersRadioButton.setSelected(value);
		} else if(actionId == com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_REPETITION_MATTERS) {
			var source = e.getSource();
			var value = source.isSelected();
			this.literallyEqualRepetitionMattersRadioButton.setSelected(value);
			this.mathematicallyEqualRepetitionMattersRadioButton.setSelected(value);
		} else if(actionId == com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_UNRESTRICTED_LISTS) {
			var source = e.getSource();
			var value = source.isSelected();
			this.literallyEqualUnrestrictedListsRadioButton.setSelected(value);
			this.mathematicallyEqualUnrestrictedListsRadioButton.setSelected(value);
		} else if(actionId == com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_LITERALLY_EQUAL) this.literallyEqualExpansionController.toggle(); else if(actionId == com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_MATHEMATICALLY_EQUAL) this.mathematicallyEqualExpansionController.toggle(); else if(actionId == com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_CUSTOM_GRADING_FUNCTION) {
			this.customGradingFunctionExpansionController.toggle();
			if(e.getSource().isSelected()) {
				if(this.functionNameDropdown.isVisible()) this.functionNameDropdown.performAction(this.functionNameDropdown.getChangeValueAction()); else this.functionNameTextField.performAction(this.functionNameTextField.getChangeAction());
			}
		}
	}
	,customGradingFunctionContainer: null
	,mathematicallyEqualContainer: null
	,literallyEqualContainer: null
	,controller: null
	,functionNameTextField: null
	,functionNameDropdown: null
	,functionArgumentsModeDropdown: null
	,customGradingFunctionRadioButton: null
	,anyAnswerRadioButton: null
	,equivalentEquationsRadioButton: null
	,mathematicallyEqualUnrestrictedListsRadioButton: null
	,mathematicallyEqualRepetitionMattersRadioButton: null
	,mathematicallyEqualOrderAndRepetitionMattersRadioButton: null
	,mathematicallyEqualRadioButton: null
	,matchSpacesCheckBox: null
	,matchLetterCaseCheckBox: null
	,literallyEqualUnrestrictedListsRadioButton: null
	,literallyEqualRepetitionMattersRadioButton: null
	,literallyEqualOrderAndRepetitionMattersRadioButton: null
	,literallyEqualRadioButton: null
	,customGradingFunctionExpansionController: null
	,mathematicallyEqualExpansionController: null
	,literallyEqualExpansionController: null
	,mathematicallyEqualListsselectionController: null
	,literallyEqualListsSelectionController: null
	,selectionController: null
	,label: null
	,__class__: com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent
});
com.wiris.quizzes.impl.ui.component.StudentAnswerComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.StudentAnswerComponent"] = function(controller) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.quizzes.impl.ui.component.StudentAnswerComponent.CLASS_STUDENT_ANSWER);
	this.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setMinWidth(450).setMargin(0,24,24,24);
	this.controller = controller;
	this.label = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.StudentAnswerComponent.STUDENT_ANSWER_LABEL));
	this.addComponent(this.label);
};
com.wiris.quizzes.impl.ui.component.StudentAnswerComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","StudentAnswerComponent"];
com.wiris.quizzes.impl.ui.component.StudentAnswerComponent.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.component.StudentAnswerComponent.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.StudentAnswerComponent.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	actionPerformed: function(e) {
		var action = e.getAction();
		var actionId = action.getId();
		if("handOpened" == actionId) this.getStyle().setMaxWidth(800); else if("handClosed" == actionId) this.getStyle().setMaxWidth(com.wiris.util.ui.Style.SIZE_AUTO);
	}
	,isMathEditor: function() {
		return this.answerField.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR || this.answerField.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR;
	}
	,isEmpty: function() {
		return this.answerField.isEmpty();
	}
	,setGraphCustomToolbar: function(toolbar) {
		if(this.answerField != null) this.answerField.setGraphCustomToolbar(toolbar);
	}
	,setMathTypeParameters: function(grammarUrl,parameters) {
		if(this.answerField != null && this.isMathEditor()) {
			if(parameters != null) this.answerField.setEditorInitialParams(com.wiris.system.PropertiesTools.toProperties(parameters));
			this.answerField.setGrammarUrl(grammarUrl,true);
		}
		this.grammarUrl = grammarUrl;
		this.parameters = parameters;
	}
	,emptyStudentAnswerImpl: function(questionInstanceImpl,slot) {
		var recreated = this.answerField != null;
		if(this.answerField != null) {
			if(slot.getSyntax().getName() != com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC && this.answerField.getFieldType() == com.wiris.quizzes.impl.QuizzesEnumUtils.string2answerFieldType(slot.getProperty(com.wiris.quizzes.api.PropertyName.ANSWER_FIELD_TYPE)) && this.answerField.isCompoundAnswer() == slot.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER)) {
				this.answerField.setQuestionInstance(slot,questionInstanceImpl);
				return;
			}
			if(this.answerField.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR) this.answerField.getComponent().removeActionListener(this);
			this.answerField.removeActionListener(this.controller);
		}
		this.answerField = new com.wiris.quizzes.impl.ui.AnswerFieldImpl(questionInstanceImpl,slot,this.getComponentBuilder());
		this.answerField.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
		this.answerField.addActionListener(this.controller);
		if(this.isMathEditor()) {
			if(this.parameters != null) this.answerField.setEditorInitialParams(com.wiris.system.PropertiesTools.toProperties(this.parameters));
			this.answerField.setGrammarUrl(this.grammarUrl,true);
			if(this.answerField.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR) {
				if(this.answerField.isCompoundAnswer() == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE) this.answerField.getComponent().setEasyModalClose(true); else this.answerField.getComponent().setEasyModalClose(true);
			} else this.answerField.getComponent().addActionListener(this);
		}
		this.getStyle().setMaxWidth(this.answerField.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_GRAPH_EDITOR?800:com.wiris.util.ui.Style.SIZE_AUTO);
		this.removeAllComponents();
		this.addComponent(this.label);
		this.addComponent(this.answerField);
		if(recreated) this.answerField.setInitialContent(0);
	}
	,emptyStudentAnswer: function(questionInstanceImpl,slot) {
		new com.wiris.quizzes.impl.ui.async.LoadAnswerTask(this,questionInstanceImpl,slot);
	}
	,setStudentAnswer: function(correctAnswer) {
		if(this.answerField != null) this.answerField.setValue(correctAnswer);
	}
	,controller: null
	,parameters: null
	,grammarUrl: null
	,answerField: null
	,label: null
	,__class__: com.wiris.quizzes.impl.ui.component.StudentAnswerComponent
});
com.wiris.quizzes.impl.ui.component.TestQuestionActivity = $hxClasses["com.wiris.quizzes.impl.ui.component.TestQuestionActivity"] = function(controller) {
	com.wiris.util.ui.component.ActivityPanel.call(this);
	this.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_SOLID).addClass(com.wiris.quizzes.impl.ui.component.TestQuestionActivity.CLASS_QUIZZES_STUDIO_TEST_QUESTION);
	this.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_STRETCH);
	this.controller = controller;
	var content = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	content.getStyle().setWidth(com.wiris.util.ui.Style.SIZE_FULL).setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_CENTER).setVerticalAlignment(com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_TOP);
	this.correctAnswer = new com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent(controller);
	this.studentAnswer = new com.wiris.quizzes.impl.ui.component.StudentAnswerComponent(controller);
	this.studentAnswerFeedback = new com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent();
	this.studentAnswerFeedback.getStyle().setMaxWidth(450);
	content.addComponent(this.correctAnswer);
	content.addComponent(this.studentAnswer);
	content.addComponent(this.studentAnswerFeedback);
	this.addComponent(content);
};
com.wiris.quizzes.impl.ui.component.TestQuestionActivity.__name__ = ["com","wiris","quizzes","impl","ui","component","TestQuestionActivity"];
com.wiris.quizzes.impl.ui.component.TestQuestionActivity.__super__ = com.wiris.util.ui.component.ActivityPanel;
com.wiris.quizzes.impl.ui.component.TestQuestionActivity.prototype = $extend(com.wiris.util.ui.component.ActivityPanel.prototype,{
	resetPreviewAnswerFeedback: function(instance,slot,authorAnswer) {
		this.studentAnswerFeedback.resetPreviewAnswerFeedback(instance,slot,authorAnswer);
	}
	,setPreviewAnswerFeedback: function(questionInstance,slot,authorAnswer) {
		if(this.studentAnswer.isEmpty()) this.studentAnswerFeedback.resetPreviewAnswerFeedback(questionInstance,slot,authorAnswer); else this.studentAnswerFeedback.setPreviewAnswerFeedback(questionInstance,slot,authorAnswer);
	}
	,setLoadingCorrectAnswer: function(loading) {
		this.correctAnswer.setLoadingCorrectAnswer(loading);
	}
	,setPreviewCorrectAnswer: function(correctAnswer,hasAlgorithm) {
		this.correctAnswer.setCorrectAnswer(correctAnswer,hasAlgorithm);
	}
	,updateTestQuestion: function(questionImpl,questionInstanceImpl,slot,authorAnswer) {
		this.correctAnswer.setCorrectAnswer(authorAnswer.getValue(),questionImpl.getAlgorithm() != null);
		this.studentAnswer.emptyStudentAnswer(questionInstanceImpl,slot);
		this.studentAnswerFeedback.resetPreviewAnswerFeedback(questionInstanceImpl,slot,authorAnswer);
	}
	,copyCorrectAnswer: function(correctAnswer) {
		this.studentAnswer.setStudentAnswer(correctAnswer);
	}
	,setGraphCustomToolbar: function(customToolbar) {
		this.studentAnswer.setGraphCustomToolbar(customToolbar);
	}
	,setMathTypeParameters: function(grammarUrl,parameters) {
		this.studentAnswer.setMathTypeParameters(grammarUrl,parameters);
	}
	,updateVisibility: function(context) {
		this.setMathTypeParameters(context.getGrammarUrl(),context.getMathTypeParameters());
		this.updateTestQuestion(context.getQuestionImpl(),context.getQuestionInstanceImpl(),context.getSlot(),context.getAuthorAnswer());
		this.setGraphCustomToolbar(context.getSlot().getProperty(com.wiris.quizzes.api.PropertyName.GRAPH_TOOLBAR));
		this.studentAnswer.setVisible(this.controller.getConfigurationKey("testQuestion/studentAnswer"));
		this.correctAnswer.setVisible(this.controller.getConfigurationKey("testQuestion/correctAnswer"));
		this.studentAnswerFeedback.setVisible(this.controller.getConfigurationKey("testQuestion/answerFeedback"));
	}
	,studentAnswerFeedback: null
	,studentAnswer: null
	,correctAnswer: null
	,controller: null
	,__class__: com.wiris.quizzes.impl.ui.component.TestQuestionActivity
});
com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent"] = function(controller) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.getStyle().setMinWidth(450).setMargin(0,24,0,24);
	this.label = com.wiris.util.ui.component.Label.newImportantWithText(controller.t(com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent.CORRECT_ANSWER_LABEL));
	var content = new com.wiris.util.ui.component.BorderPanel(false);
	content.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD);
	content.addClass(com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent.CLASS_CORRECT_ANSWER);
	var loadingWrapper = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.loadingCircle = com.wiris.util.ui.component.ProgressCircle.newIndeterminate();
	this.loadingCircle.setVisible(false);
	this.correctAnswer = com.wiris.quizzes.impl.ui.component.MathLabel.newHeaderWithText("<math/>");
	loadingWrapper.addComponent(this.loadingCircle);
	loadingWrapper.addComponent(this.correctAnswer);
	var buttonHolder = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.reloadButton = com.wiris.util.ui.component.Button.newWithIcon(controller.t(com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent.CORRECT_ANSWER_RELOAD_BUTTON_TOOLTIP),new com.wiris.util.ui.MaterialIcon("refresh"),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent.CORRECT_ANSWER_RELOAD_BUTTON_ID,null),controller);
	this.reloadButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
	this.copyAnswerButton = com.wiris.util.ui.component.Button.newWithIcon(controller.t(com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent.CORRECT_ANSWER_COPY_ANSWER_BUTTON_TOOLTIP),new com.wiris.util.ui.MaterialIcon("arrow_downward"),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent.CORRECT_ANSWER_COPY_ANSWER_BUTTON_ID,null),controller);
	this.copyAnswerButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
	buttonHolder.addComponent(this.reloadButton);
	buttonHolder.addComponent(this.copyAnswerButton);
	content.addComponent(loadingWrapper,com.wiris.util.ui.component.BorderPanel.POSITION_WEST);
	content.addComponent(buttonHolder,com.wiris.util.ui.component.BorderPanel.POSITION_EAST);
	this.addComponent(this.label);
	this.addComponent(content);
};
com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","TestQuestionCorrectAnswerComponent"];
com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	setLoadingCorrectAnswer: function(loading) {
		this.loadingCircle.setVisible(loading);
		this.correctAnswer.setVisible(!loading);
	}
	,setCorrectAnswer: function(correctAnswer,hasAlgorithm) {
		this.correctAnswer.setText(correctAnswer);
		this.reloadButton.setVisible(hasAlgorithm);
	}
	,copyAnswerButton: null
	,reloadButton: null
	,correctAnswer: null
	,loadingCircle: null
	,label: null
	,__class__: com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent
});
com.wiris.util.ui.component.TreeSelector = $hxClasses["com.wiris.util.ui.component.TreeSelector"] = function() {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD).addClass(com.wiris.util.ui.component.TreeSelector.CLASS_COMPONENT_TREE_SELECTOR);
	this.getStyle().setVerticalAlignment(com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_TOP);
	this.changeAction = new com.wiris.util.ui.Action(null,com.wiris.util.ui.component.TreeSelector.ACTION_CHECKBOX);
};
com.wiris.util.ui.component.TreeSelector.__name__ = ["com","wiris","util","ui","component","TreeSelector"];
com.wiris.util.ui.component.TreeSelector.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.util.ui.component.TreeSelector.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.util.ui.component.TreeSelector.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	actionPerformed: function(e) {
		var action = e.getAction();
		var command = action.getCommand();
		if(command == com.wiris.util.ui.component.TreeSelector.ACTION_CHECKBOX) this.performAction(this.changeAction);
	}
	,setChangeAction: function(changeAction) {
		this.changeAction = changeAction;
	}
	,getUnselectedItems: function(checkBoxes) {
		var items = new Array();
		var components = checkBoxes;
		if(checkBoxes == null) components = this.getChildren();
		var _g = 0;
		while(_g < components.length) {
			var component = components[_g];
			++_g;
			var checkbox = component;
			var state = checkbox.getController().getState();
			if(state == com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_UNSELECTED) items.push(checkbox.getId()); else {
				var childs = checkbox.getContent().getComponents();
				com.wiris.util.type.Arrays.addAll(items,this.getUnselectedItems(childs));
			}
		}
		return items;
	}
	,addElementFromData: function(level,title,icon) {
		var expansionCheckbox = com.wiris.util.ui.component.ExpansionCheckbox.createExpansionCheckbox(level,icon,title);
		this.addComponent(expansionCheckbox);
	}
	,addElement: function(expansionCheckbox) {
		this.addComponent(expansionCheckbox);
	}
	,changeAction: null
	,__class__: com.wiris.util.ui.component.TreeSelector
});
com.wiris.quizzes.impl.ui.component.ToolbarTreeSelector = $hxClasses["com.wiris.quizzes.impl.ui.component.ToolbarTreeSelector"] = function(controller) {
	com.wiris.util.ui.component.TreeSelector.call(this);
	this.controller = controller;
	this.setChangeAction(new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.ToolbarTreeSelector.ACTION_GRAPH_TOOLBAR_CHANGED,com.wiris.quizzes.impl.ui.component.ToolbarTreeSelector.ACTION_GRAPH_TOOLBAR_CHANGED));
};
com.wiris.quizzes.impl.ui.component.ToolbarTreeSelector.__name__ = ["com","wiris","quizzes","impl","ui","component","ToolbarTreeSelector"];
com.wiris.quizzes.impl.ui.component.ToolbarTreeSelector.__super__ = com.wiris.util.ui.component.TreeSelector;
com.wiris.quizzes.impl.ui.component.ToolbarTreeSelector.prototype = $extend(com.wiris.util.ui.component.TreeSelector.prototype,{
	generateItemFromDefinition: function(toolbarDefinition,level) {
		var expansionCheckbox = new com.wiris.util.ui.component.ExpansionCheckbox();
		expansionCheckbox.addActionListener(this);
		expansionCheckbox.setState(com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_SELECTED);
		var items = toolbarDefinition.getItems();
		var _g1 = 0, _g = items.length;
		while(_g1 < _g) {
			var i = _g1++;
			var child = items[i];
			var item = this.generateItemFromDefinition(child,level + 1);
			expansionCheckbox.getController().addItem(item);
		}
		var iconName = toolbarDefinition.getIconName();
		var iconType = toolbarDefinition.getIconFormat();
		var icon = com.wiris.util.type.IconUtils.newFromNameAndType(iconName,iconType);
		if(iconType != null && icon != null && iconType == com.wiris.util.type.IconUtils.TYPE_SVG) icon.setExternal(true);
		if(icon != null) expansionCheckbox.setIcon(icon); else if(toolbarDefinition.isParent()) expansionCheckbox.setIcon(com.wiris.util.type.IconUtils.newFromNameAndType(com.wiris.quizzes.impl.ui.component.ToolbarTreeSelector.ICON_PARENT_NAME,com.wiris.quizzes.impl.ui.component.ToolbarTreeSelector.ICON_PARENT_TYPE));
		if(toolbarDefinition.getValue() != null) expansionCheckbox.setValue(toolbarDefinition.getValue());
		expansionCheckbox.setId(toolbarDefinition.getId());
		var title = toolbarDefinition.isTitleIsHtml()?toolbarDefinition.getValue():toolbarDefinition.getTitle();
		if(title != null) expansionCheckbox.setTitle(this.controller.graphT(title));
		expansionCheckbox.setLevel(level);
		expansionCheckbox.refreshView();
		expansionCheckbox.getCheckbox().setId(toolbarDefinition.getId() + "_cb");
		return expansionCheckbox;
	}
	,addElementFromToolbarDefinition: function(toolbarDefinition) {
		var expansionCheckbox = this.generateItemFromDefinition(toolbarDefinition,0);
		this.addElement(expansionCheckbox);
	}
	,updateExpansionCheckbox: function(component,definition) {
		if(component.getController().isParent()) {
			var checkboxes = component.getController().getItems();
			var _g = 0;
			while(_g < checkboxes.length) {
				var checkbox = checkboxes[_g];
				++_g;
				this.updateExpansionCheckbox(checkbox,definition);
			}
		} else if(definition.getItemById(component.getId()) != null) component.getController().setState(com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_SELECTED,true,false); else component.getController().setState(com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_UNSELECTED,true,false);
	}
	,updateComponent: function(definition) {
		var components = this.getChildren();
		var _g = 0;
		while(_g < components.length) {
			var component = components[_g];
			++_g;
			this.updateExpansionCheckbox(component,definition);
		}
	}
	,setDefinition: function(toolbarDefinition) {
		this.removeAllComponents();
		this.definition = toolbarDefinition;
		var definition = toolbarDefinition.clone();
		var options = definition.getItems();
		var _g = 0;
		while(_g < options.length) {
			var def = options[_g];
			++_g;
			def.flatLevel();
			this.addElementFromToolbarDefinition(def);
		}
	}
	,computeGraphToolbarDefinition: function() {
		var itemsToDelete = this.getUnselectedItems(null);
		var graphDefinition = this.definition.clone();
		var _g = 0;
		while(_g < itemsToDelete.length) {
			var id = itemsToDelete[_g];
			++_g;
			graphDefinition.deleteItem(id);
		}
		return graphDefinition;
	}
	,definition: null
	,controller: null
	,__class__: com.wiris.quizzes.impl.ui.component.ToolbarTreeSelector
});
com.wiris.quizzes.impl.ui.component.ValidationOptionsActivity = $hxClasses["com.wiris.quizzes.impl.ui.component.ValidationOptionsActivity"] = function(controller) {
	com.wiris.util.ui.component.ActivityPanel.call(this);
	this.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_SOLID).addClass(com.wiris.quizzes.impl.ui.component.ValidationOptionsActivity.CLASS_QUIZZES_STUDIO_VALIDATION_OPTIONS);
	this.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	this.controller = controller;
	this.optionsFilter = new com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent(controller,"validationOptions");
	this.studentAnswerComparison = new com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent(controller);
	this.numberValidation = new com.wiris.quizzes.impl.ui.component.NumberValidationComponent(controller);
	this.simplificationValidation = new com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent(controller);
	this.measureUnitsValidation = new com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent(controller);
	var content = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	content.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setVerticalAlignment(com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_TOP);
	content.addComponent(this.optionsFilter);
	content.addComponent(this.studentAnswerComparison);
	content.addComponent(this.numberValidation);
	content.addComponent(this.simplificationValidation);
	content.addComponent(this.measureUnitsValidation);
	this.addComponent(content);
};
com.wiris.quizzes.impl.ui.component.ValidationOptionsActivity.__name__ = ["com","wiris","quizzes","impl","ui","component","ValidationOptionsActivity"];
com.wiris.quizzes.impl.ui.component.ValidationOptionsActivity.__super__ = com.wiris.util.ui.component.ActivityPanel;
com.wiris.quizzes.impl.ui.component.ValidationOptionsActivity.prototype = $extend(com.wiris.util.ui.component.ActivityPanel.prototype,{
	showAllValidationAssertions: function() {
		if(this.optionsFilter.isOptionsFiltered()) this.optionsFilter.setOptionsFilter(false);
		this.studentAnswerComparison.showAllValidationAssertions();
		this.numberValidation.showAllValidationAssertions();
		this.simplificationValidation.showAllValidationAssertions();
		this.measureUnitsValidation.showAllValidationAssertions();
	}
	,showFeaturedValidationAssertions: function(context) {
		var featuredAssertions = context.getFeaturedAssertions();
		this.studentAnswerComparison.showFeaturedValidationAssertions(context);
		this.numberValidation.showFeaturedValidationAssertions(featuredAssertions);
		this.simplificationValidation.showFeaturedValidationAssertions(featuredAssertions);
		this.measureUnitsValidation.showFeaturedValidationAssertions(featuredAssertions);
	}
	,setMatchSpaces: function(selected) {
		this.studentAnswerComparison.setMatchSpaces(selected);
	}
	,setMatchCase: function(selected) {
		this.studentAnswerComparison.setMatchCase(selected);
	}
	,setSymbolicAnswer: function(selected) {
		this.numberValidation.setSymbolicAnswer(selected);
	}
	,setAllowAllPrefixes: function(selected) {
		this.measureUnitsValidation.setAllowAllPrefixes(selected);
	}
	,setMatchingUnit: function(selected) {
		this.measureUnitsValidation.setMatchingUnit(selected);
	}
	,setPrecisionEnabled: function(enabled) {
		this.numberValidation.setPrecisionEnabled(enabled);
	}
	,setPrecisionType: function(type) {
		this.numberValidation.setPrecisionType(type);
	}
	,setPrecisionMaximum: function(maximum) {
		this.numberValidation.setPrecisionMaximum(maximum);
	}
	,setPrecisionMinimum: function(minimum) {
		this.numberValidation.setPrecisionMinimum(minimum);
	}
	,setErrorMarginValue: function(tolerance) {
		this.numberValidation.setErrorMarginValue(tolerance);
	}
	,setErrorMarginType: function(type) {
		this.numberValidation.setErrorMarginType(type);
	}
	,setMatchingDigitsValue: function(toleranceDigits) {
		this.numberValidation.setMatchingDigitsValue(toleranceDigits);
	}
	,setMatchingDigitsType: function(type) {
		this.numberValidation.setMatchingDigitsType(type);
	}
	,setExactAnswer: function() {
		this.numberValidation.setExactAnswer();
	}
	,setErrorMargin: function() {
		this.numberValidation.setErrorMargin();
	}
	,setMatchingDigits: function() {
		this.numberValidation.setMatchingDigits();
	}
	,setAnyNotation: function() {
		this.numberValidation.setAnyNotation();
	}
	,setDecimalNotation: function() {
		this.numberValidation.setDecimalNotation();
	}
	,setScientificNotation: function() {
		this.numberValidation.setScientificNotation();
	}
	,setMinimalRadicands: function(selected) {
		this.simplificationValidation.setMinimalRadicands(selected);
	}
	,setRationalized: function(selected) {
		this.simplificationValidation.setRationalized(selected);
	}
	,setCommonDenominator: function(selected) {
		this.simplificationValidation.setCommonDenominator(selected);
	}
	,setCommonFactor: function(selected) {
		this.simplificationValidation.setCommonFactor(selected);
	}
	,setFactorized: function(selected) {
		this.simplificationValidation.setFactorized(selected);
	}
	,setExpanded: function(selected) {
		this.simplificationValidation.setExpanded(selected);
	}
	,setSimplified: function(selected) {
		this.simplificationValidation.setSimplified(selected);
	}
	,setArgumentsUnevaluated: function(option) {
		this.studentAnswerComparison.setArgumentsUnevaluated(option);
	}
	,setGradingFunctions: function(functions,functionName) {
		this.studentAnswerComparison.setGradingFunctions(functions,functionName);
	}
	,setUnrestrictedLists: function() {
		this.studentAnswerComparison.setUnrestrictedLists();
	}
	,setRepetitionMatters: function() {
		this.studentAnswerComparison.setRepetitionMatters();
	}
	,setOrderAndRepetitionMatters: function() {
		this.studentAnswerComparison.setOrderAndRepetitionMatters();
	}
	,setCustomGradingFunction: function() {
		this.studentAnswerComparison.setCustomGradingFunction();
	}
	,setAnyAnswer: function() {
		this.studentAnswerComparison.setAnyAnswer();
	}
	,setEquivalentEquations: function() {
		this.studentAnswerComparison.setEquivalentEquations();
	}
	,setMathematicallyEqual: function() {
		this.studentAnswerComparison.setMathematicallyEqual();
	}
	,setLiterallyEqual: function() {
		this.studentAnswerComparison.setLiterallyEqual();
	}
	,setTextSyntax: function() {
		this.optionsFilter.setVisible(false);
		this.studentAnswerComparison.setTextSyntaxVisibility();
		this.numberValidation.setVisible(false);
		this.simplificationValidation.setVisible(false);
		this.measureUnitsValidation.setVisible(false);
	}
	,setEquationSyntax: function() {
		this.optionsFilter.setVisible(this.controller.getContext().isOptOpenAnswer());
		this.studentAnswerComparison.setEquationSyntaxVisibility();
		this.numberValidation.updateVisibility();
		this.simplificationValidation.updateVisibility();
		this.measureUnitsValidation.setVisible(this.controller.getConfigurationKey("validationOptions/measureUnits"));
	}
	,updateVisibility: function(context) {
		var syntaxAssertion = context.getSlot().getSyntax().getName();
		if(syntaxAssertion == com.wiris.quizzes.api.assertion.SyntaxName.MATH) {
			this.setEquationSyntax();
			if(!context.isShowAllOptions()) {
				this.showFeaturedValidationAssertions(context);
				this.optionsFilter.setOptionsFilter(true);
			} else {
				this.showAllValidationAssertions();
				this.optionsFilter.setOptionsFilter(false);
			}
		} else if(syntaxAssertion == com.wiris.quizzes.api.assertion.SyntaxName.STRING) this.setTextSyntax();
	}
	,measureUnitsValidation: null
	,simplificationValidation: null
	,numberValidation: null
	,studentAnswerComparison: null
	,optionsFilter: null
	,controller: null
	,__class__: com.wiris.quizzes.impl.ui.component.ValidationOptionsActivity
});
com.wiris.quizzes.impl.ui.component.VariableOptionsActivity = $hxClasses["com.wiris.quizzes.impl.ui.component.VariableOptionsActivity"] = function(controller) {
	com.wiris.util.ui.component.ActivityPanel.call(this);
	this.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_SOLID).addClass(com.wiris.quizzes.impl.ui.component.VariableOptionsActivity.CLASS_QUIZZES_STUDIO_VARIABLE_OPTIONS);
	this.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	this.useCas = false;
	this.headerLabel = com.wiris.util.ui.component.Label.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.VariableOptionsActivity.VARIABLE_OPTIONS_LABEL));
	this.headerLabel.addClass(com.wiris.quizzes.impl.ui.component.VariableOptionsActivity.CLASS_CALC_ME_LABEL);
	var parameters = new Hash();
	parameters.set("lang",controller.getLanguage());
	parameters.set(com.wiris.quizzes.impl.CalcDocumentTools.QUIZZES_QUESTION_OPTIONS,"true");
	parameters.set("precision","4");
	parameters.set("environment","quizzes-studio");
	this.calcMe = new com.wiris.quizzes.impl.ui.component.CalcMeInputComponent(parameters);
	this.calcMe.setId("variableOptionsCalcMe");
	this.calcMe.setChangeAction(new com.wiris.util.ui.Action("algorithmChanged",null));
	this.calcMe.addActionListener(controller);
	this.calcMe.getStyle().setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	this.wirisCas = new com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent(controller);
	this.wirisCas.setId("variableOptionsWirisCas");
	this.wirisCas.setVisible(false);
	var content = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	content.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setVerticalAlignment(com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_TOP);
	content.addComponent(this.headerLabel);
	content.addComponent(this.calcMe);
	content.addComponent(this.wirisCas);
	this.addComponent(content);
};
com.wiris.quizzes.impl.ui.component.VariableOptionsActivity.__name__ = ["com","wiris","quizzes","impl","ui","component","VariableOptionsActivity"];
com.wiris.quizzes.impl.ui.component.VariableOptionsActivity.__super__ = com.wiris.util.ui.component.ActivityPanel;
com.wiris.quizzes.impl.ui.component.VariableOptionsActivity.prototype = $extend(com.wiris.util.ui.component.ActivityPanel.prototype,{
	setCasAlgorithmLang: function(lang) {
		this.wirisCas.setLanguage(lang);
	}
	,setCasOutputOptions: function(questionImpl,slot) {
		this.wirisCas.setCasOutputOptions(questionImpl,slot);
	}
	,algorithmEditorActionWithParams: function(name,parameters) {
		if(!this.useCas) this.calcMe.actionWithParams(name,parameters);
	}
	,getFunctionNames: function() {
		if(this.useCas) return new Array();
		return this.calcMe.getFunctionNames();
	}
	,getVariableNames: function() {
		if(this.useCas) return new Array();
		return this.calcMe.getVariableNames();
	}
	,isUseCas: function() {
		return this.useCas;
	}
	,setUseCas: function(useCas) {
		if(this.useCas != useCas) {
			this.useCas = useCas;
			if(this.useCas) {
				this.calcMe.setVisible(false);
				this.wirisCas.setVisible(true);
			} else {
				this.calcMe.setVisible(true);
				this.wirisCas.setVisible(false);
			}
		}
	}
	,convertAlgorithm: function(algorithm) {
		this.calcMe.setAlgorithm(algorithm);
		this.setUseCas(false);
	}
	,setAlgorithm: function(algorithm) {
		if(algorithm == null || com.wiris.quizzes.impl.CalcDocumentTools.isCalc(algorithm)) {
			this.calcMe.setAlgorithm(algorithm);
			this.setUseCas(false);
		} else {
			this.wirisCas.setValue(algorithm);
			this.setUseCas(true);
		}
	}
	,useCas: null
	,wirisCas: null
	,calcMe: null
	,headerLabel: null
	,__class__: com.wiris.quizzes.impl.ui.component.VariableOptionsActivity
});
com.wiris.quizzes.impl.ui.component.ViewSourceActivity = $hxClasses["com.wiris.quizzes.impl.ui.component.ViewSourceActivity"] = function(controller) {
	com.wiris.util.ui.component.ActivityPanel.call(this);
	this.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_SOLID);
	this.getStyle().setWidthWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT).setHeightWithUnit(100,com.wiris.util.ui.Style.SIZE_UNIT_PERCENT);
	this.controller = controller;
	this.questionXml = com.wiris.util.ui.component.TextArea.newWithLabel(controller.t(com.wiris.quizzes.impl.ui.component.ViewSourceActivity.VIEW_SOURCE_QUESTION_XML_LABEL));
	this.questionXml.addClass(com.wiris.quizzes.impl.ui.component.ViewSourceActivity.CLASS_VIEW_SOURCE_TEXT_FIELD);
	this.questionXml.setReadOnly(true);
	this.grammarUrl = com.wiris.util.ui.component.TextField.newWithLabel(controller.t(com.wiris.quizzes.impl.ui.component.ViewSourceActivity.VIEW_SOURCE_GRAMMAR_URL_LABEL));
	this.grammarUrl.addClass(com.wiris.quizzes.impl.ui.component.ViewSourceActivity.CLASS_VIEW_SOURCE_TEXT_FIELD);
	this.grammarUrl.setReadOnly(true);
	this.reservedWords = com.wiris.util.ui.component.TextField.newWithLabel(controller.t(com.wiris.quizzes.impl.ui.component.ViewSourceActivity.VIEW_SOURCE_RESERVED_WORDS_LABEL));
	this.reservedWords.addClass(com.wiris.quizzes.impl.ui.component.ViewSourceActivity.CLASS_VIEW_SOURCE_TEXT_FIELD);
	this.reservedWords.setReadOnly(true);
	this.addComponent(this.questionXml);
	this.addComponent(this.grammarUrl);
	this.addComponent(this.reservedWords);
};
com.wiris.quizzes.impl.ui.component.ViewSourceActivity.__name__ = ["com","wiris","quizzes","impl","ui","component","ViewSourceActivity"];
com.wiris.quizzes.impl.ui.component.ViewSourceActivity.__super__ = com.wiris.util.ui.component.ActivityPanel;
com.wiris.quizzes.impl.ui.component.ViewSourceActivity.prototype = $extend(com.wiris.util.ui.component.ActivityPanel.prototype,{
	updateQuestionSource: function(questionImpl,slot,reservedWords) {
		this.questionXml.setValue(questionImpl.serialize());
		if(slot.getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.MATH) {
			this.grammarUrl.setVisible(true);
			this.reservedWords.setVisible(true);
			this.grammarUrl.setValue(slot.getGrammarUrl());
			this.reservedWords.setValue(reservedWords);
		} else {
			this.grammarUrl.setVisible(false);
			this.reservedWords.setVisible(false);
		}
	}
	,reservedWords: null
	,grammarUrl: null
	,questionXml: null
	,controller: null
	,__class__: com.wiris.quizzes.impl.ui.component.ViewSourceActivity
});
com.wiris.quizzes.impl.ui.component.WirisCasInputComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.WirisCasInputComponent"] = function(controller) {
	com.wiris.util.ui.component.Component.call(this);
	this.addClass(com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.CLASS_WIRIS_CAS_INPUT_COMPONENT);
	this.controller = controller;
	this.sessionId = this.createSessionId();
	this.revision = 0;
	this.value = null;
	this.language = this.controller.getLanguage();
	this.pollingService = false;
	this.launchButton = com.wiris.util.ui.component.Button.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.WIRIS_CAS_LAUNCH_CAS_BUTTON_LABEL),new com.wiris.util.ui.Action(com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.ACTION_LAUNCH_WIRIS_CAS,null),this);
	this.launchButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON).addClass(com.wiris.util.ui.component.Button.CLASS_BUTTON_CONTAINED);
	this.loadingCircle = com.wiris.util.ui.component.ProgressCircle.newIndeterminate();
	this.loadingCircle.setVisible(false);
	this.currentStatus = com.wiris.util.ui.component.Label.newWithText("");
	this.currentStatus.getStyle().setMargin(0,0,0,8);
	this.currentStatus.setVisible(false);
	this.notes = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.notes.getStyle().setMargin(0,0,0,8);
	this.notes.addComponent(this.loadingCircle);
	this.notes.addComponent(this.currentStatus);
	this.image = new com.wiris.util.ui.component.ImageContainer();
	this.image.getStyle().setMargin(16,16,8,16);
	this.image.setTooltip(controller.t(com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.WIRIS_CAS_ALGORITHM_IMAGE_TOOLTIP_LABEL));
	if(this.isEmpty()) this.image.setVisible(false); else this.callServiceForImageUpdate();
};
com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","WirisCasInputComponent"];
com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.__interfaces__ = [com.wiris.util.sys.TimerTask,com.wiris.quizzes.impl.HttpListener,com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.translateSession = function(session,lang) {
	var builder = com.wiris.quizzes.api.Quizzes.getInstance();
	var question = builder.newQuestion().getImpl();
	question.wirisCasSession = session;
	var req = builder.newTranslationRequest(question,lang);
	var service = builder.getQuizzesService();
	question.update(service.execute(req));
	return question.wirisCasSession;
}
com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.__super__ = com.wiris.util.ui.component.Component;
com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.prototype = $extend(com.wiris.util.ui.component.Component.prototype,{
	onError: function(error) {
	}
	,onData: function(data) {
	}
	,run: function(timer) {
		if(this.isPollingService()) {
			var parameters = new Hash();
			parameters.set("session_id",this.sessionId);
			parameters.set("revision","" + this.revision);
			this.callService("get",parameters,new com.wiris.quizzes.impl.ui.controller.PollWirisCasServiceRequestController(this));
			new com.wiris.util.sys.TimerProxy(com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.POLL_SERVICE_INTERVAL,true,this);
		}
	}
	,actionPerformed: function(e) {
		var action = e.getAction();
		var actionId = action.getId();
		if(actionId == com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.ACTION_LAUNCH_WIRIS_CAS) {
			this.currentStatus.setText(this.controller.t(com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.WIRIS_CAS_SENDING_INITIAL_SESSION_LABEL));
			this.currentStatus.setVisible(true);
			this.sendInitialSession();
			this.performAction(action);
			this.image.setVisible(false);
		}
	}
	,stop: function() {
		this.setPollingService(false);
		this.currentStatus.setText(this.controller.t("sessionclosed"));
		var parameters = new Hash();
		parameters.set("session_id",this.sessionId);
		if(this.sessionState == com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.STATE_NEW || this.sessionState == com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.STATE_RECEIVED) this.callService("close",parameters,this); else if(this.sessionState == com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.STATE_CLOSED) this.callService("remove",parameters,this);
	}
	,sessionReceived: function(session) {
		this.sessionState = Std.parseInt(com.wiris.util.json.JSon.getString(session.get("state")));
		if(this.sessionState == com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.STATE_NOT_FOUND) this.launchButton.setEnabled(true); else if(this.sessionState == com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.STATE_NEW) {
			this.loadingCircle.setVisible(true);
			if(this.updateSession(session)) {
				var parameters = new Hash();
				parameters.set("session_id",this.sessionId);
				parameters.set("revision","" + this.revision);
				this.callService("received",parameters,new com.wiris.quizzes.impl.ui.controller.PollWirisCasServiceRequestController(this));
			}
		} else if(this.sessionState == com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.STATE_RECEIVED) this.launchButton.setEnabled(false); else if(this.sessionState == com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.STATE_CLOSED) {
			this.updateSession(session);
			this.launchButton.setEnabled(true);
			this.loadingCircle.setVisible(false);
			if(!this.isEmpty()) {
				this.currentStatus.setVisible(true);
				this.currentStatus.setText(this.controller.t("sessionclosed"));
				this.updateSessionImage();
			} else this.currentStatus.setVisible(false);
			this.setPollingService(false);
		} else {
			this.launchButton.setEnabled(true);
			this.currentStatus.setVisible(true);
			this.currentStatus.setText(this.controller.t("error"));
			haxe.Log.trace(session.get("error"),{ fileName : "WirisCasInputComponent.hx", lineNumber : 344, className : "com.wiris.quizzes.impl.ui.component.WirisCasInputComponent", methodName : "sessionReceived"});
		}
	}
	,pollService: function() {
		this.currentStatus.setText(this.controller.t(com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.WIRIS_CAS_WAITING_FOR_UPDATES_LABEL));
		this.currentStatus.setVisible(true);
		this.loadingCircle.setVisible(true);
		if(!this.isPollingService()) {
			this.setPollingService(true);
			new com.wiris.util.sys.TimerProxy(com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.POLL_SERVICE_INTERVAL,true,this);
		}
	}
	,callService: function(method,parameters,listener) {
		var http;
		var conf = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration();
		if(conf.get(com.wiris.quizzes.api.ConfigurationKeys.CROSSORIGINCALLS_ENABLED) == "true") http = new com.wiris.quizzes.impl.HttpImpl(conf.get(com.wiris.quizzes.api.ConfigurationKeys.WIRISLAUNCHER_URL) + "/" + method,listener); else {
			http = new com.wiris.quizzes.impl.HttpImpl(conf.get(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL),listener);
			http.setParameter("service","wirislauncher");
			http.setParameter("path",method);
		}
		var keys = parameters.keys();
		while(keys.hasNext()) {
			var key = keys.next();
			http.setParameter(key,parameters.get(key));
		}
		http.setHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
		http.request(true);
	}
	,updateSession: function(session) {
		var sessionRevision = Std.parseInt(com.wiris.util.json.JSon.getString(session.get("revision")));
		if(this.revision < sessionRevision && session.exists("value")) {
			this.revision = sessionRevision;
			this.setValue(com.wiris.util.json.JSon.getString(session.get("value")));
			this.currentStatus.setVisible(true);
			this.currentStatus.setText(StringTools.replace(this.controller.t("gotsession"),"${n}","" + this.revision));
			return true;
		}
		return false;
	}
	,sendInitialSession: function() {
		this.revision++;
		var parameters = new Hash();
		parameters.set("session_id",this.sessionId);
		parameters.set("revision","" + this.revision);
		parameters.set("value",this.value);
		this.callService("set",parameters,new com.wiris.quizzes.impl.ui.controller.SendInitialWirisCasSessionRequestController(this));
	}
	,updateSessionImage: function() {
		this.image.setSource(com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.WIRISLAUNCHER_URL) + "/image.png?session_id=" + this.sessionId + "&revision=" + this.revision + "&t=" + HxOverrides.dateStr(new Date()));
		this.image.setVisible(true);
	}
	,callServiceForImageUpdate: function() {
		var parameters = new Hash();
		parameters.set("session_id",this.sessionId);
		parameters.set("revision","" + this.revision);
		parameters.set("value",this.value);
		this.callService("set",parameters,new com.wiris.quizzes.impl.ui.controller.UpdateWirisCasSessionImageRequestController(this));
	}
	,createSessionId: function() {
		var template = [8,4,4,4,12];
		var id = new StringBuf();
		var j;
		var _g1 = 0, _g = template.length;
		while(_g1 < _g) {
			var j1 = _g1++;
			if(j1 > 0) id.b += Std.string("-");
			var i;
			var _g3 = 0, _g2 = template[j1];
			while(_g3 < _g2) {
				var i1 = _g3++;
				var c = StringTools.hex(Math.floor(Math.random() * 16),0);
				id.b += Std.string(c);
			}
		}
		return id.b;
	}
	,getSessionId: function() {
		return this.sessionId;
	}
	,isEmpty: function() {
		return com.wiris.quizzes.impl.HTMLTools.emptyCasSession(this.value);
	}
	,setPollingService: function(pollingService) {
		this.pollingService = pollingService;
	}
	,isPollingService: function() {
		return this.pollingService;
	}
	,setLanguage: function(language) {
		if(!(this.language == language)) {
			this.language = language;
			if(!this.isEmpty()) this.setValue(com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.translateSession(this.getValue(),this.language));
			this.callServiceForImageUpdate();
		}
	}
	,getLanguage: function() {
		return this.language;
	}
	,setChangeAction: function(changeAction) {
		this.changeAction = changeAction;
	}
	,getChangeAction: function() {
		return this.changeAction;
	}
	,setValue: function(value) {
		if(!(this.value == value)) {
			this.value = value;
			var lang = com.wiris.quizzes.impl.CalcDocumentTools.casSessionLang(value);
			if(lang != null) this.language = lang;
			if(this.changeAction != null) this.performAction(this.changeAction);
		}
	}
	,getValue: function() {
		return this.value;
	}
	,getImage: function() {
		return this.image;
	}
	,getNotes: function() {
		return this.notes;
	}
	,getButton: function() {
		return this.launchButton;
	}
	,controller: null
	,pollingService: null
	,sessionState: null
	,revision: null
	,language: null
	,value: null
	,sessionId: null
	,changeAction: null
	,image: null
	,loadingCircle: null
	,currentStatus: null
	,notes: null
	,launchButton: null
	,__class__: com.wiris.quizzes.impl.ui.component.WirisCasInputComponent
});
com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent = $hxClasses["com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent"] = function(controller) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.CLASS_WIRIS_CAS_COMPONENT).addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_FULL_SIZE_PANEL);
	var content = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	content.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD);
	this.controller = controller;
	this.calcLabel = com.wiris.util.ui.component.Label.newImportantWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.WIRIS_CAS_USE_CALCME_LABEL));
	var convertContent = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	convertContent.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD);
	this.convertLabel = com.wiris.util.ui.component.Label.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.WIRIS_CAS_CONVERT_TO_CALCME_DESCRIPTION_LABEL));
	this.convertButton = com.wiris.util.ui.component.Button.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.WIRIS_CAS_CONVERT_TO_CALCME_BUTTON_LABEL),new com.wiris.util.ui.Action("convertAlgorithm",null),this.controller);
	this.convertButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON).addClass(com.wiris.util.ui.component.Button.CLASS_BUTTON_CONTAINED);
	this.convertButton.getStyle().setMargin(0,16,0,0);
	this.convertAsAlgorithmButton = com.wiris.util.ui.component.Button.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.WIRIS_CAS_CONVERT_TO_ALGORITHM_BUTTON_LABEL),new com.wiris.util.ui.Action("convertAsAlgorithm",null),this.controller);
	this.convertAsAlgorithmButton.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON).addClass(com.wiris.util.ui.component.Button.CLASS_BUTTON_CONTAINED);
	this.convertAsAlgorithmButton.getStyle().setMargin(0,16,0,0);
	var learnMore = com.wiris.util.ui.component.HyperlinkButton.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.WIRIS_CAS_USE_CALCME_LEARN_MORE),"https://docs.wiris.com/" + controller.getLanguage() + "/quizzes/calcme_integration",new com.wiris.util.ui.Action("learnMore",null),controller);
	learnMore.addClass(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON);
	var buttons = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	buttons.getStyle().setVerticalAlignment(com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_MIDDLE).setMargin(16,0,0,0);
	buttons.addComponent(this.convertButton);
	buttons.addComponent(this.convertAsAlgorithmButton);
	buttons.addComponent(learnMore);
	convertContent.addComponent(this.convertLabel);
	convertContent.addComponent(buttons);
	this.casLabel = com.wiris.util.ui.component.Label.newImportantWithText(this.controller.t(com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.WIRIS_CAS_USE_WIRIS_CAS_LABEL));
	this.wirisCasLabel = com.wiris.util.ui.component.Label.newWithText(controller.t(com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.WIRIS_CAS_OPEN_WIRIS_CAS_LABEL));
	this.algorithmLanguageDropdown = new com.wiris.util.ui.component.Dropdown();
	this.algorithmLanguageDropdown.getStyle().setWidth(com.wiris.util.ui.Style.SIZE_AUTO).setMargin(16,0,16,0);
	this.algorithmLanguageDropdown.setTitle(controller.t(com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.WIRIS_CAS_ALGORITHM_LANGUAGE_LABEL));
	var languages = this.getCasLangs();
	var it = languages.keys();
	while(it.hasNext()) {
		var key = it.next();
		this.algorithmLanguageDropdown.addValue(key,languages.get(key));
	}
	this.algorithmLanguageDropdown.pickValue(this.getCasLang(this.controller.getLanguage(),languages));
	this.algorithmLanguageDropdown.setChangeValueAction(new com.wiris.util.ui.Action("algorithmLanguageChanged",null));
	this.algorithmLanguageDropdown.addActionListener(controller);
	this.wirisCas = new com.wiris.quizzes.impl.ui.component.WirisCasInputComponent(controller);
	this.wirisCas.setId(com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.ID_WIRIS_CAS_INPUT_COMPONENT);
	this.wirisCas.setChangeAction(new com.wiris.util.ui.Action("algorithmChanged",null));
	this.wirisCas.addActionListener(this.controller);
	this.outputOptions = new com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent(controller);
	content.addComponent(this.wirisCasLabel);
	content.addComponent(this.algorithmLanguageDropdown);
	content.addComponent(this.wirisCas);
	this.addComponent(this.calcLabel);
	this.addComponent(convertContent);
	this.addComponent(this.casLabel);
	this.addComponent(content);
	this.addComponent(this.outputOptions);
};
com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.__name__ = ["com","wiris","quizzes","impl","ui","component","WirisCasInputWrapperComponent"];
com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	getCasLang: function(quizzesLang,langs) {
		quizzesLang = com.wiris.util.lang.WordsTranslatorContainer.normalizeLangString(quizzesLang);
		if(langs.exists(quizzesLang)) return quizzesLang;
		if(com.wiris.util.lang.WordsTranslatorContainer.hasRootLanguage(quizzesLang) && langs.exists(com.wiris.util.lang.WordsTranslatorContainer.getRootLanguage(quizzesLang))) return com.wiris.util.lang.WordsTranslatorContainer.getRootLanguage(quizzesLang);
		return "en";
	}
	,getCasLangs: function() {
		var casLangs = new Hash();
		casLangs.set("ca",this.t("catalan"));
		casLangs.set("en",this.t("english"));
		casLangs.set("es",this.t("spanish"));
		casLangs.set("et",this.t("estonian"));
		casLangs.set("eu",this.t("basque"));
		casLangs.set("fr",this.t("french"));
		casLangs.set("de",this.t("german"));
		casLangs.set("it",this.t("italian"));
		casLangs.set("nl",this.t("dutch"));
		casLangs.set("pt",this.t("portuguese"));
		return casLangs;
	}
	,t: function(k) {
		return this.controller.t(k);
	}
	,setCasOutputOptions: function(questionImpl,slot) {
		this.outputOptions.setCasOutputOptions(questionImpl,slot);
	}
	,setValue: function(value) {
		var lang = com.wiris.quizzes.impl.CalcDocumentTools.casSessionLang(value);
		if(lang != null) this.algorithmLanguageDropdown.pickValue(this.getCasLang(lang,this.getCasLangs()));
		this.wirisCas.setValue(value);
		this.wirisCas.callServiceForImageUpdate();
	}
	,setLanguage: function(lang) {
		this.algorithmLanguageDropdown.pickValue(lang);
		this.wirisCas.setLanguage(lang);
	}
	,controller: null
	,outputOptions: null
	,wirisCas: null
	,algorithmLanguageDropdown: null
	,convertAsAlgorithmButton: null
	,convertButton: null
	,wirisCasLabel: null
	,convertLabel: null
	,calcLabel: null
	,casLabel: null
	,__class__: com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent
});
com.wiris.quizzes.impl.ui.controller.QuizzesServiceRequestController = $hxClasses["com.wiris.quizzes.impl.ui.controller.QuizzesServiceRequestController"] = function(controller) {
	this.controller = controller;
	this.executed = false;
	this.nextRequest = null;
};
com.wiris.quizzes.impl.ui.controller.QuizzesServiceRequestController.__name__ = ["com","wiris","quizzes","impl","ui","controller","QuizzesServiceRequestController"];
com.wiris.quizzes.impl.ui.controller.QuizzesServiceRequestController.__interfaces__ = [com.wiris.quizzes.api.QuizzesServiceListener];
com.wiris.quizzes.impl.ui.controller.QuizzesServiceRequestController.prototype = {
	executeRequest: function(response) {
	}
	,isExecuted: function() {
		if(this.nextRequest != null) return this.executed || this.nextRequest.isExecuted();
		return this.executed;
	}
	,setNextRequest: function(nextRequest) {
		this.nextRequest = nextRequest;
		return nextRequest;
	}
	,onResponse: function(response) {
		if(this.nextRequest == null) this.executeRequest(response);
		this.executed = true;
	}
	,executed: null
	,nextRequest: null
	,controller: null
	,__class__: com.wiris.quizzes.impl.ui.controller.QuizzesServiceRequestController
}
com.wiris.quizzes.impl.ui.controller.EvaluationRequestController = $hxClasses["com.wiris.quizzes.impl.ui.controller.EvaluationRequestController"] = function(controller) {
	com.wiris.quizzes.impl.ui.controller.QuizzesServiceRequestController.call(this,controller);
};
com.wiris.quizzes.impl.ui.controller.EvaluationRequestController.__name__ = ["com","wiris","quizzes","impl","ui","controller","EvaluationRequestController"];
com.wiris.quizzes.impl.ui.controller.EvaluationRequestController.__super__ = com.wiris.quizzes.impl.ui.controller.QuizzesServiceRequestController;
com.wiris.quizzes.impl.ui.controller.EvaluationRequestController.prototype = $extend(com.wiris.quizzes.impl.ui.controller.QuizzesServiceRequestController.prototype,{
	executeRequest: function(response) {
		this.controller.onEvaluationResponse(response);
	}
	,__class__: com.wiris.quizzes.impl.ui.controller.EvaluationRequestController
});
com.wiris.quizzes.impl.ui.controller.FeaturedAssertionsRequestController = $hxClasses["com.wiris.quizzes.impl.ui.controller.FeaturedAssertionsRequestController"] = function(controller,requestType) {
	com.wiris.quizzes.impl.ui.controller.QuizzesServiceRequestController.call(this,controller);
	this.requestType = requestType;
};
com.wiris.quizzes.impl.ui.controller.FeaturedAssertionsRequestController.__name__ = ["com","wiris","quizzes","impl","ui","controller","FeaturedAssertionsRequestController"];
com.wiris.quizzes.impl.ui.controller.FeaturedAssertionsRequestController.__super__ = com.wiris.quizzes.impl.ui.controller.QuizzesServiceRequestController;
com.wiris.quizzes.impl.ui.controller.FeaturedAssertionsRequestController.prototype = $extend(com.wiris.quizzes.impl.ui.controller.QuizzesServiceRequestController.prototype,{
	executeRequest: function(response) {
		this.controller.onFeaturedAssertionsResponse(response,this.requestType);
	}
	,requestType: null
	,__class__: com.wiris.quizzes.impl.ui.controller.FeaturedAssertionsRequestController
});
com.wiris.quizzes.impl.ui.controller.FeaturedSyntaxRequestController = $hxClasses["com.wiris.quizzes.impl.ui.controller.FeaturedSyntaxRequestController"] = function(controller,requestType) {
	com.wiris.quizzes.impl.ui.controller.QuizzesServiceRequestController.call(this,controller);
	this.requestType = requestType;
};
com.wiris.quizzes.impl.ui.controller.FeaturedSyntaxRequestController.__name__ = ["com","wiris","quizzes","impl","ui","controller","FeaturedSyntaxRequestController"];
com.wiris.quizzes.impl.ui.controller.FeaturedSyntaxRequestController.__super__ = com.wiris.quizzes.impl.ui.controller.QuizzesServiceRequestController;
com.wiris.quizzes.impl.ui.controller.FeaturedSyntaxRequestController.prototype = $extend(com.wiris.quizzes.impl.ui.controller.QuizzesServiceRequestController.prototype,{
	executeRequest: function(response) {
		this.controller.onFeaturedSyntaxResponse(response,this.requestType);
	}
	,requestType: null
	,__class__: com.wiris.quizzes.impl.ui.controller.FeaturedSyntaxRequestController
});
com.wiris.quizzes.impl.ui.controller.PollWirisCasServiceRequestController = $hxClasses["com.wiris.quizzes.impl.ui.controller.PollWirisCasServiceRequestController"] = function(wirisCasInput) {
	this.wirisCasInput = wirisCasInput;
};
com.wiris.quizzes.impl.ui.controller.PollWirisCasServiceRequestController.__name__ = ["com","wiris","quizzes","impl","ui","controller","PollWirisCasServiceRequestController"];
com.wiris.quizzes.impl.ui.controller.PollWirisCasServiceRequestController.__interfaces__ = [com.wiris.quizzes.impl.HttpListener];
com.wiris.quizzes.impl.ui.controller.PollWirisCasServiceRequestController.prototype = {
	onError: function(error) {
	}
	,onData: function(data) {
		var response = com.wiris.util.json.JSon.getHash(com.wiris.util.json.JSon.decode(data));
		this.wirisCasInput.sessionReceived(response);
	}
	,wirisCasInput: null
	,__class__: com.wiris.quizzes.impl.ui.controller.PollWirisCasServiceRequestController
}
com.wiris.quizzes.impl.ui.controller.QuizzesStudioController = $hxClasses["com.wiris.quizzes.impl.ui.controller.QuizzesStudioController"] = function(quizzesStudio) {
	this.updating = false;
	this.quizzesStudio = quizzesStudio;
	this.quizzesStudio.addActionListener(this);
	this.inputType = com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR;
	this.evaluationRequest = new com.wiris.quizzes.impl.ui.controller.EvaluationRequestController(this);
	this.variablesRequest = new com.wiris.quizzes.impl.ui.controller.VariablesRequestController(this);
	this.featuredSyntaxRequestController = new com.wiris.quizzes.impl.ui.controller.FeaturedSyntaxRequestController(this,com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.REQUEST_IGNORE_NON_COMPLIANT_PARTS);
	this.featuredAssertionsRequestController = new com.wiris.quizzes.impl.ui.controller.FeaturedAssertionsRequestController(this,com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.REQUEST_IGNORE_NON_COMPLIANT_PARTS);
	this.reservedWordsRequestController = new com.wiris.quizzes.impl.ui.controller.ReservedWordsRequestController(this);
};
com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.__name__ = ["com","wiris","quizzes","impl","ui","controller","QuizzesStudioController"];
com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.__interfaces__ = [com.wiris.quizzes.impl.HttpListener,com.wiris.util.ui.interaction.InputComponentListener,com.wiris.quizzes.impl.ui.controller.ReservedWordsConsumer,com.wiris.util.ui.interaction.ChangeListener,com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped = function(target,delimiter) {
	if(target != null && !(target == "")) {
		target = StringTools.replace(target,"\\,","\\comma");
		var result = target.split(delimiter);
		var _g1 = 0, _g = result.length;
		while(_g1 < _g) {
			var i = _g1++;
			var r = result[i];
			r = StringTools.trim(r);
			if(r == "\\comma") r = "\\,";
			result[i] = r;
		}
		return result;
	} else return new Array();
}
com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.prototype = {
	checkStudentAnswerParameter: function(algorithm) {
		var language = com.wiris.quizzes.impl.CalcDocumentTools.isCalc(algorithm)?com.wiris.quizzes.impl.CalcDocumentTools.calcSessionLang(algorithm):com.wiris.quizzes.impl.CalcDocumentTools.casSessionLang(algorithm);
		if(language == null) language = "en";
		var t = this.context.getGlobalContext().getTranslatorFromLang(language);
		var name = this.context.getQuestion().getProperty(com.wiris.quizzes.api.PropertyName.STUDENT_ANSWER_PARAMETER_NAME);
		var defName = this.context.getQuestion().defaultOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER_NAME);
		if(name == defName) name = t.t(name);
		var parameter = t.t("parameter");
		var beginSession = algorithm.indexOf("<session");
		var endSession = algorithm.indexOf("</session>") + "</session>".length;
		var session = HxOverrides.substr(algorithm,beginSession,endSession - beginSession);
		if(com.wiris.quizzes.impl.HTMLTools.hasCasSessionParameter(session,parameter,name)) this.context.getQuestion().setProperty(com.wiris.quizzes.api.PropertyName.STUDENT_ANSWER_PARAMETER,"true"); else this.context.getQuestion().setProperty(com.wiris.quizzes.api.PropertyName.STUDENT_ANSWER_PARAMETER,"false");
	}
	,onError: function(error) {
		haxe.Log.trace("Conversion to algorithm failed with error: " + error,{ fileName : "QuizzesStudioController.hx", lineNumber : 3020, className : "com.wiris.quizzes.impl.ui.controller.QuizzesStudioController", methodName : "onError"});
	}
	,wrapAlgorithmWithCalcSession: function(algorithm) {
		var lang = this.importCasSessionLang != null?this.importCasSessionLang:"en";
		return "<wiriscalc version=\"3.2\">\n" + "  <title>\n" + "    <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n" + "      <mtext>WirisQuizzes</mtext>\n" + "    </math>\n" + "  </title>\n" + "  <properties>\n" + "    <property name=\"lang\">" + lang + "</property>\n" + "  </properties>\n" + "  <session version=\"3.0\" lang=\"" + lang + "\">\n" + "    <task>\n" + "      <title>\n" + "        <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n" + "          <mtext>Sheet 1</mtext>\n" + "        </math>\n" + "      </title>\n" + "      <group>\n" + "        <algorithm>" + com.wiris.util.xml.WXmlUtils.escapeXmlEntities(algorithm) + "        </algorithm>\n" + "      </group>\n" + "    </task>\n" + "  </session>\n" + "</wiriscalc>";
	}
	,onData: function(data) {
		this.quizzesStudio.convertAlgorithm(this.wrapAlgorithmWithCalcSession(data));
	}
	,requestTranslationToAlgorithm: function(algorithm) {
		this.importCasSessionLang = com.wiris.quizzes.impl.CalcDocumentTools.casSessionLang(algorithm);
		var http = new com.wiris.quizzes.impl.HttpImpl(com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.CALC_URL) + "/session2algorithm",this);
		http.setAsync(true);
		http.setParameter("data",algorithm);
		http.setParameter("onlyLibrary","true");
		http.request(true);
	}
	,filterEmptyMathML: function(mathml) {
		if(com.wiris.quizzes.impl.MathContent.getMathType(mathml) == com.wiris.quizzes.impl.MathContent.TYPE_MATHML) {
			if(!com.wiris.quizzes.impl.MathContent.isEmpty(mathml)) return mathml; else return "";
		} else return mathml;
	}
	,algorithmEditorActionWithParams: function(name,parameters) {
		this.quizzesStudio.algorithmEditorActionWithParams(name,parameters);
	}
	,setContext: function(context) {
		this.context = context;
		this.generateStudioQuestions();
		if(this.checkQuestionDeprecated(this.context.getInputQuestionImpl(),this.context.getInputSlot().id,this.context.getInputAuthorAnswer().id)) this.loadQuestion(this.context.getInputQuestion(),this.context.getInputSlot(),this.context.getInputAuthorAnswer());
	}
	,setUpdating: function(updating) {
		this.updating = updating;
	}
	,updateStudioQuestion: function(question,slot,authorAnswer) {
		if(this.context == null) return;
		this.context.setQuestion(question);
		this.context.setSlot(slot);
		this.context.setAuthorAnswer(authorAnswer);
		this.context.generateQuestionInstance();
	}
	,areFeaturedOptionsCompatible: function() {
		return !(this.isFeaturedSyntaxChange() || this.isFeaturedAssertionsChange());
	}
	,cloneQuestion: function(q) {
		return com.wiris.quizzes.api.Quizzes.getInstance().readQuestion(q.serialize());
	}
	,isFeaturedAssertionsChange: function() {
		var comparison = this.context.getAuthorAnswer().getComparison();
		if(!com.wiris.system.ArrayEx.contains(this.context.getFeaturedAssertions(),comparison.name)) return true;
		var validations = this.context.getAuthorAnswer().getValidations();
		var _g = 0;
		while(_g < validations.length) {
			var validation = validations[_g];
			++_g;
			var validationA = validation;
			if(!com.wiris.system.ArrayEx.contains(this.context.getFeaturedAssertions(),validationA.name)) return true;
		}
		return false;
	}
	,hasDifferentDefaultsThanTheService: function(assertionName) {
		return assertionName == com.wiris.quizzes.impl.Assertion.PARAM_DECIMAL_SEPARATORS;
	}
	,isFeaturedSyntaxChange: function() {
		var syntax = this.context.getSlot().getSyntax();
		var assertionParams = syntax.parameters;
		if(assertionParams == null) return false;
		var _g = 0;
		while(_g < assertionParams.length) {
			var ap = assertionParams[_g];
			++_g;
			if(!com.wiris.system.ArrayEx.contains(this.context.getFeaturedParams(),ap.name) && !this.hasDifferentDefaultsThanTheService(ap.name)) return true;
		}
		return false;
	}
	,isToleranceTypeDigits: function() {
		return this.toleranceType == com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_SIGNIFICANT_FIGURES || this.toleranceType == com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_DECIMAL_PLACES;
	}
	,onFeaturedAssertionsResponse: function(response,requestType) {
		var questionResponseImpl = response;
		var assertionsResult = null;
		var i = 0;
		while(assertionsResult == null && i < questionResponseImpl.results.length) {
			var result = questionResponseImpl.results[i++];
			if(js.Boot.__instanceof(result,com.wiris.quizzes.impl.ResultGetFeaturedAssertions)) assertionsResult = result;
		}
		if(assertionsResult == null) return;
		var featuredAssertions = new Array();
		var _g1 = 0, _g = assertionsResult.assertions.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			featuredAssertions.push(assertionsResult.assertions[i1].name);
		}
		this.context.setFeaturedAssertions(featuredAssertions);
		if(requestType == com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.REQUEST_DISABLE_IF_NOT_COMPLIANT) {
			if(this.isFeaturedAssertionsChange()) this.context.setShowAllOptions(true);
		} else if(requestType == com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.REQUEST_OVERWRITE_IF_NOT_COMPLIANT) {
			var questionImpl = this.context.getQuestion().getImpl();
			i = questionImpl.getAssertionsLength() - 1;
			while(i >= 0) {
				var assertion = questionImpl.getAssertion(i);
				if(!assertion.isSyntactic() && !assertion.isEquivalence()) {
					if(com.wiris.util.type.Arrays.indexOfElement(this.context.getFeaturedAssertions(),assertion.name) < 0) this.removeValidationAssertion(com.wiris.quizzes.impl.QuizzesEnumUtils.string2ValidationName(assertion.name));
				} else if(assertion.isEquivalence()) {
					if(com.wiris.util.type.Arrays.indexOfElement(this.context.getFeaturedAssertions(),assertion.name) < 0) {
						var defaultComparison = com.wiris.quizzes.impl.ComparisonAssertion.getDefaultComparison(this.context.getSlot().getSyntax().getName());
						if(com.wiris.system.ArrayEx.contains(this.context.getFeaturedAssertions(),defaultComparison.name)) this.setComparisonAssertion(defaultComparison.getName()); else {
							var _g = 0;
							while(_g < featuredAssertions.length) {
								var candidate = featuredAssertions[_g];
								++_g;
								if(com.wiris.quizzes.impl.Assertion.isEquivalenceName(candidate)) {
									this.setComparisonAssertion(com.wiris.quizzes.impl.QuizzesEnumUtils.string2ComparisonName(candidate));
									break;
								}
							}
						}
					}
				}
				i--;
			}
		}
		if(this.quizzesStudio.isReady()) {
			this.quizzesStudio.showFeaturedValidationAssertions(this.context);
			this.updateCurrentActivity();
		}
	}
	,onFeaturedSyntaxResponse: function(response,requestType) {
		var questionResponseImpl = response;
		var syntaxResult = null;
		var i = 0;
		while(syntaxResult == null && i < questionResponseImpl.results.length) {
			var result = questionResponseImpl.results[i++];
			if(js.Boot.__instanceof(result,com.wiris.quizzes.impl.ResultGetFeaturedSyntaxAssertions)) syntaxResult = result;
		}
		if(syntaxResult == null || syntaxResult.assertions == null || syntaxResult.assertions.length == 0) return;
		var nAss = syntaxResult.assertions.length;
		var featuredParams = new Array();
		var _g = 0;
		while(_g < nAss) {
			var i1 = _g++;
			var _g2 = 0, _g1 = syntaxResult.assertions[i1].parameters.length;
			while(_g2 < _g1) {
				var j = _g2++;
				var paramName = syntaxResult.assertions[i1].parameters[j].name;
				featuredParams.push(paramName);
			}
		}
		this.context.setFeaturedParams(featuredParams);
		if(requestType == com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.REQUEST_DISABLE_IF_NOT_COMPLIANT) {
			if(this.isFeaturedSyntaxChange()) this.context.setShowAllOptions(true);
		} else if(requestType == com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.REQUEST_OVERWRITE_IF_NOT_COMPLIANT) {
			var syntax = this.context.getSlot().getSyntax();
			if(syntax.parameters != null) {
				var assertionParams = syntax.parameters;
				i = assertionParams.length - 1;
				while(i >= 0) {
					var param = assertionParams[i--];
					if(com.wiris.util.type.Arrays.indexOfElement(featuredParams,param.name) < 0) HxOverrides.remove(assertionParams,param);
				}
			}
		}
		if(this.quizzesStudio.isReady()) {
			this.quizzesStudio.showFeaturedSyntaxAssertions(this.context);
			this.updateCurrentActivity();
		}
	}
	,onEvaluationResponse: function(response) {
		this.context.getQuestionInstance().update(response);
		this.setPreviewAnswerFeedback(this.context.getQuestionInstance());
	}
	,onVariablesResponse: function(response) {
		var questionInstance = this.context.getQuestionInstance();
		questionInstance.update(response);
		this.updateCurrentActivity();
		this.setPreviewCorrectAnswer(this.getInstanceCorrectAnswer(),this.context.getQuestion().getAlgorithm() != null);
		this.setLoadingCorrectAnswer(false);
		this.context.setPreviewCorrectAnswerUpdated(true);
	}
	,stateChanged: function(e) {
		var source = e.getSource();
		if(js.Boot.__instanceof(source,com.wiris.util.ui.component.OpenFileDialog)) {
			var fileContent = com.wiris.system.Utf8.fromBytes(source.getFileContent().getData());
			var question = com.wiris.quizzes.api.Quizzes.getInstance().readQuestion(fileContent);
			var inputSlotId = this.context.getInputSlot().id;
			var inputAuthorAnswerId = this.context.getInputAuthorAnswer().id;
			if(this.context.getHomePageStatusGettingStarted() == com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_GETTING_STARTED) this.context.setHomePageStatusGettingStarted(com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_MAIN_CONTENT);
			if(this.checkQuestionDeprecated(question,inputSlotId,inputAuthorAnswerId)) this.loadImportedQuestion(question,inputSlotId,inputAuthorAnswerId);
		}
	}
	,loadImportedQuestion: function(question,slotId,authorAnswerId) {
		var slot = null;
		var authorAnswer = null;
		var questionImpl = question.getImpl();
		questionImpl.forceSlotStructure();
		var slots = question.getSlots();
		var _g = 0;
		while(_g < slots.length) {
			var s = slots[_g];
			++_g;
			var sImpl = s;
			if(sImpl.id == slotId) {
				slot = s;
				var authorAnswers = s.getAuthorAnswers();
				var _g1 = 0;
				while(_g1 < authorAnswers.length) {
					var aa = authorAnswers[_g1];
					++_g1;
					var aaImpl = aa;
					if(aaImpl.id == authorAnswerId) authorAnswer = aa;
				}
				break;
			}
		}
		if(slot == null) {
			slot = question.addNewSlot();
			authorAnswer = slot.addNewAuthorAnswer("");
		} else if(authorAnswer == null) authorAnswer = slot.addNewAuthorAnswer("");
		this.loadQuestion(question,slot,authorAnswer);
	}
	,setGradingFunctionName: function(value) {
		this.functionName = value;
		this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.FUNCTION_NAME,this.functionName);
	}
	,setElementsToGradeParameter: function(active) {
		var paramValue = com.wiris.util.json.JSon.encode(active);
		this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.ELEMENTS_TO_GRADE,paramValue);
		if(this.context.getAuthorAnswer().getValidation(com.wiris.quizzes.api.assertion.ValidationName.CHECK_COLOR) != null) this.setValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_COLOR,com.wiris.quizzes.api.assertion.ValidationParameterName.ELEMENTS_TO_GRADE,paramValue);
		if(this.context.getAuthorAnswer().getValidation(com.wiris.quizzes.api.assertion.ValidationName.CHECK_LINE_STYLE) != null) this.setValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_LINE_STYLE,com.wiris.quizzes.api.assertion.ValidationParameterName.ELEMENTS_TO_GRADE,paramValue);
		var isSketch = this.context.getSlot().getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE) == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH;
		if(isSketch) this.context.getSlot().setProperty(com.wiris.quizzes.api.PropertyName.ELEMENTS_TO_HANDWRITE,paramValue);
	}
	,updateCompoundInitialContent: function() {
		var slot = this.context.getSlot();
		var authorAnswers = slot.getAuthorAnswers();
		if(authorAnswers.length == 0) return;
		var model = authorAnswers[0];
		var correctAnswer = model.getValue();
		var initialContent = slot.getInitialContent();
		var isPreviousInitialContentLocked = this.context.isInitialContentLocked();
		var newInitialContent = com.wiris.quizzes.impl.CompoundAnswerParser.getCompoundInitialContent(correctAnswer,initialContent,true);
		slot.setInitialContent(newInitialContent);
		this.setLockInitialContent(isPreviousInitialContentLocked);
	}
	,isNodeNameBlank: function(nodeName) {
		return nodeName == "mrow" || nodeName == "msqrt";
	}
	,lockInitialContentImpl: function(mathml,locked) {
		if(mathml.nodeType == Xml.Document) this.lockInitialContentImpl(mathml.firstElement(),locked); else if(mathml.nodeType == Xml.Element) {
			if(mathml.getNodeName() == "math") {
				if(locked) {
					mathml.set(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.WRS_POSITIONABLE,"false");
					mathml.set(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.WRS_XMLNS,"http://www.wiris.com/xml/mathml-extension");
				} else {
					mathml.remove(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.WRS_POSITIONABLE);
					mathml.remove(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.WRS_XMLNS);
				}
			}
			if(this.isNodeNameBlank(mathml.getNodeName())) {
				if(mathml.firstElement() == null) {
					if(locked) mathml.set(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.WRS_POSITIONABLE,"true"); else mathml.remove(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.WRS_POSITIONABLE);
				} else if(mathml.get(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.WRS_POSITIONABLE) != null) mathml.remove(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.WRS_POSITIONABLE);
			} else if(mathml.getNodeName() == "mtable") {
				if(locked) mathml.set(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.WRS_POSITIONABLE,"true"); else mathml.remove(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.WRS_POSITIONABLE);
			}
			var elems = mathml.elements();
			while(elems.hasNext()) this.lockInitialContentImpl(elems.next(),locked);
		}
	}
	,setLockInitialContent: function(locked) {
		if(this.context.getSlot().getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.MATH) {
			var value = this.context.getSlot().getInitialContent();
			if(value == null || value == "") value = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.EMPTY_MATHML;
			if(com.wiris.quizzes.impl.MathContent.TYPE_MATHML == com.wiris.quizzes.impl.MathContent.getMathType(value)) {
				var mathml = com.wiris.util.xml.WXmlUtils.parseXML(value);
				this.lockInitialContentImpl(mathml,locked);
				this.setInitialContent(com.wiris.util.xml.WXmlUtils.serializeXML(mathml));
			}
		} else if(this.context.getSlot().getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC) this.setProperty(com.wiris.quizzes.api.PropertyName.GRAPH_LOCK_INITIAL_CONTENT,locked?"true":"false");
	}
	,isEmptyMathML: function(mathml) {
		if(mathml == null || mathml == "") return true;
		try {
			return com.wiris.util.xml.MathMLUtils.isEmptyMathML(com.wiris.util.xml.WXmlUtils.safeParseXML(mathml));
		} catch( t ) {
			return false;
		}
	}
	,getEvaluateTemplateMathML: function() {
		return "<math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mi>" + com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().t(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.EVALUATE_KEYWORD) + "</mi><mfenced><mrow/></mfenced></math>";
	}
	,changeToGraphQuestion: function(sketch) {
		var destinationQuestion = sketch?this.sketchQuestion:this.graphicQuestion;
		var destinationSlot = sketch?this.sketchSlot:this.graphSlot;
		var destinationAuthorAnswer = sketch?this.sketchAuthorAnswer:this.graphAuthorAnswer;
		this.updateStudioQuestion(destinationQuestion,destinationSlot,destinationAuthorAnswer);
		this.loadGraphicQuestion(destinationSlot,destinationAuthorAnswer);
		this.context.setHomePageStatusGettingStarted(com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_MAIN_CONTENT);
		this.updateCurrentActivity();
	}
	,actionPerformed: function(e) {
		if(this.updating || this.context == null) return;
		var source = e.getSource();
		var action = e.getAction();
		var actionId = action.getId();
		var command = action.getCommand();
		if(actionId == com.wiris.quizzes.impl.ui.AuthoringFieldImpl.AUTHORING_FIELD_CONTENT_CHANGED || actionId == com.wiris.quizzes.impl.ui.AuthoringFieldImpl.AUTHORING_FIELD_CONTENT_CHANGE_STARTED) return;
		if("allOptions" == actionId) {
			if(source.isSelected()) {
				this.context.setShowAllOptions(true);
				if(this.quizzesStudio.isReady()) {
					this.quizzesStudio.showAllSyntaxAssertions();
					this.quizzesStudio.showAllValidationAssertions();
					this.updateCurrentActivity();
				}
			}
		} else if("relevantOptions" == actionId) {
			if(source.isSelected()) {
				if(this.areFeaturedOptionsCompatible()) {
					this.context.setShowAllOptions(false);
					if(this.quizzesStudio.isReady()) {
						this.updateFeaturedSyntaxAssertions(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.REQUEST_IGNORE_NON_COMPLIANT_PARTS);
						this.updateFeaturedValidationAssertions(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.REQUEST_IGNORE_NON_COMPLIANT_PARTS);
					}
				} else if(this.quizzesStudio.isReady()) this.quizzesStudio.showConfirmRelevantOptionsDialog();
			}
		} else if("confirmRelevantOptions" == actionId) {
			this.context.setShowAllOptions(false);
			if(this.quizzesStudio.isReady()) {
				this.updateFeaturedSyntaxAssertions(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.REQUEST_OVERWRITE_IF_NOT_COMPLIANT);
				this.updateFeaturedValidationAssertions(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.REQUEST_OVERWRITE_IF_NOT_COMPLIANT);
			}
		} else if("cancelRelevantOptions" == actionId) this.quizzesStudio.cancelShowRelevantOptions(); else if("closeStudio" == actionId) {
			com.wiris.quizzes.impl.QuizzesImpl.getInstance().getTracker().studioClosed(this.context.getQuestion(),this.quizzesStudio.getCurrentActivityId(),com.wiris.quizzes.telemetry.QuizzesTracker.VALUE_CANCEL);
			this.quizzesStudio.closeStudio();
		} else if("saveStudio" == actionId) {
			com.wiris.quizzes.impl.QuizzesImpl.getInstance().getTracker().studioClosed(this.context.getQuestion(),this.quizzesStudio.getCurrentActivityId(),com.wiris.quizzes.telemetry.QuizzesTracker.VALUE_CANCEL);
			this.saveQuestion();
			this.quizzesStudio.closeStudio();
		} else if("easyModalCloseStudio" == actionId) com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.getInstance().closeButtonPressed(); else if("showActivity" == actionId) {
			if(command == com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_HOME_ID || command == com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VIEW_SOURCE_ID || command == com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_TEST_QUESTION_ID) this.updateReservedWords();
			this.showActivity(command);
			if(command == com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_TEST_QUESTION_ID) this.updatePreviewCorrectAnswer();
		} else if("goBack" == actionId) {
			this.updateReservedWords();
			this.showPreviousActivity();
		} else if("import" == actionId) this.requestImportFile(); else if("export" == actionId) this.requestExportFile(); else if("viewSource" == actionId) this.showActivity(com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VIEW_SOURCE_ID); else if("help" == actionId) com.wiris.quizzes.impl.QuizzesImpl.getInstance().getTracker().helpRequested(this.context.getQuestion(),this.quizzesStudio.getCurrentActivityId()); else if("confirmImport" == actionId) this.loadImportedQuestion(this.tempImportQuestion,this.tempImportSlot,this.tempImportAuthorAnswer); else if("algorithmChanged" == actionId) {
			var algorithm = source.getValue();
			this.checkStudentAnswerParameter(algorithm);
			this.context.getQuestion().setAlgorithm(algorithm);
		} else if("convertAlgorithm" == actionId) this.quizzesStudio.convertAlgorithm(this.context.getQuestion().getAlgorithm()); else if("convertAsAlgorithm" == actionId) {
			var algorithm = this.context.getQuestion().getAlgorithm();
			this.requestTranslationToAlgorithm(algorithm);
		} else if("initialContentSelected" == actionId) {
			if(source.isSelected()) {
				this.context.setHomePageStatusCorrectAnswerInitialContent(com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_INITIAL_CONTENT);
				this.updateCurrentActivity();
			}
		} else if("correctAnswerSelected" == actionId) {
			if(source.isSelected()) {
				this.context.setHomePageStatusCorrectAnswerInitialContent(com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_CORRECT_ANSWER);
				this.updateCurrentActivity();
			}
		} else if("auxiliaryInitialContentChanged" == actionId) {
			var algorithm = source.getValue();
			this.auxiliaryInitialContent = algorithm;
			this.setProperty(com.wiris.quizzes.api.PropertyName.CAS_SESSION,algorithm);
		} else if("mainContentChanged" == actionId) {
			var value = source.getValue();
			if(com.wiris.quizzes.impl.MathContent.getMathType(value) == com.wiris.quizzes.impl.MathContent.TYPE_GEOMETRY_FILE && this.context.getSlot().getSyntax().getName() != com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC) return;
			if(this.context.getHomePageStatusCorrectAnswerInitialContent() == com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_INITIAL_CONTENT) {
				var initialContentLocked = this.context.isInitialContentLocked();
				this.setInitialContent(this.filterEmptyMathML(value));
				if(this.context.getSlot().getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC) {
					if(this.context.getSlot().getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE) == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH) this.graphSlot.setInitialContent(this.filterEmptyMathML(value)); else if(this.context.getSlot().getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE) == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD) this.sketchSlot.setInitialContent(this.filterEmptyMathML(value));
				}
				if(initialContentLocked) this.setLockInitialContent(true);
			} else {
				this.setStudioCorrectAnswer(this.filterEmptyMathML(value));
				this.context.setPreviewCorrectAnswerUpdated(false);
				if(this.context.getSlot().getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC) {
					if(this.context.getSlot().getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE) == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH) this.graphAuthorAnswer.setValue(this.filterEmptyMathML(value)); else if(this.context.getSlot().getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE) == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD) this.sketchAuthorAnswer.setValue(this.filterEmptyMathML(value));
				}
				if(this.context.getSlot().getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.MATH) {
					if("true" == this.context.getSlot().getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER)) this.updateCompoundInitialContent();
					if(!this.context.isShowAllOptions()) {
						this.updateFeaturedSyntaxAssertions(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.REQUEST_DISABLE_IF_NOT_COMPLIANT);
						this.updateFeaturedValidationAssertions(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.REQUEST_DISABLE_IF_NOT_COMPLIANT);
					}
				}
				if(js.Boot.__instanceof(source,com.wiris.quizzes.impl.ui.component.GraphInputComponent)) {
					var correctAnswerGraph = source;
					var correctAnswerPlotter = correctAnswerGraph.getGraph().getGraphModel().getDisplay();
					var graphMode = this.context.getSlot().getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE);
					var isSketchMode = graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH;
					var correctAnswerElements = correctAnswerPlotter.getElementsThatCanBeGraded(this.admissibleElementsConfiguration(false,false,true,false,isSketchMode));
					var previousGraphElements = this.context.getGraphicalElements();
					var graphElements = new Hash();
					var validationPlotter = correctAnswerGraph.getGraph().getGraphModel().getDisplay();
					var _g = 0;
					while(_g < correctAnswerElements.length) {
						var elem = correctAnswerElements[_g];
						++_g;
						var elementSummary = validationPlotter.getElementSummary(elem);
						if(isSketchMode && elementSummary.getType() == com.wiris.util.geometry.GeometryElement.POINT) graphElements.set(elem,-1.0); else {
							var ratio = previousGraphElements.exists(elem)?previousGraphElements.get(elem):0.0;
							graphElements.set(elem,ratio);
						}
					}
					this.context.setGraphicalElements(graphElements);
					var graphActiveElements = this.context.getGraphicalElementsActive();
					this.setElementsToGradeParameter(graphActiveElements);
					if(graphActiveElements.length > 1 && !(graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH)) this.setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER,com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE); else this.setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER,com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_FALSE);
					var graphRatios = this.context.getGraphicalRatios();
					if(this.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE) == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTE) this.context.getSlot().setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE_DISTRIBUTION,graphRatios.join(" "));
				}
			}
		} else if("graphToolbarChanged" == actionId) {
			var graphDefinition = source.computeGraphToolbarDefinition();
			this.context.getSlot().setProperty(com.wiris.quizzes.api.PropertyName.GRAPH_TOOLBAR,graphDefinition.serialize());
			this.updateCurrentActivity();
		} else if("studentAnswerChanged" == actionId) {
			var studentAnswer = source.getValue();
			this.updatePreviewAnswerFeedback(studentAnswer);
		} else if("reloadAnswer" == actionId) {
			this.context.setPreviewCorrectAnswerUpdated(false);
			this.context.generateQuestionInstance();
			this.updatePreviewCorrectAnswer();
		} else if("copyAnswer" == actionId) {
			var correctAnswer = this.getInstanceCorrectAnswer();
			var isSketch = this.context.getSlot().getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE) == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH;
			this.copyCorrectAnswer(correctAnswer);
			if(!isSketch) this.updatePreviewAnswerFeedback(correctAnswer);
		} else if("mathEditorEmbedded" == actionId) {
			if(source.isSelected()) {
				this.inputType = com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR;
				this.context.getSlot().setAnswerFieldType(this.inputType);
				this.updateCurrentActivity();
			}
		} else if("mathEditorPopup" == actionId) {
			if(source.isSelected()) {
				this.inputType = com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR;
				this.context.getSlot().setAnswerFieldType(this.inputType);
				this.updateCurrentActivity();
			}
		} else if("plainText" == actionId) {
			if(source.isSelected()) {
				this.inputType = com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD;
				this.context.getSlot().setAnswerFieldType(this.inputType);
				this.updateCurrentActivity();
			}
		} else if("graphValidationChanged" == actionId) {
			if(js.Boot.__instanceof(source,com.wiris.quizzes.impl.ui.component.GraphInputComponent)) {
				var graphModel = source.getGraph().getGraphModel();
				var graphWidth = Std.parseFloat(Std.string(graphModel.getDisplay().getOptionDictionary().get("width")) + "");
				this.quizzesStudio.updateGraphicalMaxTolerance(graphWidth);
				this.quizzesStudio.updateGraphElementTolerances(this.context);
			} else if(js.Boot.__instanceof(source,com.wiris.quizzes.impl.ui.component.GraphValidationSelector)) {
				var selector = source;
				var graphMode = this.context.getSlot().getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE);
				if(selector.activeElements() > 1 && !(graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH)) this.context.getSlot().setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER,com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE); else this.context.getSlot().setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER,com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_FALSE);
				var graphElements = selector.getGraphicalElements();
				this.context.setGraphicalElements(graphElements);
				if(selector.areValuesDistributed()) {
					var graphRatios = this.context.getGraphicalRatios();
					this.context.getSlot().setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE,com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTE);
					this.context.getSlot().setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE_DISTRIBUTION,graphRatios.join(" "));
				} else {
					this.context.getSlot().setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE,com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_GRADE_AND);
					this.context.getSlot().setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE_DISTRIBUTION,null);
				}
				var graphActiveElements = this.context.getGraphicalElementsActive();
				this.setElementsToGradeParameter(graphActiveElements);
				this.quizzesStudio.updateGraphElementTolerances(this.context);
			}
		} else if("tolerance" == actionId) {
			var value = source.getValue();
			this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE,value);
			this.tolerance = Std.parseFloat(value);
			this.quizzesStudio.updateGraphElementTolerances(this.context);
		} else if("superfluous" == actionId) {
			var superfluous = source.isSelected();
			if(superfluous) this.addValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_NO_SUPERFLUOUS); else this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_NO_SUPERFLUOUS);
		} else if("matchLineType" == actionId) {
			var matchLineType = source.isSelected();
			if(matchLineType) {
				this.addValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_LINE_STYLE);
				var graphActiveElements = this.context.getGraphicalElementsActive();
				if(graphActiveElements.length > 0) this.setValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_LINE_STYLE,com.wiris.quizzes.api.assertion.ValidationParameterName.ELEMENTS_TO_GRADE,com.wiris.util.json.JSon.encode(graphActiveElements));
			} else this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_LINE_STYLE);
		} else if("matchColor" == actionId) {
			var matchColor = source.isSelected();
			if(matchColor) {
				this.addValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_COLOR);
				var graphActiveElements = this.context.getGraphicalElementsActive();
				if(graphActiveElements.length > 0) this.setValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_COLOR,com.wiris.quizzes.api.assertion.ValidationParameterName.ELEMENTS_TO_GRADE,com.wiris.util.json.JSon.encode(graphActiveElements));
			} else this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_COLOR);
		} else if(com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_FOCUS_GRAPH_ELEMENT == actionId) this.quizzesStudio.focusGraphElement(command); else if(com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_UNFOCUS_GRAPH_ELEMENT == actionId) this.quizzesStudio.unfocusGraphElement(command); else if("simplified" == actionId) {
			if(source.isSelected()) this.addValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_SIMPLIFIED); else this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_SIMPLIFIED);
		} else if("expanded" == actionId) {
			if(source.isSelected()) this.addValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_EXPANDED); else this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_EXPANDED);
		} else if("factorized" == actionId) {
			if(source.isSelected()) this.addValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_FACTORIZED); else this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_FACTORIZED);
		} else if("commonFactor" == actionId) {
			if(source.isSelected()) this.addValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_NO_COMMON_FACTOR); else this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_NO_COMMON_FACTOR);
		} else if("commonDenominator" == actionId) {
			if(source.isSelected()) this.addValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_COMMON_DENOMINATOR); else this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_COMMON_DENOMINATOR);
		} else if("rationalized" == actionId) {
			if(source.isSelected()) this.addValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_RATIONALIZED); else this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_RATIONALIZED);
		} else if("minimalRadicands" == actionId) {
			if(source.isSelected()) this.addValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_MINIMAL_RADICANDS); else this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_MINIMAL_RADICANDS);
		} else if("mixedFractions" == actionId) {
			if(source.isSelected()) this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.MIXED_FRACTIONS,"true"); else this.removeSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.MIXED_FRACTIONS);
		} else if("lists" == actionId) {
			if(source.isSelected()) {
				this.removeSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.LIST_OPERATORS);
				this.removeSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GROUP_OPERATORS);
			} else {
				this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.LIST_OPERATORS,"");
				this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GROUP_OPERATORS,"(,[,{");
			}
		} else if("listsWithoutEnclosers" == actionId) {
			if(source.isSelected()) this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.NO_BRACKETS_LIST,"true"); else this.removeSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.NO_BRACKETS_LIST);
		} else if("intervals" == actionId) {
			if(source.isSelected()) this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.INTERVALS,"true"); else this.removeSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.INTERVALS);
		} else if("ratios" == actionId) {
			if(source.isSelected()) this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.RATIO,"true"); else this.removeSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.RATIO);
		} else if("computerScientificNotation" == actionId) {
			if(source.isSelected()) this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.SCIENTIFIC_NOTATION,"true"); else this.removeSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.SCIENTIFIC_NOTATION);
		} else if("pointSeparator" == actionId) {
			var value = source.getValue();
			if(!(this.pointSeparator == value)) {
				this.pointSeparator = value;
				this.recalculateSeparators();
			}
		} else if("commaSeparator" == actionId) {
			var value = source.getValue();
			if(!(this.commaSeparator == value)) {
				this.commaSeparator = value;
				this.recalculateSeparators();
			}
		} else if("spaceSeparator" == actionId) {
			var value = source.getValue();
			if(!(this.spaceSeparator == value)) {
				this.spaceSeparator = value;
				this.recalculateSeparators();
			}
		} else if("literallyEqual" == actionId) {
			if(source.isSelected()) this.setComparisonAssertion(com.wiris.quizzes.api.assertion.ComparisonName.LITERALLY_EQUAL);
		} else if("mathematicallyEqual" == actionId) {
			if(source.isSelected()) this.setComparisonAssertion(com.wiris.quizzes.api.assertion.ComparisonName.MATHEMATICALLY_EQUAL);
		} else if("equivalentEquations" == actionId) {
			if(source.isSelected()) this.setComparisonAssertion(com.wiris.quizzes.api.assertion.ComparisonName.EQUIVALENT_EQUATIONS);
		} else if("anyAnswer" == actionId) {
			if(source.isSelected()) this.setComparisonAssertion(com.wiris.quizzes.api.assertion.ComparisonName.ANY_ANSWER);
		} else if("customGradingFunction" == actionId) {
			if(source.isSelected()) this.setComparisonAssertion(com.wiris.quizzes.api.assertion.ComparisonName.GRADING_FUNCTION);
		} else if("auxiliaryCasHideFileMenu" == actionId) {
			if(source.isSelected()) this.setProperty(com.wiris.quizzes.api.PropertyName.AUXILIARY_CAS_HIDE_FILE_MENU,com.wiris.quizzes.impl.LocalData.VALUE_AUXILIARY_CAS_HIDE_FILE_MENU_TRUE); else this.setProperty(com.wiris.quizzes.api.PropertyName.AUXILIARY_CAS_HIDE_FILE_MENU,com.wiris.quizzes.impl.LocalData.VALUE_AUXILIARY_CAS_HIDE_FILE_MENU_FALSE);
		} else if("orderAndRepetitionMatters" == actionId) {
			if(source.isSelected()) {
				this.orderMatters = true;
				this.repetitionMatters = true;
				this.removeComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.ORDER_MATTERS);
				this.removeComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.REPETITION_MATTERS);
			}
		} else if("repetitionMatters" == actionId) {
			if(source.isSelected()) {
				this.orderMatters = false;
				this.repetitionMatters = true;
				this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.ORDER_MATTERS,"false");
				this.removeComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.REPETITION_MATTERS);
			}
		} else if("unrestrictedLists" == actionId) {
			if(source.isSelected()) {
				this.orderMatters = false;
				this.repetitionMatters = false;
				this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.ORDER_MATTERS,"false");
				this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.REPETITION_MATTERS,"false");
			}
		} else if("functionName" == actionId) {
			var value = source.getValue();
			if(!(value == "functionName")) this.setGradingFunctionName(value);
		} else if("argumentsUnevaluated" == actionId) {
			this.functionArgumentMode = source.getValue();
			this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.FUNCTION_ARGUMENT_MODE,this.functionArgumentMode);
		} else if("scientificNotation" == actionId) {
			if(source.isSelected()) {
				this.notation = com.wiris.quizzes.api.assertion.ValidationName.CHECK_SCIENTIFIC_NOTATION;
				this.anyNotation = false;
				this.addValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_SCIENTIFIC_NOTATION);
				this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_DECIMAL_NOTATION);
			}
		} else if("decimalNotation" == actionId) {
			if(source.isSelected()) {
				this.notation = com.wiris.quizzes.api.assertion.ValidationName.CHECK_DECIMAL_NOTATION;
				this.anyNotation = false;
				this.addValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_DECIMAL_NOTATION);
				this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_SCIENTIFIC_NOTATION);
			}
		} else if("anyNotation" == actionId) {
			if(source.isSelected()) {
				this.anyNotation = true;
				this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_SCIENTIFIC_NOTATION);
				this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_DECIMAL_NOTATION);
			}
		} else if("gradeAnswersSeparately" == actionId) {
			if(source.isSelected()) {
				this.setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER,com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE);
				this.updateCompoundInitialContent();
				if(!(this.gradeDistribution == com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_COMPOUND_ANSWER_GRADE_AND)) this.setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE,this.gradeDistribution);
				if(this.inputType == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR) {
					this.inputType = com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR;
					this.context.getSlot().setAnswerFieldType(this.inputType);
				}
			} else this.setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER,com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_FALSE);
			this.updateCurrentActivity();
		} else if("allAnswersCorrect" == actionId) {
			if(source.isSelected()) {
				this.gradeDistribution = com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_COMPOUND_ANSWER_GRADE_AND;
				this.setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE,com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_COMPOUND_ANSWER_GRADE_AND);
				this.removeProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE_DISTRIBUTION);
			} else {
				this.gradeDistribution = com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_COMPOUND_ANSWER_GRADE_DISTRIBUTE;
				this.setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE,com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_COMPOUND_ANSWER_GRADE_DISTRIBUTE);
				if(this.compoundRatios.length > 0) this.setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE_DISTRIBUTION,this.compoundRatios.join(" "));
			}
		} else if("equation" == actionId) {
			if(source.isSelected()) {
				this.mathQuestion.setAlgorithm(this.context.getQuestion().getAlgorithm());
				this.updateStudioQuestion(this.mathQuestion,this.mathSlot,this.mathAuthorAnswer);
				this.context.setHomePageStatusGettingStarted(com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_MAIN_CONTENT);
				this.updateCurrentActivity();
			}
		} else if("text" == actionId) {
			if(source.isSelected()) {
				this.textQuestion.setAlgorithm(this.context.getQuestion().getAlgorithm());
				this.updateStudioQuestion(this.textQuestion,this.textSlot,this.textAuthorAnswer);
				this.context.setHomePageStatusGettingStarted(com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_MAIN_CONTENT);
				this.updateCurrentActivity();
			}
		} else if("geometry" == actionId) {
			if(source.isSelected()) this.changeToGraphQuestion(false);
		} else if("sketch" == actionId) {
			if(source.isSelected()) this.changeToGraphQuestion(true);
		} else if("barChart" == actionId) {
			if(source.isSelected()) {
				this.barChartQuestion.setAlgorithm(this.context.getQuestion().getAlgorithm());
				this.updateStudioQuestion(this.barChartQuestion,this.barChartSlot,this.barChartAuthorAnswer);
				this.loadGraphicQuestion(this.barChartSlot,this.barChartAuthorAnswer);
				this.context.setHomePageStatusGettingStarted(com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_MAIN_CONTENT);
				this.updateCurrentActivity();
			}
		} else if("lineChart" == actionId) {
			if(source.isSelected()) {
				this.lineChartQuestion.setAlgorithm(this.context.getQuestion().getAlgorithm());
				this.updateStudioQuestion(this.lineChartQuestion,this.lineChartSlot,this.lineChartAuthorAnswer);
				this.loadGraphicQuestion(this.lineChartSlot,this.lineChartAuthorAnswer);
				this.context.setHomePageStatusGettingStarted(com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_MAIN_CONTENT);
				this.updateCurrentActivity();
			}
		} else if("pieChart" == actionId) {
			if(source.isSelected()) {
				this.pieChartQuestion.setAlgorithm(this.context.getQuestion().getAlgorithm());
				this.updateStudioQuestion(this.pieChartQuestion,this.pieChartSlot,this.pieChartAuthorAnswer);
				this.loadGraphicQuestion(this.pieChartSlot,this.pieChartAuthorAnswer);
				this.context.setHomePageStatusGettingStarted(com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_MAIN_CONTENT);
				this.updateCurrentActivity();
			}
		} else if("gettingStarted" == actionId) {
			if(source.isSelected()) {
				this.context.setHomePageStatusGettingStarted(com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_GETTING_STARTED);
				this.updateCurrentActivity();
			}
		} else if(StringTools.startsWith(actionId,"measureUnits")) {
			if("measureUnitsDegree" == actionId) {
				if(source.isSelected()) {
					this.units.push(com.wiris.system.Utf8.uchr(176));
					this.units.push("'");
					this.units.push("\"");
				} else {
					HxOverrides.remove(this.units,com.wiris.system.Utf8.uchr(176));
					HxOverrides.remove(this.units,"'");
					HxOverrides.remove(this.units,"\"");
				}
				this.recalculateSeparators();
				this.setUnitsSyntaxParameter();
			} else if("measureUnitsPercent" == actionId) {
				if(source.isSelected()) {
					this.units.push("%");
					this.units.push(com.wiris.system.Utf8.uchr(8240));
				} else {
					HxOverrides.remove(this.units,"%");
					HxOverrides.remove(this.units,com.wiris.system.Utf8.uchr(8240));
				}
				this.setUnitsSyntaxParameter();
			} else if("measureUnitsMoney" == actionId) {
				if(source.isSelected()) {
					this.units.push("$");
					this.units.push(com.wiris.system.Utf8.uchr(165));
					this.units.push(com.wiris.system.Utf8.uchr(8364));
					this.units.push(com.wiris.system.Utf8.uchr(163));
					this.units.push("kr");
					this.units.push("Fr");
					this.units.push(com.wiris.system.Utf8.uchr(8361));
					this.units.push(com.wiris.system.Utf8.uchr(8377));
					this.units.push("руб");
					this.units.push("BTC");
				} else {
					HxOverrides.remove(this.units,"$");
					HxOverrides.remove(this.units,com.wiris.system.Utf8.uchr(165));
					HxOverrides.remove(this.units,com.wiris.system.Utf8.uchr(8364));
					HxOverrides.remove(this.units,com.wiris.system.Utf8.uchr(163));
					HxOverrides.remove(this.units,"kr");
					HxOverrides.remove(this.units,"Fr");
					HxOverrides.remove(this.units,com.wiris.system.Utf8.uchr(8361));
					HxOverrides.remove(this.units,com.wiris.system.Utf8.uchr(8377));
					HxOverrides.remove(this.units,"руб");
					HxOverrides.remove(this.units,"BTC");
				}
			} else if("measureUnitsMoreUnits" == actionId) this.quizzesStudio.showAllUnits(); else {
				var unit = actionId.substring("measureUnits".length).toLowerCase();
				var pos = com.wiris.util.type.Arrays.indexOfElementArray(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.MEASURE_UNITS_MAIN,unit);
				var symbol = null;
				if(pos != -1) symbol = com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.MEASURE_UNITS_MAIN_SYMBOLS[pos]; else {
					pos = com.wiris.util.type.Arrays.indexOfElementArray(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.MEASURE_UNITS_SECONDARY,unit);
					if(pos != -1) symbol = com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.MEASURE_UNITS_SECONDARY_SYMBOLS[pos];
				}
				if(symbol != null) {
					if(source.isSelected()) this.units.push(symbol); else HxOverrides.remove(this.units,symbol);
				}
			}
			this.setUnitsSyntaxParameter();
		} else if(StringTools.startsWith(actionId,"unitPrefixes")) {
			if("unitPrefixesMorePrefixes" == actionId) this.quizzesStudio.showAllUnitPrefixes(); else {
				var prefix = actionId.substring("unitPrefixes".length).toLowerCase();
				var pos = com.wiris.util.type.Arrays.indexOfElementArray(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.UNIT_PREFIXES_MAIN,prefix);
				var symbol = null;
				if(pos != -1) symbol = com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.UNIT_PREFIXES_MAIN_SYMBOLS[pos]; else {
					pos = com.wiris.util.type.Arrays.indexOfElementArray(com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.UNIT_PREFIXES_SECONDARY,prefix);
					if(pos != -1) symbol = com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.UNIT_PREFIXES_SECONDARY_SYMBOLS[pos];
				}
				if(symbol != null) {
					if(source.isSelected()) this.unitPrefixes.push(symbol); else HxOverrides.remove(this.unitPrefixes,symbol);
				}
				this.setUnitPrefixesSyntaxParameter();
			}
		} else if("constantPi" == actionId) {
			if(source.isSelected()) this.constants.push(com.wiris.system.Utf8.uchr(960)); else HxOverrides.remove(this.constants,com.wiris.system.Utf8.uchr(960));
			this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.CONSTANTS,this.constants.join(","));
		} else if("constantE" == actionId) {
			if(source.isSelected()) this.constants.push("e"); else HxOverrides.remove(this.constants,"e");
			this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.CONSTANTS,this.constants.join(","));
		} else if("constantI" == actionId) {
			if(source.isSelected()) this.constants.push("i"); else HxOverrides.remove(this.constants,"i");
			this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.CONSTANTS,this.constants.join(","));
			this.updateCalcmeImaginaryUnitRestrictions();
		} else if("constantJ" == actionId) {
			if(source.isSelected()) this.constants.push("j"); else HxOverrides.remove(this.constants,"j");
			this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.CONSTANTS,this.constants.join(","));
			this.updateCalcmeImaginaryUnitRestrictions();
		} else if("constantMoreConstants" == actionId) this.quizzesStudio.showAllConstants(); else if(StringTools.startsWith(actionId,"constant")) {
			if(source.isSelected()) this.constants.push(source.getSelectableId()); else HxOverrides.remove(this.constants,source.getSelectableId());
			this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.CONSTANTS,this.constants.join(","));
		} else if("functionExpLog" == actionId) {
			if(source.isSelected()) {
				this.functions.push("exp");
				this.functions.push("ln");
				this.functions.push("log");
			} else {
				HxOverrides.remove(this.functions,"exp");
				HxOverrides.remove(this.functions,"ln");
				HxOverrides.remove(this.functions,"log");
			}
			this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.FUNCTIONS,this.functions.join(","));
		} else if("functionTrigonometric" == actionId) {
			if(source.isSelected()) {
				this.functions.push("sin");
				this.functions.push("sen");
				this.functions.push("cos");
				this.functions.push("tan");
				this.functions.push("tg");
				this.functions.push("asin");
				this.functions.push("arcsin");
				this.functions.push("asen");
				this.functions.push("arcsen");
				this.functions.push("acos");
				this.functions.push("arccos");
				this.functions.push("atan");
				this.functions.push("arctan");
				this.functions.push("cosec");
				this.functions.push("csc");
				this.functions.push("sec");
				this.functions.push("cotan");
				this.functions.push("acosec");
				this.functions.push("acsc");
				this.functions.push("asec");
				this.functions.push("acotan");
			} else {
				HxOverrides.remove(this.functions,"sin");
				HxOverrides.remove(this.functions,"sen");
				HxOverrides.remove(this.functions,"cos");
				HxOverrides.remove(this.functions,"tan");
				HxOverrides.remove(this.functions,"tg");
				HxOverrides.remove(this.functions,"asin");
				HxOverrides.remove(this.functions,"arcsin");
				HxOverrides.remove(this.functions,"asen");
				HxOverrides.remove(this.functions,"arcsen");
				HxOverrides.remove(this.functions,"acos");
				HxOverrides.remove(this.functions,"arccos");
				HxOverrides.remove(this.functions,"atan");
				HxOverrides.remove(this.functions,"arctan");
				HxOverrides.remove(this.functions,"cosec");
				HxOverrides.remove(this.functions,"csc");
				HxOverrides.remove(this.functions,"sec");
				HxOverrides.remove(this.functions,"cotan");
				HxOverrides.remove(this.functions,"acosec");
				HxOverrides.remove(this.functions,"acsc");
				HxOverrides.remove(this.functions,"asec");
				HxOverrides.remove(this.functions,"acotan");
			}
			this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.FUNCTIONS,this.functions.join(","));
		} else if("functionHyperbolic" == actionId) {
			if(source.isSelected()) {
				this.functions.push("sinh");
				this.functions.push("senh");
				this.functions.push("cosh");
				this.functions.push("tanh");
				this.functions.push("asinh");
				this.functions.push("arcsinh");
				this.functions.push("asenh");
				this.functions.push("arcsenh");
				this.functions.push("acosh");
				this.functions.push("arccosh");
				this.functions.push("atanh");
				this.functions.push("arctanh");
				this.functions.push("cosech");
				this.functions.push("csch");
				this.functions.push("sech");
				this.functions.push("cotanh");
				this.functions.push("acosech");
				this.functions.push("acsch");
				this.functions.push("asech");
				this.functions.push("acotanh");
			} else {
				HxOverrides.remove(this.functions,"sinh");
				HxOverrides.remove(this.functions,"senh");
				HxOverrides.remove(this.functions,"cosh");
				HxOverrides.remove(this.functions,"tanh");
				HxOverrides.remove(this.functions,"asinh");
				HxOverrides.remove(this.functions,"arcsinh");
				HxOverrides.remove(this.functions,"asenh");
				HxOverrides.remove(this.functions,"arcsenh");
				HxOverrides.remove(this.functions,"acosh");
				HxOverrides.remove(this.functions,"arccosh");
				HxOverrides.remove(this.functions,"atanh");
				HxOverrides.remove(this.functions,"arctanh");
				HxOverrides.remove(this.functions,"cosech");
				HxOverrides.remove(this.functions,"csch");
				HxOverrides.remove(this.functions,"sech");
				HxOverrides.remove(this.functions,"cotanh");
				HxOverrides.remove(this.functions,"acosech");
				HxOverrides.remove(this.functions,"acsch");
				HxOverrides.remove(this.functions,"asech");
				HxOverrides.remove(this.functions,"acotanh");
			}
			this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.FUNCTIONS,this.functions.join(","));
		} else if("functionArithmetic" == actionId) {
			if(source.isSelected()) {
				this.functions.push("min");
				this.functions.push("max");
				this.functions.push("sign");
			} else {
				HxOverrides.remove(this.functions,"min");
				HxOverrides.remove(this.functions,"max");
				HxOverrides.remove(this.functions,"sign");
			}
			this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.FUNCTIONS,this.functions.join(","));
		} else if("functionMoreFunctions" == actionId) this.quizzesStudio.showAllFunctions(); else if(StringTools.startsWith(actionId,"function")) {
			if(source.isSelected()) this.functions.push(source.getSelectableId()); else HxOverrides.remove(this.functions,source.getSelectableId());
			this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.FUNCTIONS,this.functions.join(","));
		} else if("errorMarginType" == actionId) {
			var value = source.getValue();
			if(value == "errorMarginPercentError") {
				this.errorMarginRelativeTolerance = true;
				if(!this.isToleranceTypeDigits()) {
					this.toleranceType = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_PERCENT_ERROR;
					this.applyToleranceFieldsToComparison();
				}
			} else if(value == "errorMarginAbsoluteError") {
				this.errorMarginRelativeTolerance = false;
				if(!this.isToleranceTypeDigits()) {
					this.toleranceType = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_ABSOLUTE_ERROR;
					this.applyToleranceFieldsToComparison();
				}
			}
		} else if("matchingDigitsType" == actionId) {
			var value = source.getValue();
			if(value == "matchingDigitsSignificantFigures") {
				this.matchingDigitsRelativeTolerance = true;
				if(this.isToleranceTypeDigits()) {
					this.toleranceType = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_SIGNIFICANT_FIGURES;
					this.applyToleranceFieldsToComparison();
				}
			} else if(value == "matchingDigitsDecimalPlaces") {
				this.matchingDigitsRelativeTolerance = false;
				if(this.isToleranceTypeDigits()) {
					this.toleranceType = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_DECIMAL_PLACES;
					this.applyToleranceFieldsToComparison();
				}
			}
		} else if("precisionType" == actionId) {
			var value = source.getValue();
			if(value == "precisionSignificantFigures") {
				this.precisionRelative = true;
				this.removeValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION,com.wiris.quizzes.api.assertion.ValidationParameterName.RELATIVE);
			} else if(value == "precisionDecimalPlaces") {
				this.precisionRelative = false;
				this.setValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION,com.wiris.quizzes.api.assertion.ValidationParameterName.RELATIVE,"false");
			}
		} else if("errorMarginQty" == actionId) try {
			this.tolerance = Std.parseFloat(source.getValue());
			if(!this.isToleranceTypeDigits()) this.applyToleranceFieldsToComparison();
		} catch( exception ) {
			if( js.Boot.__instanceof(exception,com.wiris.system.Exception) ) {
			} else throw(exception);
		} else if("matchingDigitsQty" == actionId) try {
			this.toleranceDigits = Std.parseInt(source.getValue());
			if(this.isToleranceTypeDigits()) this.applyToleranceFieldsToComparison();
		} catch( exception ) {
			if( js.Boot.__instanceof(exception,com.wiris.system.Exception) ) {
			} else throw(exception);
		} else if("precisionMinimum" == actionId) try {
			var value = Std.parseInt(source.getValue());
			this.precisionMin = value;
			if(value > 0) this.setValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION,com.wiris.quizzes.api.assertion.ValidationParameterName.MIN,"" + this.precisionMin); else this.removeValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION,com.wiris.quizzes.api.assertion.ValidationParameterName.MIN);
		} catch( exception ) {
			if( js.Boot.__instanceof(exception,com.wiris.system.Exception) ) {
			} else throw(exception);
		} else if("precisionMaximum" == actionId) try {
			var value = Std.parseInt(source.getValue());
			this.precisionMax = value;
			if(value > 0) this.setValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION,com.wiris.quizzes.api.assertion.ValidationParameterName.MAX,"" + this.precisionMax); else this.removeValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION,com.wiris.quizzes.api.assertion.ValidationParameterName.MAX);
		} catch( exception ) {
			if( js.Boot.__instanceof(exception,com.wiris.system.Exception) ) {
			} else throw(exception);
		} else if("exactAnswer" == actionId) {
			if(source.isSelected()) {
				this.toleranceType = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_PERCENT_ERROR;
				this.setComparisonTolerance(this.toleranceType,"0");
			}
		} else if("errorMargin" == actionId) {
			if(source.isSelected()) {
				this.toleranceType = this.errorMarginRelativeTolerance?com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_PERCENT_ERROR:com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_ABSOLUTE_ERROR;
				this.applyToleranceFieldsToComparison();
			}
		} else if("matchingDigits" == actionId) {
			if(source.isSelected()) {
				this.toleranceType = this.matchingDigitsRelativeTolerance?com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_SIGNIFICANT_FIGURES:com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_DECIMAL_PLACES;
				this.applyToleranceFieldsToComparison();
			}
		} else if("precisionEnabled" == actionId) {
			if(source.isSelected()) {
				this.addValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION);
				if(this.precisionMin > 0) this.setValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION,com.wiris.quizzes.api.assertion.ValidationParameterName.MIN,"" + this.precisionMin);
				if(this.precisionMax > 0) this.setValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION,com.wiris.quizzes.api.assertion.ValidationParameterName.MAX,"" + this.precisionMax);
				if(!this.precisionRelative) this.setValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION,com.wiris.quizzes.api.assertion.ValidationParameterName.RELATIVE,"false");
			} else this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION);
		} else if("matchUnits" == actionId) {
			if(source.isSelected()) {
				this.addValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_EQUIVALENT_UNITS);
				if(this.allowAllPrefixes) this.setValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_EQUIVALENT_UNITS,com.wiris.quizzes.api.assertion.ValidationParameterName.ALLOW_PREFIXES,"true");
			} else this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_EQUIVALENT_UNITS);
		} else if("allowPrefixes" == actionId) {
			if(source.isSelected()) {
				this.allowAllPrefixes = true;
				this.setValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_EQUIVALENT_UNITS,com.wiris.quizzes.api.assertion.ValidationParameterName.ALLOW_PREFIXES,"true");
			} else {
				this.allowAllPrefixes = false;
				this.removeValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_EQUIVALENT_UNITS,com.wiris.quizzes.api.assertion.ValidationParameterName.ALLOW_PREFIXES);
			}
		} else if("displayAuxiliaryInput" == actionId) {
			if(source.isSelected()) {
				this.setProperty(com.wiris.quizzes.api.PropertyName.SHOW_CAS,com.wiris.quizzes.impl.LocalData.VALUE_SHOW_CAS_ADD);
				this.setProperty(com.wiris.quizzes.api.PropertyName.CAS_SESSION,this.auxiliaryInitialContent);
				this.setProperty(com.wiris.quizzes.api.PropertyName.SHOW_AUXILIARY_TEXT_INPUT,com.wiris.quizzes.impl.LocalData.VALUE_SHOW_CAS_FALSE);
			}
		} else if("textAuxiliaryInput" == actionId) {
			if(source.isSelected()) {
				this.setProperty(com.wiris.quizzes.api.PropertyName.SHOW_CAS,com.wiris.quizzes.impl.LocalData.VALUE_SHOW_CAS_FALSE);
				this.removeProperty(com.wiris.quizzes.api.PropertyName.CAS_SESSION);
				this.setProperty(com.wiris.quizzes.api.PropertyName.SHOW_AUXILIARY_TEXT_INPUT,"true");
			}
		} else if("replaceAuxiliaryInput" == actionId) {
			if(source.isSelected()) {
				this.setProperty(com.wiris.quizzes.api.PropertyName.SHOW_CAS,com.wiris.quizzes.impl.LocalData.VALUE_SHOW_CAS_REPLACE_INPUT);
				this.setProperty(com.wiris.quizzes.api.PropertyName.CAS_SESSION,this.auxiliaryInitialContent);
				this.setProperty(com.wiris.quizzes.api.PropertyName.SHOW_AUXILIARY_TEXT_INPUT,com.wiris.quizzes.impl.LocalData.VALUE_SHOW_CAS_FALSE);
			}
		} else if("noAuxiliaryInput" == actionId) {
			if(source.isSelected()) {
				this.setProperty(com.wiris.quizzes.api.PropertyName.SHOW_CAS,com.wiris.quizzes.impl.LocalData.VALUE_SHOW_CAS_FALSE);
				this.removeProperty(com.wiris.quizzes.api.PropertyName.CAS_SESSION);
				this.setProperty(com.wiris.quizzes.api.PropertyName.SHOW_AUXILIARY_TEXT_INPUT,com.wiris.quizzes.impl.LocalData.VALUE_SHOW_CAS_FALSE);
			}
		} else if("symbolicAnswer" == actionId) {
			if(source.isSelected()) {
				this.setComparisonTolerance(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_PERCENT_ERROR,"0");
				this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_SCIENTIFIC_NOTATION);
				this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_DECIMAL_NOTATION);
				this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION);
				this.addValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_SYMBOLIC);
			} else {
				this.applyToleranceFieldsToComparison();
				if(!this.anyNotation) this.addValidationAssertion(this.notation);
				this.addValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION);
				if(this.precisionMin > 0) this.setValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION,com.wiris.quizzes.api.assertion.ValidationParameterName.MIN,"" + this.precisionMin);
				if(this.precisionMax > 0) this.setValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION,com.wiris.quizzes.api.assertion.ValidationParameterName.MAX,"" + this.precisionMax);
				if(!this.precisionRelative) this.setValidationAssertionParameter(com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION,com.wiris.quizzes.api.assertion.ValidationParameterName.RELATIVE,"false");
				this.removeValidationAssertion(com.wiris.quizzes.api.assertion.ValidationName.CHECK_SYMBOLIC);
			}
			this.updateCurrentActivity();
		} else if("matchLetterCase" == actionId) {
			if(source.isSelected()) {
				this.matchCase = true;
				this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_CASES,"true");
			} else {
				this.matchCase = false;
				this.removeComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_CASES);
			}
		} else if("matchSpaces" == actionId) {
			if(source.isSelected()) {
				this.matchSpaces = true;
				this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_SPACES,"true");
			} else {
				this.matchSpaces = false;
				this.removeComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_SPACES);
			}
		} else if("compoundAnswerRatiosChanged" == actionId) {
			this.compoundRatios = source.getCompoundAnswers();
			this.setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE_DISTRIBUTION,this.compoundRatios.join(" "));
		} else if("outputOptionsPrecision" == actionId) {
			var value = source.getValue();
			this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_PRECISION,value);
		} else if("outputOptionsPrecisionType" == actionId) {
			var value = source.getValue();
			if(value == "outputOptionsPrecisionSignificantFigures") this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_FLOAT_FORMAT,null); else if(value == "outputOptionsPrecisionDecimalPlaces") this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_FLOAT_FORMAT,"f");
			this.updateCurrentActivity();
		} else if("outputOptionsNotationDecimal" == actionId) {
			if(source.isSelected()) {
				this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_FLOAT_FORMAT,"mr");
				this.updateCurrentActivity();
			}
		} else if("outputOptionsNotationScientific" == actionId) {
			if(source.isSelected()) {
				this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_FLOAT_FORMAT,"me");
				this.updateCurrentActivity();
			}
		} else if("outputOptionsNotationAuto" == actionId) {
			if(source.isSelected()) {
				this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_FLOAT_FORMAT,null);
				this.updateCurrentActivity();
			}
		} else if("outputOptionsDecimalComma" == actionId) {
			if(source.isSelected()) {
				this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_DECIMAL_SEPARATOR,",");
				this.updateCurrentActivity();
			}
		} else if("outputOptionsDecimalPoint" == actionId) {
			if(source.isSelected()) {
				this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_DECIMAL_SEPARATOR,".");
				this.updateCurrentActivity();
			}
		} else if("outputOptionsThousandsNone" == actionId) {
			if(source.isSelected()) {
				this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_DIGIT_GROUP_SEPARATOR,"");
				this.updateCurrentActivity();
			}
		} else if("outputOptionsThousandsSpace" == actionId) {
			if(source.isSelected()) {
				this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_DIGIT_GROUP_SEPARATOR," ");
				this.updateCurrentActivity();
			}
		} else if("outputOptionsThousandsComma" == actionId) {
			if(source.isSelected()) {
				this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_DIGIT_GROUP_SEPARATOR,",");
				this.updateCurrentActivity();
			}
		} else if("outputOptionsThousandsPoint" == actionId) {
			if(source.isSelected()) {
				this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_DIGIT_GROUP_SEPARATOR,".");
				this.updateCurrentActivity();
			}
		} else if("imaginaryUnitI" == actionId) {
			if(source.isSelected()) {
				this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_IMAGINARY_UNIT,"i");
				this.updateCurrentActivity();
			}
		} else if("imaginaryUnitJ" == actionId) {
			if(source.isSelected()) {
				this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_IMAGINARY_UNIT,"j");
				this.updateCurrentActivity();
			}
		} else if("timesOperatorDot" == actionId) {
			if(source.isSelected()) {
				this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_TIMES_OPERATOR,"·");
				this.updateCurrentActivity();
			}
		} else if("timesOperatorCross" == actionId) {
			if(source.isSelected()) {
				this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_TIMES_OPERATOR,"×");
				this.updateCurrentActivity();
			}
		} else if("invisibleTimesOperator" == actionId) {
			if(source.isSelected()) {
				this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_IMPLICIT_TIMES_OPERATOR,"true");
				this.updateCurrentActivity();
			} else this.setOption(com.wiris.quizzes.api.QuizzesConstants.OPTION_IMPLICIT_TIMES_OPERATOR,"false");
		} else if("copyInitialContent" == actionId) {
			var initialContent = this.context.getSlot().getInitialContent();
			if(this.context.isInitialContentLocked()) initialContent = StringTools.replace(StringTools.replace(initialContent,com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.WRS_POSITIONABLE + "=\"true\"",""),com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.WRS_POSITIONABLE + "=\"false\"","");
			this.context.getAuthorAnswer().setValue(initialContent);
			this.updateCurrentActivity();
			if(this.context.getSlot().getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC) {
				var correctAnswerGraph = this.quizzesStudio.getMainFocus();
				var correctAnswerPlotter = correctAnswerGraph.getGraph().getGraphModel().getDisplay();
				var graphMode = this.context.getSlot().getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE);
				var isSketchMode = graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH;
				var correctAnswerElements = correctAnswerPlotter.getElementsThatCanBeGraded(this.admissibleElementsConfiguration(false,false,true,false,isSketchMode));
				var previousGraphElements = this.context.getGraphicalElements();
				var graphElements = new Hash();
				var _g = 0;
				while(_g < correctAnswerElements.length) {
					var elem = correctAnswerElements[_g];
					++_g;
					var ratio = previousGraphElements.exists(elem)?previousGraphElements.get(elem):0.0;
					graphElements.set(elem,ratio);
				}
				this.context.setGraphicalElements(graphElements);
				var graphActiveElements = this.context.getGraphicalElementsActive();
				this.setElementsToGradeParameter(graphActiveElements);
				if(graphActiveElements.length > 1) this.setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER,com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE); else this.setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER,com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_FALSE);
				var graphRatios = this.context.getGraphicalRatios();
				if(this.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE) == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTE) this.context.getSlot().setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE_DISTRIBUTION,graphRatios.join(" "));
			}
		} else if("copyCorrectAnswer" == actionId) {
			var correctAnswer = this.context.getAuthorAnswer().getValue();
			var isInitialContentLocked = this.context.isInitialContentLocked();
			this.context.getSlot().setInitialContent(correctAnswer);
			if(isInitialContentLocked) this.setLockInitialContent(true);
			this.updateCurrentActivity();
		} else if("lockInitialContent" == actionId) {
			var on = source.isSelected();
			this.setLockInitialContent(on);
		} else if("handOpened" == actionId) {
			source.getParent().getStyle().setMaxWidth(800);
			source.getParent().getParent().changeState();
		} else if("handClosed" == actionId) {
			source.getParent().getStyle().setMaxWidth(450);
			source.getParent().getParent().changeState();
		} else if(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ACTION_RANDOM_VARIABLES_CHANGED == actionId) {
			var newAlgorithm = "<wiriscalc version=\"3.2\">\n" + "  <title>\n" + "    <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n" + "      <mtext>Untitled&#xa0;calc</mtext>\n" + "    </math>\n" + "  </title>\n" + "  <properties>\n" + "    <property name=\"lang\">en</property>\n" + "  </properties>\n" + "  <session version=\"3.0\" lang=\"en\">\n" + "    <task>\n" + "      <title>\n" + "        <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n" + "          <mtext>Sheet 1</mtext>\n" + "        </math>\n" + "      </title>\n" + "      <group>\n" + "        <algorithm># Automatically generated by WirisQuizzes.\n" + Std.string(action.getParameter(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ACTION_PARAMETER_RANDOM_VARIABLES_CONTENT)) + "        </algorithm>\n" + "      </group>\n" + "    </task>\n" + "  </session>\n" + "</wiriscalc>";
			this.context.getQuestion().setAlgorithm(newAlgorithm);
			if(action.getParameter(com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ACTION_PARAMETER_RANDOM_VARIABLES_CONTENT).toString().length > 0) {
				if(this.context.getSlot().getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.MATH && this.isEmptyMathML(this.context.getAuthorAnswer().getValue())) {
					this.context.getAuthorAnswer().setValue(this.getEvaluateTemplateMathML());
					this.updateCurrentActivity();
				}
			} else if(this.getEvaluateTemplateMathML() == com.wiris.util.xml.WXmlUtils.resolveEntities(this.context.getAuthorAnswer().getValue())) {
				this.context.getAuthorAnswer().setValue(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.EMPTY_MATHML);
				this.updateCurrentActivity();
			}
		} else if("graphDisplayNameInLabels" == actionId) {
			var value = source.getValue();
			this.setProperty(com.wiris.quizzes.api.PropertyName.GRAPH_SHOW_NAME_IN_LABEL,value);
		} else if("graphDisplayValueInLabels" == actionId) {
			var value = source.getValue();
			this.setProperty(com.wiris.quizzes.api.PropertyName.GRAPH_SHOW_VALUE_IN_LABEL,value);
		} else if("graphDisplayMagneticGrid" == actionId) {
			var value = source.getValue();
			this.setProperty(com.wiris.quizzes.api.PropertyName.GRAPH_MAGNETIC_GRID,value);
		}
		if(this.context.getAuthoringField() != null) this.context.getAuthoringField().innerContentChanged();
	}
	,updateFeaturedValidationAssertions: function(requestType) {
		if(this.context.getSlot().getSyntax().getName() != com.wiris.quizzes.api.assertion.SyntaxName.MATH) return;
		var builder = com.wiris.quizzes.api.Quizzes.getInstance();
		var featuredAssertionsRequest = builder.newFeaturedAssertionsRequest(this.context.getQuestion());
		if(!featuredAssertionsRequest.isEmpty()) {
			var service = builder.getQuizzesService();
			this.featuredAssertionsRequestController = this.featuredAssertionsRequestController.setNextRequest(new com.wiris.quizzes.impl.ui.controller.FeaturedAssertionsRequestController(this,requestType));
			service.executeAsync(featuredAssertionsRequest,this.featuredAssertionsRequestController);
		}
	}
	,updateFeaturedSyntaxAssertions: function(requestType) {
		if(this.context.getSlot().getSyntax().getName() != com.wiris.quizzes.api.assertion.SyntaxName.MATH) return;
		var builder = com.wiris.quizzes.api.Quizzes.getInstance();
		var featuredSyntaxRequest = builder.newFeaturedSyntaxAssertionsRequest(this.context.getQuestion());
		if(!featuredSyntaxRequest.isEmpty()) {
			var service = builder.getQuizzesService();
			this.featuredSyntaxRequestController = this.featuredSyntaxRequestController.setNextRequest(new com.wiris.quizzes.impl.ui.controller.FeaturedSyntaxRequestController(this,requestType));
			service.executeAsync(featuredSyntaxRequest,this.featuredSyntaxRequestController);
		}
	}
	,getGrammarUrl: function() {
		return this.context.getGrammarUrl();
	}
	,setUnitPrefixesSyntaxParameter: function() {
		this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.UNIT_PREFIXES,this.unitPrefixes.join(","));
	}
	,setUnitsSyntaxParameter: function() {
		this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.UNITS,this.units.join(","));
	}
	,setMathtypeParameters: function(parameters) {
		this.context.setMathTypeParameters(parameters);
		this.updateCurrentActivity();
	}
	,getInstanceCorrectAnswer: function() {
		var qi = this.context.getQuestionInstance();
		var content = this.context.getAuthorAnswer().getValue();
		if(qi.hasVariables()) {
			if(com.wiris.quizzes.impl.MathContent.getMathType(content) == com.wiris.quizzes.impl.MathContent.TYPE_MATHML) {
				var expanded = this.context.getQuestionInstance().expandVariablesMathML(content);
				if(!(expanded == content)) content = com.wiris.util.xml.MathMLUtils.removeStrokesAnnotation(expanded);
			} else content = this.context.getQuestionInstance().expandVariablesText(content);
		}
		if(com.wiris.quizzes.impl.MathContent.getMathType(content) == com.wiris.quizzes.impl.MathContent.TYPE_MATHML) {
			var tools = new com.wiris.quizzes.impl.HTMLTools();
			if(tools.isTokensMathML(content)) content = tools.mathMLToText(content);
		}
		return content;
	}
	,setLoadingCorrectAnswer: function(loading) {
		this.quizzesStudio.setLoadingCorrectAnswer(loading);
	}
	,resetPreviewAnswerFeedback: function() {
		this.quizzesStudio.resetPreviewAnswerFeedback(this.context.getQuestionInstance(),this.context.getSlot(),this.context.getAuthorAnswer());
	}
	,updatePreviewAnswerFeedback: function(studentAnswer) {
		var builder = com.wiris.quizzes.api.Quizzes.getInstance();
		this.context.getQuestionInstance().setSlotAnswer(this.context.getSlot(),studentAnswer);
		var request = builder.newGradeRequest(this.context.getQuestionInstance());
		if(!request.isEmpty()) {
			var service = builder.getQuizzesService();
			this.evaluationRequest = this.evaluationRequest.setNextRequest(new com.wiris.quizzes.impl.ui.controller.EvaluationRequestController(this));
			this.resetPreviewAnswerFeedback();
			service.executeAsync(request,this.evaluationRequest);
		}
	}
	,setPreviewAnswerFeedback: function(questionInstance) {
		this.quizzesStudio.setPreviewAnswerFeedback(questionInstance,this.context.getQuestion().getImpl(),this.context.getSlot(),this.context.getAuthorAnswer());
	}
	,updatePreviewCorrectAnswer: function() {
		if(this.context.isPreviewCorrectAnswerUpdated()) {
			this.setPreviewCorrectAnswer(this.getInstanceCorrectAnswer(),this.context.getQuestion().getAlgorithm() != null);
			return;
		}
		var builder = com.wiris.quizzes.api.Quizzes.getInstance();
		if(this.context.getQuestion().getAlgorithm() != null) {
			var request = builder.newVariablesRequestWithQuestionData(null,this.context.getQuestionInstance());
			if(!request.isEmpty()) {
				this.setLoadingCorrectAnswer(true);
				var service = builder.getQuizzesService();
				this.variablesRequest = this.variablesRequest.setNextRequest(new com.wiris.quizzes.impl.ui.controller.VariablesRequestController(this));
				service.executeAsync(request,this.variablesRequest);
			} else this.setPreviewCorrectAnswer(this.getInstanceCorrectAnswer(),this.context.getQuestion().getAlgorithm() != null);
		} else this.setPreviewCorrectAnswer(this.getInstanceCorrectAnswer(),this.context.getQuestion().getAlgorithm() != null);
	}
	,reservedWordsChanged: function() {
		this.reservedWordsRequestController.setChanged(true);
	}
	,updateReservedWords: function() {
		if(this.context.getSlot().getSyntax().getName() != com.wiris.quizzes.api.assertion.SyntaxName.MATH) return;
		this.reservedWordsRequestController.update();
	}
	,showPreviousActivity: function() {
		this.setUpdating(true);
		try {
			this.quizzesStudio.showPreviousActivity(this.context);
		} catch( e ) {
			haxe.Log.trace("Error while trying to show previous activity: " + Std.string(e.toString()),{ fileName : "QuizzesStudioController.hx", lineNumber : 1100, className : "com.wiris.quizzes.impl.ui.controller.QuizzesStudioController", methodName : "showPreviousActivity"});
		}
		this.setUpdating(false);
	}
	,showActivity: function(command) {
		this.setUpdating(true);
		try {
			this.quizzesStudio.showNextActivity(command,this.context);
		} catch( e ) {
			haxe.Log.trace("Error while trying to show activity " + command + ": " + Std.string(e.toString()),{ fileName : "QuizzesStudioController.hx", lineNumber : 1090, className : "com.wiris.quizzes.impl.ui.controller.QuizzesStudioController", methodName : "showActivity"});
		}
		this.setUpdating(false);
	}
	,updateCurrentActivity: function() {
		this.setUpdating(true);
		try {
			this.quizzesStudio.updateCurrentActivity(this.context);
		} catch( e ) {
			haxe.Log.trace("Error while updating current activity: " + Std.string(e.toString()),{ fileName : "QuizzesStudioController.hx", lineNumber : 1080, className : "com.wiris.quizzes.impl.ui.controller.QuizzesStudioController", methodName : "updateCurrentActivity"});
		}
		this.setUpdating(false);
	}
	,isListItemsSeparatorsDefault: function() {
		return this.listItemsSeparators.length == 3 && this.listItemsSeparators[0] == ";" && this.listItemsSeparators[1] == "\\," && this.listItemsSeparators[2] == "\\n";
	}
	,isDigitGroupsSeparatorsDefault: function() {
		return this.digitGroupsSeparators.length == 0;
	}
	,isDecimalPlacesSeparatorsDefault: function() {
		return this.decimalPlacesSeparators.length == 1 && this.decimalPlacesSeparators[0] == ".";
	}
	,updateCalcmeImaginaryUnitRestrictions: function() {
		var imaginaryUnits = new Array();
		var _g1 = 0, _g = this.constants.length;
		while(_g1 < _g) {
			var i = _g1++;
			if(this.constants[i] == "i") imaginaryUnits.push("i"); else if(this.constants[i] == "j") imaginaryUnits.push("j");
		}
		var calcmeParams = new Hash();
		calcmeParams.set("imaginaryUnit",imaginaryUnits.join(", "));
		if(this.quizzesStudio != null && this.quizzesStudio.isReady()) this.quizzesStudio.algorithmEditorActionWithParams("setImaginaryUnitRestrictions",calcmeParams); else new com.wiris.quizzes.impl.ui.async.UpdateCalcMeImaginaryUnitTask(this,calcmeParams);
	}
	,updateCalcmeSeparatorRestrictions: function() {
		var calcmeParams = new Hash();
		calcmeParams.set("decimal_separator",this.decimalPlacesSeparators.join(", "));
		calcmeParams.set("digit_group_separator",this.digitGroupsSeparators.join(", "));
		calcmeParams.set("item_separator",this.listItemsSeparators.join(", "));
		if(this.quizzesStudio != null && this.quizzesStudio.isReady()) this.quizzesStudio.algorithmEditorActionWithParams("setSeparatorRestrictions",calcmeParams); else new com.wiris.quizzes.impl.ui.async.UpdateCalcMeSeparatorTask(this,calcmeParams);
	}
	,recalculateSeparators: function() {
		this.decimalPlacesSeparators = new Array();
		this.digitGroupsSeparators = new Array();
		this.listItemsSeparators = [";"];
		if(this.pointSeparator == "decimalPlaces") this.decimalPlacesSeparators.push("."); else if(this.pointSeparator == "digitGroups") this.digitGroupsSeparators.push(".");
		if(this.commaSeparator == "decimalPlaces") this.decimalPlacesSeparators.push("\\,"); else if(this.commaSeparator == "digitGroups") this.digitGroupsSeparators.push("\\,"); else if(this.commaSeparator == "listItems") this.listItemsSeparators.push("\\,");
		this.listItemsSeparators.push("\\n");
		if(this.spaceSeparator == "digitGroups") this.digitGroupsSeparators.push("\\s"); else if(this.spaceSeparator == "listItems") this.listItemsSeparators.push("\\s");
		if(com.wiris.system.ArrayEx.contains(this.units,"'")) HxOverrides.remove(this.decimalPlacesSeparators,"'"); else this.decimalPlacesSeparators.push("'");
		if(this.isDecimalPlacesSeparatorsDefault()) this.removeSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.DECIMAL_SEPARATORS); else this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.DECIMAL_SEPARATORS,this.decimalPlacesSeparators.join(","));
		if(this.isDigitGroupsSeparatorsDefault()) this.removeSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.DIGIT_GROUP_SEPARATORS); else this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.DIGIT_GROUP_SEPARATORS,this.digitGroupsSeparators.join(","));
		if(this.isListItemsSeparatorsDefault()) this.removeSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.ITEM_SEPARATORS); else this.setSyntaxAssertionParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.ITEM_SEPARATORS,this.listItemsSeparators.join(","));
		this.updateCalcmeSeparatorRestrictions();
	}
	,setComparisonTolerance: function(type,value) {
		var relative = type == com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_PERCENT_ERROR || type == com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_SIGNIFICANT_FIGURES?"true":"false";
		this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.RELATIVE_TOLERANCE,relative);
		if(type == com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_SIGNIFICANT_FIGURES || type == com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_DECIMAL_PLACES) {
			this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE,"false");
			this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE_DIGITS,value);
		} else {
			if(relative == "true") value = com.wiris.system.TypeTools.floatToString(Std.parseFloat(value) / 100.0);
			this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE_DIGITS,"false");
			this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE,value);
		}
	}
	,getValidation: function(validationName) {
		var validations = this.context.getAuthorAnswer().getValidations();
		var _g = 0;
		while(_g < validations.length) {
			var v = validations[_g];
			++_g;
			if(v.getName() == validationName) return v;
		}
		return null;
	}
	,removeValidationAssertionParameter: function(assertion,paramName) {
		var v = this.getValidation(assertion);
		if(v != null) v.removeParameter(paramName);
	}
	,setValidationAssertionParameter: function(assertion,paramName,value) {
		var v = this.getValidation(assertion);
		if(v != null) v.setParameter(paramName,value);
	}
	,removeComparisonAssertionParameter: function(paramName) {
		this.context.getAuthorAnswer().getComparison().removeParameter(paramName);
	}
	,setComparisonAssertionParameter: function(paramName,value) {
		this.context.getAuthorAnswer().getComparison().setParameter(paramName,value);
	}
	,applyToleranceFieldsToComparison: function() {
		if(this.toleranceType == com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_PERCENT_ERROR || this.toleranceType == com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_ABSOLUTE_ERROR) this.setComparisonTolerance(this.toleranceType,com.wiris.system.TypeTools.floatToString(this.tolerance)); else this.setComparisonTolerance(this.toleranceType,"" + this.toleranceDigits);
	}
	,setComparisonAssertion: function(assertionName) {
		if(assertionName == this.context.getAuthorAnswer().getComparison().getName()) return;
		this.context.getAuthorAnswer().setComparison(assertionName);
		var syntax = this.context.getSlot().getSyntax().getName();
		if(assertionName == com.wiris.quizzes.api.assertion.ComparisonName.LITERALLY_EQUAL) {
			if(syntax == com.wiris.quizzes.api.assertion.SyntaxName.MATH) {
				if(!this.orderMatters) this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.ORDER_MATTERS,"false");
				if(!this.repetitionMatters) this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.REPETITION_MATTERS,"false");
				this.applyToleranceFieldsToComparison();
			} else if(syntax == com.wiris.quizzes.api.assertion.SyntaxName.STRING) {
				if(this.matchCase) this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_CASES,"true");
				if(this.matchSpaces) this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_SPACES,"true");
			}
		} else if(assertionName == com.wiris.quizzes.api.assertion.ComparisonName.MATHEMATICALLY_EQUAL) {
			if(syntax == com.wiris.quizzes.api.assertion.SyntaxName.MATH) {
				if(!this.orderMatters) this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.ORDER_MATTERS,"false");
				if(!this.repetitionMatters) this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.REPETITION_MATTERS,"false");
				this.applyToleranceFieldsToComparison();
			}
		} else if(assertionName == com.wiris.quizzes.api.assertion.ComparisonName.EQUIVALENT_EQUATIONS) this.applyToleranceFieldsToComparison(); else if(assertionName == com.wiris.quizzes.api.assertion.ComparisonName.GRADING_FUNCTION) {
			this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.FUNCTION_NAME,this.functionName);
			this.setComparisonAssertionParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.NOT_EVALUATE,this.functionName);
			if(syntax == com.wiris.quizzes.api.assertion.SyntaxName.MATH) this.applyToleranceFieldsToComparison();
		}
	}
	,removeSyntaxAssertionParameter: function(paramName) {
		this.context.getSlot().getSyntax().removeParameter(paramName);
		this.reservedWordsChanged();
	}
	,setSyntaxAssertionParameter: function(paramName,value) {
		this.context.getSlot().getSyntax().setParameter(paramName,value);
		this.reservedWordsChanged();
	}
	,removeValidationAssertion: function(name) {
		var v = this.getValidation(name);
		if(v != null) this.context.getAuthorAnswer().removeValidation(v);
	}
	,addValidationAssertion: function(name) {
		this.context.getAuthorAnswer().addNewValidation(name);
	}
	,removeProperty: function(name) {
		this.context.getSlot().removeProperty(name);
	}
	,getProperty: function(name) {
		return this.context.getSlot().getProperty(name);
	}
	,setProperty: function(name,value) {
		if(this.context.getQuestion().getProperty(name) != null && this.context.getQuestion().getSlots().length < 2) this.context.getQuestion().removeLocalData(com.wiris.quizzes.impl.QuizzesEnumUtils.propertyName2String(name));
		this.context.getSlot().setProperty(name,value);
	}
	,getOption: function(name) {
		return this.context.getQuestion().getImpl().getOption(name);
	}
	,setOption: function(name,value) {
		this.context.getQuestion().getImpl().setOption(name,value);
	}
	,setPreviewCorrectAnswer: function(correctAnswer,hasAlgorithm) {
		this.quizzesStudio.setPreviewCorrectAnswer(correctAnswer,hasAlgorithm);
	}
	,requestExportFile: function() {
		var proxyUrl = null;
		var parameters = null;
		if(!(com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_STATIC) == "true")) {
			proxyUrl = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL);
			parameters = new Hash();
			parameters.set("service","echo");
		}
		com.wiris.system.Downloader.saveFile(this.quizzesStudio.getElement(),proxyUrl,"wirisquestion.xml",this.context.getQuestion().serialize(),parameters);
	}
	,requestImportFile: function() {
		this.quizzesStudio.requestImportFile();
	}
	,saveQuestion: function() {
		this.context.getAuthoringField().saveQuestion();
	}
	,setComparisonParameters: function(comparison,text) {
		if(comparison.getName() == com.wiris.quizzes.api.assertion.ComparisonName.MATHEMATICALLY_EQUAL) {
			this.orderMatters = !(comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.ORDER_MATTERS) == "false");
			this.repetitionMatters = !(comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.REPETITION_MATTERS) == "false");
		} else if(comparison.getName() == com.wiris.quizzes.api.assertion.ComparisonName.LITERALLY_EQUAL) {
			if(text) {
				this.matchCase = comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_CASES) == "true";
				this.matchSpaces = comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_SPACES) == "true";
			} else {
				this.orderMatters = !(comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.ORDER_MATTERS) == "false");
				this.repetitionMatters = !(comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.REPETITION_MATTERS) == "false");
			}
		} else if(comparison.getName() == com.wiris.quizzes.api.assertion.ComparisonName.GRADING_FUNCTION) {
			this.functionName = comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.FUNCTION_NAME);
			this.functionArgumentMode = comparison.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.FUNCTION_ARGUMENT_MODE);
		}
	}
	,setValidationsParameters: function(validations) {
		var _g = 0;
		while(_g < validations.length) {
			var v = validations[_g];
			++_g;
			if(v.getName() == com.wiris.quizzes.api.assertion.ValidationName.CHECK_PRECISION) {
				this.precisionMin = Std.parseInt(v.getParameter(com.wiris.quizzes.api.assertion.ValidationParameterName.MIN));
				this.precisionMax = Std.parseInt(v.getParameter(com.wiris.quizzes.api.assertion.ValidationParameterName.MAX));
				this.precisionRelative = v.getParameter(com.wiris.quizzes.api.assertion.ValidationParameterName.RELATIVE) == "true";
			} else if(v.getName() == com.wiris.quizzes.api.assertion.ValidationName.CHECK_DECIMAL_NOTATION) {
				this.notation = com.wiris.quizzes.api.assertion.ValidationName.CHECK_DECIMAL_NOTATION;
				this.anyNotation = false;
			} else if(v.getName() == com.wiris.quizzes.api.assertion.ValidationName.CHECK_SCIENTIFIC_NOTATION) {
				this.notation = com.wiris.quizzes.api.assertion.ValidationName.CHECK_SCIENTIFIC_NOTATION;
				this.anyNotation = false;
			}
		}
	}
	,loadTextQuestion: function() {
		this.matchCase = false;
		this.matchSpaces = false;
		this.functionName = "";
		this.functionArgumentMode = com.wiris.quizzes.impl.Assertion.PARAM_VALUE_FUNCTION_ARGUMENT_EVALUATED;
		this.anyNotation = true;
		this.setComparisonParameters(this.textAuthorAnswer.getComparison(),true);
		this.setValidationsParameters(this.textAuthorAnswer.getValidations());
	}
	,admissibleElementsConfiguration: function(includeLabelsOfElements,includePartsOfElements,includeStatisticsCharts,includeImages,isSketchMode) {
		var params = new com.wiris.kernel.plotter.QuizzesCorrectAnswerPlotterParameters();
		params.includeLabelsOfElements = includeLabelsOfElements;
		params.includePartsOfElements = includePartsOfElements;
		params.includeStatisticsCharts = includeStatisticsCharts;
		params.includeImages = includeImages;
		params.isSketch = isSketchMode;
		return params;
	}
	,loadGraphCorrectAnswerElements: function(plotter,isSketchMode) {
		var toGrade = plotter.getElementsThatCanBeGraded(this.admissibleElementsConfiguration(false,false,true,false,isSketchMode));
		var graphElementsMap = new Hash();
		var _g = 0;
		while(_g < toGrade.length) {
			var elementToGrade = toGrade[_g];
			++_g;
			if(this.tempLoadGraphActiveElements == null) graphElementsMap.set(elementToGrade,0.0); else {
				var index = com.wiris.util.type.Arrays.indexOfElement(this.tempLoadGraphActiveElements,elementToGrade);
				if(index == -1) graphElementsMap.set(elementToGrade,com.wiris.quizzes.impl.ui.QuizzesStudioContext.GRAPHICAL_ELEMENT_NOT_ACTIVE); else if(this.tempLoadGraphicalRatios == null || this.tempLoadGraphicalRatios.length <= index) graphElementsMap.set(elementToGrade,0.0); else graphElementsMap.set(elementToGrade,Std.parseFloat(this.tempLoadGraphicalRatios[index]));
			}
		}
		this.tempLoadGraphicalRatios = null;
		this.tempLoadGraphActiveElements = null;
		this.context.setGraphicalElements(graphElementsMap);
	}
	,onSetComponent: function(inputComponent) {
		this.loadGraphCorrectAnswerElements(inputComponent.getGraph().getGraphModel().getDisplay(),com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH == this.context.getSlot().getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE));
	}
	,loadGraphicQuestion: function(slot,authorAnswer) {
		var correctAnswerGraph = this.quizzesStudio.getMainGraphComponent();
		correctAnswerGraph.cancelAction();
		var graphAllElementsActive = authorAnswer.getComparison().getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.ELEMENTS_TO_GRADE) == null;
		if(graphAllElementsActive) this.tempLoadGraphActiveElements = null; else {
			this.tempLoadGraphActiveElements = new Array();
			var objActiveElements = com.wiris.util.json.JSon.getArray(com.wiris.util.json.JSon.decode(authorAnswer.getComparison().getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.ELEMENTS_TO_GRADE)));
			var _g = 0;
			while(_g < objActiveElements.length) {
				var elem = objActiveElements[_g];
				++_g;
				this.tempLoadGraphActiveElements.push(com.wiris.util.json.JSon.getString(elem));
			}
		}
		if(slot.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE) == com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTE) this.tempLoadGraphicalRatios = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(slot.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE_DISTRIBUTION)," "); else this.tempLoadGraphicalRatios = null;
		this.setUpdating(true);
		try {
			correctAnswerGraph.setValue(authorAnswer.getValue());
		} catch( e ) {
			haxe.Log.trace("Error while setting correct answer construction: " + Std.string(e.toString()) + "\n" + authorAnswer.getValue(),{ fileName : "QuizzesStudioController.hx", lineNumber : 691, className : "com.wiris.quizzes.impl.ui.controller.QuizzesStudioController", methodName : "loadGraphicQuestion"});
		}
		this.setUpdating(false);
		var isSketchMode = slot.getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE) == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH;
		if(correctAnswerGraph.getGraph() != null) this.loadGraphCorrectAnswerElements(correctAnswerGraph.getGraph().getGraphModel().getDisplay(),isSketchMode); else correctAnswerGraph.addInputComponentListener(this);
		correctAnswerGraph.activateMainAction();
	}
	,getToleranceFromComparison: function(c) {
		var relative = "true" == c.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.RELATIVE_TOLERANCE);
		var digits = c.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE_DIGITS);
		var type;
		var value;
		if(digits != null && !(digits == "false")) {
			type = relative?com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_SIGNIFICANT_FIGURES:com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_DECIMAL_PLACES;
			value = digits;
		} else {
			type = relative?com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_PERCENT_ERROR:com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_ABSOLUTE_ERROR;
			value = c.getParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE);
			if(relative) value = com.wiris.system.TypeTools.floatToString(Std.parseFloat(value) * 100);
		}
		return { first : type, second : value};
	}
	,loadMathQuestion: function() {
		this.inputType = com.wiris.quizzes.impl.QuizzesEnumUtils.string2answerFieldType(this.mathSlot.getProperty(com.wiris.quizzes.api.PropertyName.ANSWER_FIELD_TYPE));
		this.orderMatters = true;
		this.repetitionMatters = true;
		var tolerance = this.getToleranceFromComparison(this.mathAuthorAnswer.getComparison());
		this.toleranceType = tolerance.first;
		this.tolerance = this.toleranceType == com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_PERCENT_ERROR || this.toleranceType == com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_ABSOLUTE_ERROR?Std.parseFloat(tolerance.second):0.1;
		this.toleranceDigits = this.toleranceType == com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_SIGNIFICANT_FIGURES || this.toleranceType == com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_DECIMAL_PLACES?Std.parseInt(tolerance.second):3;
		this.errorMarginRelativeTolerance = this.toleranceType != com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_ABSOLUTE_ERROR;
		this.matchingDigitsRelativeTolerance = this.toleranceType != com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_DECIMAL_PLACES;
		this.gradeDistribution = this.mathSlot.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE);
		var compoundRatiosProperty = this.mathSlot.getProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE_DISTRIBUTION);
		this.compoundRatios = new Array();
		if(compoundRatiosProperty != null) {
			if(compoundRatiosProperty.indexOf(":") != -1) {
				var rawRations = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(compoundRatiosProperty,":");
				var _g = 0;
				while(_g < rawRations.length) {
					var ratio = rawRations[_g];
					++_g;
					this.compoundRatios.push(StringTools.trim(ratio));
				}
			} else this.compoundRatios = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(compoundRatiosProperty," ");
		}
		if(this.compoundRatios.length > 0) {
			this.normalizeCompoundRatios();
			this.mathSlot.setProperty(com.wiris.quizzes.api.PropertyName.COMPOUND_ANSWER_GRADE_DISTRIBUTION,this.compoundRatios.join(" "));
		}
		this.precisionRelative = true;
		this.anyNotation = true;
		this.functionName = "";
		this.functionArgumentMode = com.wiris.quizzes.impl.Assertion.PARAM_VALUE_FUNCTION_ARGUMENT_EVALUATED;
		this.allowAllPrefixes = false;
		this.auxiliaryInitialContent = this.mathSlot.getProperty(com.wiris.quizzes.api.PropertyName.CAS_SESSION);
		var syntax = this.mathSlot.getSyntax();
		this.decimalPlacesSeparators = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.DECIMAL_SEPARATORS),",");
		this.digitGroupsSeparators = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.DIGIT_GROUP_SEPARATORS),",");
		this.listItemsSeparators = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.ITEM_SEPARATORS),",");
		this.pointSeparator = "nothing";
		this.commaSeparator = "nothing";
		this.spaceSeparator = "nothing";
		if(com.wiris.system.ArrayEx.contains(this.decimalPlacesSeparators,".")) this.pointSeparator = "decimalPlaces";
		if(com.wiris.system.ArrayEx.contains(this.decimalPlacesSeparators,"\\,")) this.commaSeparator = "decimalPlaces";
		if(com.wiris.system.ArrayEx.contains(this.digitGroupsSeparators,".")) this.pointSeparator = "digitGroups";
		if(com.wiris.system.ArrayEx.contains(this.digitGroupsSeparators,"\\,")) this.commaSeparator = "digitGroups";
		if(com.wiris.system.ArrayEx.contains(this.digitGroupsSeparators,"\\s")) this.spaceSeparator = "digitGroups";
		if(com.wiris.system.ArrayEx.contains(this.listItemsSeparators,"\\,")) this.commaSeparator = "listItems";
		if(com.wiris.system.ArrayEx.contains(this.listItemsSeparators,"\\s")) this.spaceSeparator = "listItems";
		this.constants = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.CONSTANTS),",");
		this.functions = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.FUNCTIONS),",");
		this.units = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.UNITS),",");
		this.unitPrefixes = com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.splitEscaped(syntax.getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.UNIT_PREFIXES),",");
		this.setComparisonParameters(this.mathAuthorAnswer.getComparison(),false);
		this.setValidationsParameters(this.mathAuthorAnswer.getValidations());
	}
	,normalizeCompoundRatios: function() {
		if(this.compoundRatios == null || this.compoundRatios.length == 0) return;
		try {
			if(StringTools.endsWith(this.compoundRatios[0],"%")) {
				var _g1 = 0, _g = this.compoundRatios.length;
				while(_g1 < _g) {
					var i = _g1++;
					var ith = this.compoundRatios[i];
					var parts = ith.split("%");
					this.compoundRatios[i] = parts[0];
				}
			}
			var floatRatios = new Array();
			var _g = 0, _g1 = this.compoundRatios;
			while(_g < _g1.length) {
				var ratio = _g1[_g];
				++_g;
				floatRatios.push(Std.parseFloat(ratio));
			}
			var sum = 0.0;
			var _g = 0;
			while(_g < floatRatios.length) {
				var ratio = floatRatios[_g];
				++_g;
				sum += ratio;
			}
			if(Math.abs(sum - 100.0) > 1e-3) {
				var _g1 = 0, _g = this.compoundRatios.length;
				while(_g1 < _g) {
					var i = _g1++;
					this.compoundRatios[i] = "" + 100.0 * floatRatios[i] / sum;
				}
			}
		} catch( t ) {
			this.compoundRatios = new Array();
		}
	}
	,loadQuestionImpl: function(question,slot,authorAnswer) {
		var clone = this.cloneQuestion(question);
		var clonedQuestion = clone.getImpl();
		var clonedSlot = null;
		var clonedAuthorAnswer = null;
		var slotId = slot.id;
		var authorAnswerId = authorAnswer.id;
		var slots = clonedQuestion.getSlots();
		var _g = 0;
		while(_g < slots.length) {
			var s = slots[_g];
			++_g;
			var slotId2 = s.id;
			if(slotId == slotId2) {
				clonedSlot = s;
				var authorAnswers = s.getAuthorAnswers();
				var _g1 = 0;
				while(_g1 < authorAnswers.length) {
					var aa = authorAnswers[_g1];
					++_g1;
					var authorAnswerId2 = aa.id;
					if(authorAnswerId == authorAnswerId2) {
						clonedAuthorAnswer = aa;
						break;
					}
				}
				break;
			}
		}
		clonedQuestion.importDeprecated();
		var syntaxName = slot.getSyntax().getName();
		if(syntaxName == com.wiris.quizzes.api.assertion.SyntaxName.STRING) {
			this.textQuestion = clonedQuestion;
			this.textSlot = clonedSlot;
			this.textAuthorAnswer = clonedAuthorAnswer;
			this.loadTextQuestion();
			this.updateStudioQuestion(this.textQuestion,this.textSlot,this.textAuthorAnswer);
		} else if(syntaxName == com.wiris.quizzes.api.assertion.SyntaxName.MATH) {
			this.mathQuestion = clonedQuestion;
			this.mathSlot = clonedSlot;
			this.mathAuthorAnswer = clonedAuthorAnswer;
			this.loadMathQuestion();
			this.updateStudioQuestion(this.mathQuestion,this.mathSlot,this.mathAuthorAnswer);
			if(!this.context.isShowAllOptions()) {
				this.updateFeaturedSyntaxAssertions(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.REQUEST_DISABLE_IF_NOT_COMPLIANT);
				this.updateFeaturedValidationAssertions(com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.REQUEST_DISABLE_IF_NOT_COMPLIANT);
			}
		} else if(syntaxName == com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC) {
			var graphMode = slot.getSyntax().getParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE);
			if(graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD) {
				this.graphicQuestion = clonedQuestion;
				this.graphSlot = clonedSlot;
				this.graphAuthorAnswer = clonedAuthorAnswer;
				this.sketchSlot.setInitialContent(this.graphSlot.getInitialContent());
				this.sketchAuthorAnswer.setValue(this.graphAuthorAnswer.getValue());
				this.loadGraphicQuestion(this.graphSlot,this.graphAuthorAnswer);
				this.updateStudioQuestion(this.graphicQuestion,this.graphSlot,this.graphAuthorAnswer);
			} else if(graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH) {
				this.sketchQuestion = clonedQuestion;
				this.sketchSlot = clonedSlot;
				this.sketchAuthorAnswer = clonedAuthorAnswer;
				this.graphSlot.setInitialContent(this.sketchSlot.getInitialContent());
				this.graphAuthorAnswer.setValue(this.sketchAuthorAnswer.getValue());
				this.loadGraphicQuestion(this.sketchSlot,this.sketchAuthorAnswer);
				this.updateStudioQuestion(this.sketchQuestion,this.sketchSlot,this.sketchAuthorAnswer);
			} else if(graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_BAR_CHART) {
				this.barChartQuestion = clonedQuestion;
				this.barChartSlot = clonedSlot;
				this.barChartAuthorAnswer = clonedAuthorAnswer;
				this.loadGraphicQuestion(this.barChartSlot,this.barChartAuthorAnswer);
				this.updateStudioQuestion(this.barChartQuestion,this.barChartSlot,this.barChartAuthorAnswer);
			} else if(graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_LINE_CHART) {
				this.lineChartQuestion = clonedQuestion;
				this.lineChartSlot = clonedSlot;
				this.lineChartAuthorAnswer = clonedAuthorAnswer;
				this.loadGraphicQuestion(this.lineChartSlot,this.lineChartAuthorAnswer);
				this.updateStudioQuestion(this.lineChartQuestion,this.lineChartSlot,this.lineChartAuthorAnswer);
			} else if(graphMode == com.wiris.quizzes.impl.Assertion.GRAPH_MODE_PIE_CHART) {
				this.pieChartQuestion = clonedQuestion;
				this.pieChartSlot = clonedSlot;
				this.pieChartAuthorAnswer = clonedAuthorAnswer;
				this.loadGraphicQuestion(this.pieChartSlot,this.pieChartAuthorAnswer);
				this.updateStudioQuestion(this.pieChartQuestion,this.pieChartSlot,this.pieChartAuthorAnswer);
			}
		}
	}
	,loadQuestion: function(question,slot,authorAnswer) {
		var questionImpl = question.getImpl();
		this.configureQuestion(questionImpl,slot,authorAnswer);
		this.loadQuestionImpl(question,slot,authorAnswer);
		this.reservedWordsChanged();
		this.context.setPreviewCorrectAnswerUpdated(false);
		this.updateReservedWords();
		if(this.quizzesStudio.isReady()) this.updateCurrentActivity();
	}
	,generateStudioQuestions: function() {
		this.mathQuestion = com.wiris.quizzes.api.Quizzes.getInstance().newQuestion();
		this.mathSlot = this.mathQuestion.addNewSlot();
		this.mathAuthorAnswer = this.mathSlot.addNewAuthorAnswer("");
		this.loadMathQuestion();
		this.graphicQuestion = com.wiris.quizzes.api.Quizzes.getInstance().newQuestion();
		this.graphSlot = this.graphicQuestion.addNewSlot();
		this.graphSlot.setSyntax(com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC);
		this.graphSlot.getSyntax().setParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE,com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD);
		this.graphSlot.setInitialContent(com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_GRAPH);
		this.graphAuthorAnswer = this.graphSlot.addNewAuthorAnswer(com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_GRAPH);
		this.loadGraphicQuestion(this.graphSlot,this.graphAuthorAnswer);
		this.textQuestion = com.wiris.quizzes.api.Quizzes.getInstance().newQuestion();
		this.textSlot = this.textQuestion.addNewSlot();
		this.textSlot.setSyntax(com.wiris.quizzes.api.assertion.SyntaxName.STRING);
		this.textAuthorAnswer = this.textSlot.addNewAuthorAnswer("");
		this.textAuthorAnswer.getComparison().setParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_SPACES,"false");
		this.textAuthorAnswer.getComparison().setParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.MATCH_CASES,"false");
		this.loadTextQuestion();
		this.sketchQuestion = com.wiris.quizzes.api.Quizzes.getInstance().newQuestion();
		this.sketchSlot = this.sketchQuestion.addNewSlot();
		this.sketchSlot.setSyntax(com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC);
		this.sketchSlot.getSyntax().setParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE,com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH);
		this.sketchSlot.setInitialContent(com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_GRAPH);
		this.sketchSlot.setProperty(com.wiris.quizzes.api.PropertyName.GRAPH_TOOLBAR,com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.getDefaultToolbarDefinition(com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH).serialize());
		this.sketchAuthorAnswer = this.sketchSlot.addNewAuthorAnswer(com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_GRAPH);
		this.sketchAuthorAnswer.setComparison(com.wiris.quizzes.api.assertion.ComparisonName.SKETCH_EQUAL);
		this.sketchAuthorAnswer.getComparison().setParameter(com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE,"1");
		this.barChartQuestion = com.wiris.quizzes.api.Quizzes.getInstance().newQuestion();
		this.barChartSlot = this.barChartQuestion.addNewSlot();
		this.barChartSlot.setSyntax(com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC);
		this.barChartSlot.getSyntax().setParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE,com.wiris.quizzes.impl.Assertion.GRAPH_MODE_BAR_CHART);
		this.barChartSlot.setInitialContent(com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_BAR_CHART);
		this.barChartAuthorAnswer = this.barChartSlot.addNewAuthorAnswer(com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_BAR_CHART);
		this.lineChartQuestion = com.wiris.quizzes.api.Quizzes.getInstance().newQuestion();
		this.lineChartSlot = this.lineChartQuestion.addNewSlot();
		this.lineChartSlot.setSyntax(com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC);
		this.lineChartSlot.getSyntax().setParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE,com.wiris.quizzes.impl.Assertion.GRAPH_MODE_LINE_CHART);
		this.lineChartSlot.setInitialContent(com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_LINE_CHART);
		this.lineChartAuthorAnswer = this.lineChartSlot.addNewAuthorAnswer(com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_LINE_CHART);
		this.pieChartQuestion = com.wiris.quizzes.api.Quizzes.getInstance().newQuestion();
		this.pieChartSlot = this.pieChartQuestion.addNewSlot();
		this.pieChartSlot.setSyntax(com.wiris.quizzes.api.assertion.SyntaxName.GRAPHIC);
		this.pieChartSlot.getSyntax().setParameter(com.wiris.quizzes.api.assertion.SyntaxParameterName.GRAPH_MODE,com.wiris.quizzes.impl.Assertion.GRAPH_MODE_PIE_CHART);
		this.pieChartSlot.setInitialContent(com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_PIE_CHART);
		this.pieChartAuthorAnswer = this.pieChartSlot.addNewAuthorAnswer(com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_PIE_CHART);
	}
	,checkQuestionDeprecated: function(question,slotId,authorAnswerId) {
		var questionImpl = question.getImpl();
		var deprecated = questionImpl.isDeprecated();
		if(deprecated != com.wiris.quizzes.impl.QuestionImpl.NO_DEPRECATED) {
			if(deprecated == com.wiris.quizzes.impl.QuestionImpl.DEPRECATED_COMPATIBLE) return true; else if(deprecated == com.wiris.quizzes.impl.QuestionImpl.DEPRECATED_NEEDS_CHECK) {
				this.tempImportQuestion = question;
				this.tempImportSlot = slotId;
				this.tempImportAuthorAnswer = authorAnswerId;
				this.quizzesStudio.showConfirmImportDialog();
				return false;
			}
		}
		return true;
	}
	,setOptionValueIfUnsetParameter: function(question,comparison,parameterName,optionName) {
		if(comparison.getParameter(parameterName) == null || comparison.getParameter(parameterName) == "") comparison.setParameter(parameterName,question.getOption(optionName));
	}
	,configureQuestion: function(questionImpl,slot,authorAnswer) {
		if(!this.context.isOptOpenAnswer()) {
		}
		if(!this.context.isOptAuxiliaryCas()) {
			questionImpl.removeLocalData(com.wiris.quizzes.api.QuizzesConstants.PROPERTY_SHOW_CAS);
			questionImpl.removeLocalData(com.wiris.quizzes.api.QuizzesConstants.PROPERTY_CAS_INITIAL_SESSION);
		}
		if(!this.context.isOptAuxiliaryCasReplaceEditor() && com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_SHOW_CAS_REPLACE == questionImpl.getProperty(com.wiris.quizzes.api.PropertyName.SHOW_CAS)) questionImpl.removeLocalData(com.wiris.quizzes.api.QuizzesConstants.PROPERTY_SHOW_CAS);
		if(!this.context.isOptGradingFunction()) {
			var slots = questionImpl.getSlots();
			var _g = 0;
			while(_g < slots.length) {
				var s = slots[_g];
				++_g;
				var authorAnswers = s.getAuthorAnswers();
				var _g1 = 0;
				while(_g1 < authorAnswers.length) {
					var aa = authorAnswers[_g1];
					++_g1;
					if(aa.getComparison().getName() == com.wiris.quizzes.api.assertion.ComparisonName.GRADING_FUNCTION) aa.setComparison(com.wiris.quizzes.impl.ComparisonAssertion.getDefaultComparison(s.getSyntax().getName()).getName());
				}
			}
		}
		if(!(this.context.isOptOpenAnswer() && this.context.isOptCompoundAnswer())) {
			questionImpl.removeLocalData(com.wiris.quizzes.api.QuizzesConstants.PROPERTY_COMPOUND_ANSWER);
			questionImpl.removeLocalData(com.wiris.quizzes.api.QuizzesConstants.PROPERTY_COMPOUND_ANSWER_GRADE);
			questionImpl.removeLocalData(com.wiris.quizzes.api.QuizzesConstants.PROPERTY_COMPOUND_ANSWER_GRADE_DISTRIBUTION);
		}
		var type = com.wiris.quizzes.impl.QuizzesEnumUtils.string2answerFieldType(questionImpl.getProperty(com.wiris.quizzes.api.PropertyName.ANSWER_FIELD_TYPE));
		if(!this.context.isOptAnswerFieldInlineEditor() && type == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR || !this.context.isOptAnswerFieldPopupEditor() && type == com.wiris.quizzes.api.ui.AnswerFieldType.POPUP_MATH_EDITOR || !this.context.isOptAnswerFieldPlainText() && type == com.wiris.quizzes.api.ui.AnswerFieldType.TEXT_FIELD) questionImpl.removeLocalData(com.wiris.quizzes.api.QuizzesConstants.PROPERTY_ANSWER_FIELD_TYPE);
		if(slot.getSyntax().getName() == com.wiris.quizzes.api.assertion.SyntaxName.MATH) {
			this.setOptionValueIfUnsetParameter(questionImpl,authorAnswer.getComparison(),com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE,com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE);
			this.setOptionValueIfUnsetParameter(questionImpl,authorAnswer.getComparison(),com.wiris.quizzes.api.assertion.ComparisonParameterName.TOLERANCE_DIGITS,com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE_DIGITS);
			this.setOptionValueIfUnsetParameter(questionImpl,authorAnswer.getComparison(),com.wiris.quizzes.api.assertion.ComparisonParameterName.RELATIVE_TOLERANCE,com.wiris.quizzes.api.QuizzesConstants.OPTION_RELATIVE_TOLERANCE);
		}
	}
	,copyCorrectAnswer: function(correctAnswer) {
		this.quizzesStudio.copyCorrectAnswer(correctAnswer);
	}
	,setInitialContent: function(initialContent) {
		this.context.getSlot().setInitialContent(initialContent);
	}
	,setStudioCorrectAnswer: function(correctAnswer) {
		this.context.getAuthorAnswer().setValue(correctAnswer);
	}
	,graphT: function(code) {
		return StringTools.replace(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().graphT(code),"${lang}",this.getLanguage());
	}
	,t: function(code) {
		return StringTools.replace(com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().getTranslator().t(code),"${lang}",this.getLanguage());
	}
	,getConfigurationKey: function(key) {
		return this.context.getConfigurationKey(key);
	}
	,getLanguage: function() {
		return com.wiris.quizzes.impl.ui.QuizzesContext.getInstance().getLanguage();
	}
	,getContext: function() {
		return this.context;
	}
	,importCasSessionLang: null
	,updating: null
	,tempLoadGraphActiveElements: null
	,tempLoadGraphicalRatios: null
	,auxiliaryInitialContent: null
	,reservedWordsRequestController: null
	,allowAllPrefixes: null
	,functionArgumentMode: null
	,functionName: null
	,precisionRelative: null
	,precisionMax: null
	,precisionMin: null
	,anyNotation: null
	,notation: null
	,matchingDigitsRelativeTolerance: null
	,errorMarginRelativeTolerance: null
	,toleranceDigits: null
	,tolerance: null
	,toleranceType: null
	,matchSpaces: null
	,matchCase: null
	,repetitionMatters: null
	,orderMatters: null
	,compoundRatios: null
	,gradeDistribution: null
	,unitPrefixes: null
	,units: null
	,functions: null
	,constants: null
	,listItemsSeparators: null
	,digitGroupsSeparators: null
	,decimalPlacesSeparators: null
	,spaceSeparator: null
	,commaSeparator: null
	,pointSeparator: null
	,inputType: null
	,featuredAssertionsRequestController: null
	,featuredSyntaxRequestController: null
	,variablesRequest: null
	,evaluationRequest: null
	,tempImportAuthorAnswer: null
	,tempImportSlot: null
	,tempImportQuestion: null
	,pieChartAuthorAnswer: null
	,pieChartSlot: null
	,pieChartQuestion: null
	,lineChartAuthorAnswer: null
	,lineChartSlot: null
	,lineChartQuestion: null
	,barChartAuthorAnswer: null
	,barChartSlot: null
	,barChartQuestion: null
	,sketchAuthorAnswer: null
	,sketchSlot: null
	,sketchQuestion: null
	,textAuthorAnswer: null
	,textSlot: null
	,textQuestion: null
	,graphAuthorAnswer: null
	,graphSlot: null
	,graphicQuestion: null
	,mathAuthorAnswer: null
	,mathSlot: null
	,mathQuestion: null
	,quizzesStudio: null
	,context: null
	,__class__: com.wiris.quizzes.impl.ui.controller.QuizzesStudioController
}
com.wiris.quizzes.impl.ui.controller.ReservedWordsRequestController = $hxClasses["com.wiris.quizzes.impl.ui.controller.ReservedWordsRequestController"] = function(consumer) {
	this.consumer = consumer;
	this.changed = true;
};
com.wiris.quizzes.impl.ui.controller.ReservedWordsRequestController.__name__ = ["com","wiris","quizzes","impl","ui","controller","ReservedWordsRequestController"];
com.wiris.quizzes.impl.ui.controller.ReservedWordsRequestController.__interfaces__ = [com.wiris.quizzes.impl.HttpListener];
com.wiris.quizzes.impl.ui.controller.ReservedWordsRequestController.prototype = {
	setChanged: function(changed) {
		this.changed = changed;
	}
	,onError: function(error) {
		if(error == null) error = "null";
		throw "Error in reserved words request: " + error + "\n" + "when calling to service url " + this.grammarUrl;
	}
	,onData: function(data) {
		if(data == null || data == "") return;
		var result = com.wiris.util.json.JSon.getHash(com.wiris.util.json.JSon.decode(data));
		var reservedWords = com.wiris.util.json.JSon.getArray(result.get("reservedWords"));
		var parameters = new Hash();
		var reservedWordsString = reservedWords.join(",");
		parameters.set("reservedWords",reservedWordsString);
		var measureArray = com.wiris.util.json.JSon.getArray(result.get("measureUnits"));
		if(measureArray.length > 0) {
			var measureUnitsString = measureArray.join(",");
			parameters.set("autoformatFracIgnoredWords",measureUnitsString);
		}
		this.consumer.setMathtypeParameters(parameters);
		this.changed = false;
	}
	,update: function() {
		if(!this.changed) return;
		this.grammarUrl = this.consumer.getGrammarUrl();
		var http = com.wiris.quizzes.impl.QuizzesImpl.getInstance().getHttpObject(this,this.grammarUrl,"url",null);
		http.setAsync(true);
		http.request(true);
	}
	,grammarUrl: null
	,consumer: null
	,changed: null
	,__class__: com.wiris.quizzes.impl.ui.controller.ReservedWordsRequestController
}
com.wiris.quizzes.impl.ui.controller.SendInitialWirisCasSessionRequestController = $hxClasses["com.wiris.quizzes.impl.ui.controller.SendInitialWirisCasSessionRequestController"] = function(wirisCasInput) {
	this.wirisCasInput = wirisCasInput;
};
com.wiris.quizzes.impl.ui.controller.SendInitialWirisCasSessionRequestController.__name__ = ["com","wiris","quizzes","impl","ui","controller","SendInitialWirisCasSessionRequestController"];
com.wiris.quizzes.impl.ui.controller.SendInitialWirisCasSessionRequestController.__interfaces__ = [com.wiris.quizzes.impl.HttpListener];
com.wiris.quizzes.impl.ui.controller.SendInitialWirisCasSessionRequestController.prototype = {
	onError: function(error) {
	}
	,onData: function(data) {
		this.wirisCasInput.pollService();
	}
	,wirisCasInput: null
	,__class__: com.wiris.quizzes.impl.ui.controller.SendInitialWirisCasSessionRequestController
}
com.wiris.quizzes.impl.ui.controller.UpdateWirisCasSessionImageRequestController = $hxClasses["com.wiris.quizzes.impl.ui.controller.UpdateWirisCasSessionImageRequestController"] = function(wirisCasInput) {
	this.wirisCasInput = wirisCasInput;
};
com.wiris.quizzes.impl.ui.controller.UpdateWirisCasSessionImageRequestController.__name__ = ["com","wiris","quizzes","impl","ui","controller","UpdateWirisCasSessionImageRequestController"];
com.wiris.quizzes.impl.ui.controller.UpdateWirisCasSessionImageRequestController.__interfaces__ = [com.wiris.quizzes.impl.HttpListener];
com.wiris.quizzes.impl.ui.controller.UpdateWirisCasSessionImageRequestController.prototype = {
	onError: function(error) {
	}
	,onData: function(data) {
		this.wirisCasInput.updateSessionImage();
	}
	,wirisCasInput: null
	,__class__: com.wiris.quizzes.impl.ui.controller.UpdateWirisCasSessionImageRequestController
}
com.wiris.quizzes.impl.ui.controller.VariablesRequestController = $hxClasses["com.wiris.quizzes.impl.ui.controller.VariablesRequestController"] = function(controller) {
	com.wiris.quizzes.impl.ui.controller.QuizzesServiceRequestController.call(this,controller);
};
com.wiris.quizzes.impl.ui.controller.VariablesRequestController.__name__ = ["com","wiris","quizzes","impl","ui","controller","VariablesRequestController"];
com.wiris.quizzes.impl.ui.controller.VariablesRequestController.__super__ = com.wiris.quizzes.impl.ui.controller.QuizzesServiceRequestController;
com.wiris.quizzes.impl.ui.controller.VariablesRequestController.prototype = $extend(com.wiris.quizzes.impl.ui.controller.QuizzesServiceRequestController.prototype,{
	executeRequest: function(response) {
		this.controller.onVariablesResponse(response);
	}
	,__class__: com.wiris.quizzes.impl.ui.controller.VariablesRequestController
});
if(!com.wiris.util.telemetry) com.wiris.util.telemetry = {}
com.wiris.util.telemetry.Tracker = $hxClasses["com.wiris.util.telemetry.Tracker"] = function(service) {
	this.service = service;
};
com.wiris.util.telemetry.Tracker.__name__ = ["com","wiris","util","telemetry","Tracker"];
com.wiris.util.telemetry.Tracker.prototype = {
	filterParameters: function(parameters,allowedParameters) {
		if(parameters != null && allowedParameters != null) {
			var keys = parameters.keys();
			while(keys.hasNext()) {
				var key = keys.next();
				if(allowedParameters.get(key) != null) {
					var value = parameters.get(key);
					var allowedValues = allowedParameters.get(key);
					var defaultValue = allowedValues[0];
					if(!com.wiris.util.type.Arrays.containsArray(allowedValues,value)) parameters.set(key,defaultValue);
				} else parameters.remove(key);
			}
		}
	}
	,sendInformationImpl: function(topic,parameters) {
		var message = new com.wiris.util.telemetry.Message(topic,parameters);
		this.service.sendMessage(message);
	}
	,service: null
	,__class__: com.wiris.util.telemetry.Tracker
}
if(!com.wiris.quizzes.telemetry) com.wiris.quizzes.telemetry = {}
com.wiris.quizzes.telemetry.QuizzesTracker = $hxClasses["com.wiris.quizzes.telemetry.QuizzesTracker"] = function(service) {
	this.activityTimestamp = -1;
	this.studioTimestamp = -1;
	com.wiris.util.telemetry.Tracker.call(this,service);
};
com.wiris.quizzes.telemetry.QuizzesTracker.__name__ = ["com","wiris","quizzes","telemetry","QuizzesTracker"];
com.wiris.quizzes.telemetry.QuizzesTracker.getIndex = function(topic) {
	if(topic == com.wiris.quizzes.telemetry.QuizzesTrackingTopic.STUDIO_OPENED) return 1; else if(topic == com.wiris.quizzes.telemetry.QuizzesTrackingTopic.STUDIO_CLOSED) return 2; else if(topic == com.wiris.quizzes.telemetry.QuizzesTrackingTopic.HELP_REQUESTED) return 3; else if(topic == com.wiris.quizzes.telemetry.QuizzesTrackingTopic.ACTIVITY_SWITCH) return 4;
	return -1;
}
com.wiris.quizzes.telemetry.QuizzesTracker.__super__ = com.wiris.util.telemetry.Tracker;
com.wiris.quizzes.telemetry.QuizzesTracker.prototype = $extend(com.wiris.util.telemetry.Tracker.prototype,{
	sendInformation: function(topic,parameters) {
		var index = com.wiris.quizzes.telemetry.QuizzesTracker.getIndex(topic);
		if(index >= 0) this.sendInformationImpl(index,parameters);
	}
	,activitySwitch: function(question,from,to) {
		var parameters = new Hash();
		parameters.set(com.wiris.quizzes.telemetry.QuizzesTracker.KEY_QUESTION,question.serialize());
		parameters.set(com.wiris.quizzes.telemetry.QuizzesTracker.KEY_FROM,from);
		parameters.set(com.wiris.quizzes.telemetry.QuizzesTracker.KEY_TO,to);
		if(this.activityTimestamp != -1) {
			var activityTime = new Date().getTime() - this.activityTimestamp;
			this.studioTimestamp = new Date().getTime();
			parameters.set(com.wiris.quizzes.telemetry.QuizzesTracker.KEY_ACTIVITY_TIME,activityTime + "");
		}
		this.sendInformation(com.wiris.quizzes.telemetry.QuizzesTrackingTopic.ACTIVITY_SWITCH,parameters);
	}
	,helpRequested: function(question,activity) {
		var parameters = new Hash();
		parameters.set(com.wiris.quizzes.telemetry.QuizzesTracker.KEY_QUESTION,question.serialize());
		parameters.set(com.wiris.quizzes.telemetry.QuizzesTracker.KEY_ACTIVITY,activity);
		this.sendInformation(com.wiris.quizzes.telemetry.QuizzesTrackingTopic.HELP_REQUESTED,parameters);
	}
	,studioClosed: function(question,activity,cause) {
		var parameters = new Hash();
		parameters.set(com.wiris.quizzes.telemetry.QuizzesTracker.KEY_QUESTION,question.serialize());
		parameters.set(com.wiris.quizzes.telemetry.QuizzesTracker.KEY_ACTIVITY,activity);
		parameters.set(com.wiris.quizzes.telemetry.QuizzesTracker.KEY_CAUSE,cause);
		if(this.studioTimestamp != -1) {
			var sessionTime = new Date().getTime() - this.studioTimestamp;
			this.studioTimestamp = -1;
			this.activityTimestamp = -1;
			parameters.set(com.wiris.quizzes.telemetry.QuizzesTracker.KEY_SESSION_TIME,sessionTime + "");
		}
		this.sendInformation(com.wiris.quizzes.telemetry.QuizzesTrackingTopic.STUDIO_CLOSED,parameters);
	}
	,studioOpened: function(question) {
		this.studioTimestamp = new Date().getTime();
		this.activityTimestamp = new Date().getTime();
		var parameters = new Hash();
		parameters.set(com.wiris.quizzes.telemetry.QuizzesTracker.KEY_QUESTION,question.serialize());
		this.sendInformation(com.wiris.quizzes.telemetry.QuizzesTrackingTopic.STUDIO_OPENED,parameters);
	}
	,activityTimestamp: null
	,studioTimestamp: null
	,__class__: com.wiris.quizzes.telemetry.QuizzesTracker
});
com.wiris.quizzes.telemetry.QuizzesTrackingTopic = $hxClasses["com.wiris.quizzes.telemetry.QuizzesTrackingTopic"] = { __ename__ : ["com","wiris","quizzes","telemetry","QuizzesTrackingTopic"], __constructs__ : ["STUDIO_OPENED","STUDIO_CLOSED","HELP_REQUESTED","ACTIVITY_SWITCH"] }
com.wiris.quizzes.telemetry.QuizzesTrackingTopic.STUDIO_OPENED = ["STUDIO_OPENED",0];
com.wiris.quizzes.telemetry.QuizzesTrackingTopic.STUDIO_OPENED.toString = $estr;
com.wiris.quizzes.telemetry.QuizzesTrackingTopic.STUDIO_OPENED.__enum__ = com.wiris.quizzes.telemetry.QuizzesTrackingTopic;
com.wiris.quizzes.telemetry.QuizzesTrackingTopic.STUDIO_CLOSED = ["STUDIO_CLOSED",1];
com.wiris.quizzes.telemetry.QuizzesTrackingTopic.STUDIO_CLOSED.toString = $estr;
com.wiris.quizzes.telemetry.QuizzesTrackingTopic.STUDIO_CLOSED.__enum__ = com.wiris.quizzes.telemetry.QuizzesTrackingTopic;
com.wiris.quizzes.telemetry.QuizzesTrackingTopic.HELP_REQUESTED = ["HELP_REQUESTED",2];
com.wiris.quizzes.telemetry.QuizzesTrackingTopic.HELP_REQUESTED.toString = $estr;
com.wiris.quizzes.telemetry.QuizzesTrackingTopic.HELP_REQUESTED.__enum__ = com.wiris.quizzes.telemetry.QuizzesTrackingTopic;
com.wiris.quizzes.telemetry.QuizzesTrackingTopic.ACTIVITY_SWITCH = ["ACTIVITY_SWITCH",3];
com.wiris.quizzes.telemetry.QuizzesTrackingTopic.ACTIVITY_SWITCH.toString = $estr;
com.wiris.quizzes.telemetry.QuizzesTrackingTopic.ACTIVITY_SWITCH.__enum__ = com.wiris.quizzes.telemetry.QuizzesTrackingTopic;
com.wiris.system.ui.JsComponent = $hxClasses["com.wiris.system.ui.JsComponent"] = function(component) {
	this.component = component;
	this.element = null;
	this.component.setComputedStyle(new com.wiris.system.ui.ComputedStyle(this));
};
com.wiris.system.ui.JsComponent.__name__ = ["com","wiris","system","ui","JsComponent"];
com.wiris.system.ui.JsComponent.__interfaces__ = [com.wiris.util.ui.interaction.ComponentListener];
com.wiris.system.ui.JsComponent.trapFocusDescriptor = null;
com.wiris.system.ui.JsComponent.isFocusTrapped = function() {
	return com.wiris.system.ui.JsComponent.trapFocusDescriptor != null;
}
com.wiris.system.ui.JsComponent.trapFocus = function(disabledFocusContainer,focusableContainer) {
	if(com.wiris.system.ui.JsComponent.trapFocusDescriptor != null) com.wiris.system.JsDOMUtils.untrapFocus(com.wiris.system.ui.JsComponent.trapFocusDescriptor);
	com.wiris.system.ui.JsComponent.trapFocusDescriptor = com.wiris.system.JsDOMUtils.trapFocus(disabledFocusContainer,focusableContainer);
	com.wiris.system.ui.JsComponent.trapFocusTargetArray.push(focusableContainer);
	com.wiris.system.ui.JsComponent.trapFocusContainerArray.push(disabledFocusContainer);
	return com.wiris.system.ui.JsComponent.trapFocusDescriptor;
}
com.wiris.system.ui.JsComponent.untrapFocus = function() {
	if(com.wiris.system.ui.JsComponent.trapFocusDescriptor != null) {
		com.wiris.system.JsDOMUtils.untrapFocus(com.wiris.system.ui.JsComponent.trapFocusDescriptor);
		com.wiris.system.ui.JsComponent.trapFocusDescriptor = null;
		com.wiris.system.ui.JsComponent.trapFocusTargetArray.pop();
		com.wiris.system.ui.JsComponent.trapFocusContainerArray.pop();
	}
	while(com.wiris.system.ui.JsComponent.trapFocusTargetArray.length > 0 && com.wiris.system.ui.JsComponent.trapFocusContainerArray.length > 0) {
		var trapFocusTarget = com.wiris.system.ui.JsComponent.trapFocusTargetArray[com.wiris.system.ui.JsComponent.trapFocusTargetArray.length - 1];
		var trapFocusContainer = com.wiris.system.ui.JsComponent.trapFocusContainerArray[com.wiris.system.ui.JsComponent.trapFocusContainerArray.length - 1];
		if(trapFocusTarget.parentNode != null && trapFocusContainer.parentNode != null) {
			com.wiris.system.ui.JsComponent.trapFocusDescriptor = com.wiris.system.JsDOMUtils.trapFocus(trapFocusContainer,trapFocusTarget);
			return;
		} else {
			com.wiris.system.ui.JsComponent.trapFocusTargetArray.pop();
			com.wiris.system.ui.JsComponent.trapFocusContainerArray.pop();
		}
	}
}
com.wiris.system.ui.JsComponent.isCSSLoaded = function() {
	if(!com.wiris.system.ui.JsComponent.cssLoaded) {
		var apps = js.Lib.document.getElementsByClassName("wrsUI_app");
		var element;
		var remove = false;
		if(apps.length > 0) element = apps[0]; else {
			element = js.Lib.document.createElement("div");
			element.className = "wrsUI_app";
			js.Lib.document.body.appendChild(element);
			remove = true;
		}
		com.wiris.system.ui.JsComponent.cssLoaded = com.wiris.system.JsDOMUtils.getComputedStyleProperty(apps[0],"transition") != "all 0s ease 0s";
		if(remove) js.Lib.document.body.removeChild(element);
	}
	return com.wiris.system.ui.JsComponent.cssLoaded;
}
com.wiris.system.ui.JsComponent.prototype = {
	monitorInsertion: function(target,elementInserted) {
		var observer = new MutationObserver(function(mutationsList, observer) {
			for (let mutation of mutationsList) {
				if (mutation.addedNodes != null) {
					for (let node of mutation.addedNodes) {
						elementInserted(node, observer);
					}
				}
			}
		});
		observer.observe(target,{ childList : true, subtree : true});
	}
	,getClassNameElement: function() {
		return this.getStyleElement();
	}
	,getIdElement: function() {
		return this.getStyleElement();
	}
	,getStyleElement: function() {
		return this.getElement();
	}
	,captureJsEvents: function() {
		var self = this;
		var element = this.getElement();
		element.wrsUI_attachEventListeners = function() {
			if(element.wrsUI_eventListenerDescriptors != null) return;
			element.wrsUI_eventListenerDescriptors = new Array();
			var masterElement = self.getMasterElement();
			var mousePressed = false;
			var callbackFunction = function(e) {
				if(masterElement == element || com.wiris.system.JsDOMUtils.isDescendant(masterElement,element)) self.component.fireEvent(new com.wiris.system.ui.JsEvent(self,self.component,e));
			};
			var keyDownCallbackFunction = function(e) {
				callbackFunction(e);
				if(!self.component.isKeyScrollingEnabled() && (e.keyCode == 38 || e.keyCode == 40)) e.preventDefault();
			};
			var mouseDownCallbackFunction = function(e) {
				callbackFunction(e);
				mousePressed = true;
				document.manualRelatedTarget = e.target;
			};
			var mouseMoveCallbackFunction = function(e) {
				var target = com.wiris.system.JsDOMUtils.getEventTarget(e);
				if(masterElement == element || mousePressed || target == element || com.wiris.system.JsDOMUtils.isDescendant(element,target)) callbackFunction(e);
			};
			var mouseUpCallbackFunction = function(e) {
				callbackFunction(e);
				mousePressed = false;
			};
			var focusCallbackFunction = function(e) {
				callbackFunction(e);
			};
			var blurCallbackFunction = function(e) {
				var target = document.manualRelatedTarget;
				if(target != null) {
					e.wrsUI_targetComponent = target.wrsUI_component;
					while(e.wrsUI_targetComponent == null && target.parentElement != null) {
						e.wrsUI_targetComponent = target.parentElement.wrsUI_component;
						target = target.parentElement;
					}
				}
				callbackFunction(e);
			};
			element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(element,"click",callbackFunction));
			element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(element,"mousedown",mouseDownCallbackFunction));
			element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(masterElement,"mouseup",mouseUpCallbackFunction));
			element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(element,"mouseenter",callbackFunction));
			element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(element,"mouseleave",callbackFunction));
			element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(masterElement,"mousemove",mouseMoveCallbackFunction));
			element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(element,"touchstart",mouseDownCallbackFunction));
			element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(masterElement,"touchend",mouseUpCallbackFunction));
			element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(masterElement,"touchmove",mouseMoveCallbackFunction));
			var i = HxOverrides.iter(self.getInputElements());
			while(i.hasNext()) {
				var inputElement = i.next();
				element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(inputElement,"focus",focusCallbackFunction));
				element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(inputElement,"blur",blurCallbackFunction));
				element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(inputElement,"input",callbackFunction));
			}
			element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(element,"keydown",keyDownCallbackFunction));
			element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(element,"keyup",callbackFunction));
			element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(element,"keypress",callbackFunction));
			if(self.component.isDraggable()) {
				element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(element,"dragstart",callbackFunction));
				element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(element,"drag",callbackFunction));
				element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(element,"dragover",callbackFunction));
				element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(element,"dragenter",callbackFunction));
				element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(element,"dragend",callbackFunction));
				element.wrsUI_eventListenerDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(element,"drop",callbackFunction));
			}
		};
		element.wrsUI_detachEventListeners = function() {
			if(element.wrsUI_eventListenerDescriptors == null) return;
			var i = $iterator(element.wrsUI_eventListenerDescriptors)();
			while(i.hasNext()) com.wiris.system.JsDOMUtils.removeEventListener(i.next());
			element.wrsUI_eventListenerDescriptors = null;
		};
		element.wrsUI_attachEventListeners();
	}
	,clearRipple: function() {
		return;
	}
	,getInputElements: function() {
		return new Array();
	}
	,getMasterElement: function() {
		return this.getElement();
	}
	,createRecursiveUpdateGUIFunction: function(element) {
		return function() {
			var garbage = element.offsetWidth;
			var child = element.firstChild;
			while(child != null) {
				if(child.wrsUI_updateGUI != null) child.wrsUI_updateGUI();
				child = child.nextSibling;
			}
		};
	}
	,assignDefaultUpdateGUIFunction: function(element) {
		element.wrsUI_defaultUpdateGUI = this.createRecursiveUpdateGUIFunction(element);
		if(element.wrsUI_updateGUI == null) element.wrsUI_updateGUI = element.wrsUI_defaultUpdateGUI;
	}
	,sanitizeValue: function(size) {
		if(size == com.wiris.util.ui.Style.SIZE_AUTO) return "";
		return size + "px";
	}
	,sanitizeBorder: function(size,color) {
		if(size == com.wiris.util.ui.Style.SIZE_AUTO) return "";
		var colorString = color == null?"transparent":color.toCSSHex();
		return size + "px solid " + colorString;
	}
	,updateStyles: function() {
		this.getElement();
		this.updateElementClasses();
		this.updateElementId();
		var element = this.getStyleElement();
		var style = this.component.getStyle();
		var borderSize = style.getBorderSize();
		var borderColor = style.getBorderColor();
		element.style.borderTop = this.sanitizeBorder(borderSize[0],borderColor[0]);
		element.style.borderRight = this.sanitizeBorder(borderSize[1],borderColor[1]);
		element.style.borderBottom = this.sanitizeBorder(borderSize[2],borderColor[2]);
		element.style.borderLeft = this.sanitizeBorder(borderSize[3],borderColor[3]);
		var margin = style.getMargin();
		element.style.marginTop = this.sanitizeValue(margin[0]);
		element.style.marginRight = this.sanitizeValue(margin[1]);
		element.style.marginBottom = this.sanitizeValue(margin[2]);
		element.style.marginLeft = this.sanitizeValue(margin[3]);
		element.style.lineHeight = this.sanitizeValue(style.getLineHeight());
		if(style.getLetterSpacing() != 0) element.style.letterSpacing = style.getLetterSpacing() + "px"; else element.style.letterSpacing = "";
		element.style.fontWeight = style.getFontWeight();
		element.style.fontSize = this.sanitizeValue(style.getFontSize());
		element.style.textTransform = style.getTextTransform();
		var padding = style.getPadding();
		element.style.paddingTop = this.sanitizeValue(padding[0]);
		element.style.paddingRight = this.sanitizeValue(padding[1]);
		element.style.paddingBottom = this.sanitizeValue(padding[2]);
		element.style.paddingLeft = this.sanitizeValue(padding[3]);
		var backgroundImageUrl = style.getBackgroundImageUrl();
		if(backgroundImageUrl != null) element.style.background = "url(" + backgroundImageUrl + ")"; else element.style.background = "";
		var backgroundColor = style.getBackgroundColor();
		if(backgroundColor != null) element.style.backgroundColor = backgroundColor.toCSSHex(); else element.style.backgroundColor = "";
		var foregroundColor = style.getForegroundColor();
		if(foregroundColor != null) element.style.color = foregroundColor.toCSSHex(); else element.style.color = "";
		var horizontalAlignment = style.getHorizontalAlignment();
		var verticalAlignment = style.getVerticalAlignment();
		element.style.textAlign = com.wiris.system.ui.JsComponent.TEXT_ALIGN_VALUES[horizontalAlignment];
		element.style.verticalAlign = com.wiris.system.ui.JsComponent.VERTICAL_ALIGN_VALUES[verticalAlignment];
		element.style.alignItems = com.wiris.system.ui.JsComponent.ALIGN_ITEMS_VALUES[verticalAlignment];
		element.style.justifyContent = com.wiris.system.ui.JsComponent.ALIGN_ITEMS_VALUES[horizontalAlignment];
		if(style.getWidth() == com.wiris.util.ui.Style.SIZE_FULL) {
			element.style.width = "100%";
			element.style.left = "0";
			element.style.right = "0";
		} else if(style.getWidth() != com.wiris.util.ui.Style.SIZE_AUTO) element.style.width = style.getWidth() + style.getWidthUnit(); else element.style.width = "";
		if(style.getHeight() == com.wiris.util.ui.Style.SIZE_FULL) {
			element.style.height = "100%";
			element.style.top = "0";
			element.style.bottom = "0";
		} else if(style.getHeight() != com.wiris.util.ui.Style.SIZE_AUTO) element.style.height = style.getHeight() + style.getHeightUnit(); else element.style.height = "";
		element.style.minWidth = style.getMinWidth() == com.wiris.util.ui.Style.SIZE_AUTO?"":style.getMinWidth() + style.getMinWidthUnit();
		element.style.minHeight = style.getMinHeight() == com.wiris.util.ui.Style.SIZE_AUTO?"":style.getMinHeight() + style.getMinHeightUnit();
		element.style.maxWidth = style.getMaxWidth() == com.wiris.util.ui.Style.SIZE_AUTO?"":style.getMaxWidth() + style.getMaxWidthUnit();
		element.style.maxHeight = style.getMaxHeight() == com.wiris.util.ui.Style.SIZE_AUTO?"":style.getMaxHeight() + style.getMaxHeightUnit();
		if(style.getZIndex() != 0) element.style.zIndex = style.getZIndex(); else element.style.zIndex = "";
		var cssVariablesKeys = style.getCSSVariablesNames();
		while(cssVariablesKeys != null && cssVariablesKeys.hasNext()) {
			var variableName = cssVariablesKeys.next();
			element.style.setProperty(variableName,style.getCSSVariable(variableName));
		}
	}
	,updateElementClasses: function() {
		var element = this.getClassNameElement();
		var modelClasses = this.component.getClasses();
		var elementClasses = element.className != ""?element.className.split(" "):new Array();
		var updateClasses = false;
		var i = elementClasses.length - 1;
		while(i >= 0) {
			var className = elementClasses[i];
			if(!StringTools.startsWith(className,"wrsUI_") || !(StringTools.startsWith(className,"wrsUI_aux_") || com.wiris.system.ArrayEx.contains(modelClasses,HxOverrides.substr(className,6,null)))) {
				elementClasses.splice(i,1);
				updateClasses = true;
			}
			i--;
		}
		var _g = 0;
		while(_g < modelClasses.length) {
			var className = modelClasses[_g];
			++_g;
			if(!com.wiris.system.ArrayEx.contains(elementClasses,"wrsUI_" + className)) {
				elementClasses.push("wrsUI_" + className);
				updateClasses = true;
			}
		}
		if(updateClasses) element.className = elementClasses.join(" ");
	}
	,updateElementId: function() {
		var element = this.getIdElement();
		var modelId = "wrsUI_" + this.component.getId();
		var elementId = element.id;
		if(modelId != "wrsUI_") {
			if(elementId.indexOf(modelId) < 0) {
				var i = 2;
				var temporalId = modelId;
				while(js.Lib.document.getElementById(temporalId) != null) temporalId = modelId + "_" + i++;
				element.id = temporalId;
			}
		}
	}
	,styleChanged: function(e) {
		this.updateStyles();
	}
	,blurRequested: function(e) {
		this.element.blur();
	}
	,focusRequested: function(e) {
		if(com.wiris.system.ui.JsComponent.trapFocusDescriptor == null || com.wiris.system.JsDOMUtils.isDescendant(com.wiris.system.ui.JsComponent.trapFocusTargetArray[com.wiris.system.ui.JsComponent.trapFocusTargetArray.length - 1],this.element)) {
			this.element.focus();
			if(this.element != document.activeElement) {
				var inputElementsIterator = HxOverrides.iter(this.getInputElements());
				var inputElement = null;
				while(inputElementsIterator.hasNext() && inputElement != document.activeElement) {
					inputElement = inputElementsIterator.next();
					inputElement.focus();
				}
			}
		}
	}
	,draggableChanged: function(e) {
	}
	,updateEnabled: function() {
		var inputElementsIterator = HxOverrides.iter(this.getInputElements());
		while(inputElementsIterator.hasNext()) {
			var inputElement = inputElementsIterator.next();
			if(this.component.isEnabled()) inputElement.removeAttribute("disabled"); else inputElement.setAttribute("disabled","true");
		}
	}
	,enabledChanged: function(e) {
		this.updateEnabled();
	}
	,visibilityChanged: function(e) {
		this.getElement().wrsUI_updateGUI();
	}
	,removeListeners: function() {
		if(this.component.isDraggable()) {
			this.component.removeDragAndDropListener(this.dragAndDropListener);
			if(js.Boot.__instanceof(this.component.getParent(),com.wiris.util.ui.component.Panel)) {
				var panel = this.component.getParent();
				panel.removeComponentTreeListener(this.dragAndDropListener);
			}
		}
		this.component.removeDefaultComponentListener(this);
	}
	,getContextMenu: function() {
		if(this.getParent() == null) {
			if(this.contextMenu == null) this.contextMenu = new com.wiris.system.ui.JsContextMenuProvider(this.element);
			return this.contextMenu;
		}
		return this.getParent().getContextMenu();
	}
	,setParent: function(parent) {
		this.parent = parent;
	}
	,getParent: function() {
		return this.parent;
	}
	,setElement: function(element) {
		this.element = element;
	}
	,getElement: function() {
		if(this.element == null) {
			this.buildElement();
			this.component.setElement(this.element);
			this.updateEnabled();
			if(this.component.getTabIndex() != null) this.element.setAttribute("tabindex",this.component.getTabIndex());
			if(this.component.isDraggable()) {
				this.element.setAttribute("draggable","true");
				this.dragAndDropListener = new com.wiris.system.ui.JsDragAndDropListener(this.component);
				this.component.addDragAndDropListener(this.dragAndDropListener);
				if(js.Boot.__instanceof(this.component.getParent(),com.wiris.util.ui.component.Panel)) {
					var panel = this.component.getParent();
					panel.addComponentTreeListener(this.dragAndDropListener);
				}
			}
			this.captureJsEvents();
			this.updateStyles();
			if(this.component.hasClass(com.wiris.util.ui.component.Component.CLASS_APP)) {
				var self = this;
				this.monitorInsertion(this.element,function(insertedNode,observer) {
					if(com.wiris.system.JsDOMUtils.hasClass(insertedNode,"wrsUI_component")) self.element.wrsUI_updateGUI();
				});
				this.element.setAttribute("data-useragent",navigator.userAgent);
				setTimeout(function() {
					self.component.addClass("animated");
				},100);
			}
			this.component.addDefaultComponentListener(this);
			this.element.wrsUI_component = this.component;
		}
		return this.element;
	}
	,createElement: function(nodeName,$namespace) {
		var element;
		if($namespace != null) element = js.Lib.document.createElementNS($namespace,nodeName); else element = js.Lib.document.createElement(nodeName);
		this.assignDefaultUpdateGUIFunction(element);
		return element;
	}
	,buildElement: function() {
		throw "Not implemented yet.";
	}
	,dragAndDropListener: null
	,contextMenu: null
	,parent: null
	,element: null
	,component: null
	,__class__: com.wiris.system.ui.JsComponent
}
com.wiris.util.ui.interaction.ComponentTreeListener = $hxClasses["com.wiris.util.ui.interaction.ComponentTreeListener"] = function() { }
com.wiris.util.ui.interaction.ComponentTreeListener.__name__ = ["com","wiris","util","ui","interaction","ComponentTreeListener"];
com.wiris.util.ui.interaction.ComponentTreeListener.prototype = {
	childAdded: null
	,childMoved: null
	,childRemoved: null
	,__class__: com.wiris.util.ui.interaction.ComponentTreeListener
}
com.wiris.system.ui.JsPanel = $hxClasses["com.wiris.system.ui.JsPanel"] = function(panel) {
	com.wiris.system.ui.JsComponent.call(this,panel);
	this.panel = panel;
	this.panel.addComponentTreeListener(this);
	this.components = new Array();
};
com.wiris.system.ui.JsPanel.__name__ = ["com","wiris","system","ui","JsPanel"];
com.wiris.system.ui.JsPanel.__interfaces__ = [com.wiris.util.ui.interaction.ComponentTreeListener];
com.wiris.system.ui.JsPanel.__super__ = com.wiris.system.ui.JsComponent;
com.wiris.system.ui.JsPanel.prototype = $extend(com.wiris.system.ui.JsComponent.prototype,{
	updateStyles: function() {
		com.wiris.system.ui.JsComponent.prototype.updateStyles.call(this);
		if(js.Boot.__instanceof(this.panel,com.wiris.util.ui.component.FlowPanel)) {
			var element = this.getOriginalElement();
			var direction = (js.Boot.__cast(this.panel , com.wiris.util.ui.component.FlowPanel)).getDirection();
			if(direction == com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM) {
				var style = this.panel.getStyle();
				var horizontalAlignment = style.getHorizontalAlignment();
				var verticalAlignment = style.getVerticalAlignment();
				element.style.alignItems = com.wiris.system.ui.JsComponent.ALIGN_ITEMS_VALUES[horizontalAlignment];
				element.style.justifyContent = com.wiris.system.ui.JsComponent.ALIGN_ITEMS_VALUES[verticalAlignment];
			}
		}
	}
	,clearRippleEffectsRecur: function(components) {
		var i = HxOverrides.iter(components);
		while(i.hasNext()) {
			var component = i.next();
			if(js.Boot.__instanceof(component,com.wiris.system.ui.JsPanel)) this.clearRippleEffectsRecur((js.Boot.__cast(component , com.wiris.system.ui.JsPanel)).components); else if(js.Boot.__instanceof(component,com.wiris.system.ui.JsRippleComponent)) (js.Boot.__cast(component , com.wiris.system.ui.JsRippleComponent)).clearRipple();
		}
	}
	,clearRippleEffects: function() {
		this.clearRippleEffectsRecur(this.components);
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsComponent.prototype.removeListeners.call(this);
		this.panel.removeComponentTreeListener(this);
		var i = HxOverrides.iter(this.components);
		while(i.hasNext()) i.next().removeListeners();
	}
	,childRemoved: function(e) {
		var element = this.getOriginalElement();
		var child = element.childNodes[e.getChildPosition()];
		child.wrsUI_detachEventListeners();
		element.removeChild(child);
		var jsComponent = this.components.splice(e.getChildPosition(),1)[0];
		jsComponent.removeListeners();
	}
	,childMoved: function(e) {
		var element = this.getOriginalElement();
		var child = e.getChild().getElement();
		element.insertBefore(child,element.childNodes[e.getChildDestination()]);
		this.components.splice(e.getChildDestination(),0,this.components.splice(e.getChildPosition(),1)[0]);
	}
	,childAdded: function(e) {
		var child = this.buildAndInsertChild(e.getChild(),e.getChildPosition());
		child.wrsUI_updateGUI();
		child.wrsUI_attachEventListeners();
	}
	,clearRipple: function() {
		var i = HxOverrides.iter(this.components);
		while(i.hasNext()) i.next().clearRipple();
	}
	,getOriginalElement: function() {
		return this.originalElement;
	}
	,setOriginalElement: function(element) {
		this.originalElement = element;
	}
	,getComponents: function() {
		return this.components;
	}
	,buildAndInsertChild: function(component,index) {
		var element = this.getOriginalElement();
		var child = this.panel.getComponentBuilder().buildComponent(component,this);
		var childElement = child.getElement();
		if(index < element.childNodes.length) element.insertBefore(childElement,element.childNodes[index]); else element.appendChild(childElement);
		this.components.push(child);
		return childElement;
	}
	,buildChildren: function() {
		var i = HxOverrides.iter(this.panel.getComponents());
		while(i.hasNext()) {
			var child = i.next();
			this.buildAndInsertChild(child,child.getChildIndex());
		}
	}
	,buildElement: function() {
		var element = this.createElement("div");
		this.setElement(element);
		this.setOriginalElement(element);
		this.buildChildren();
	}
	,components: null
	,originalElement: null
	,panel: null
	,__class__: com.wiris.system.ui.JsPanel
});
if(!com.wiris.quizzes.ui) com.wiris.quizzes.ui = {}
com.wiris.quizzes.ui.JsAnswerFieldComponent = $hxClasses["com.wiris.quizzes.ui.JsAnswerFieldComponent"] = function(answerField) {
	com.wiris.system.ui.JsPanel.call(this,answerField);
	this.answerField = answerField;
	this.answerField.addChangeListener(this);
};
com.wiris.quizzes.ui.JsAnswerFieldComponent.__name__ = ["com","wiris","quizzes","ui","JsAnswerFieldComponent"];
com.wiris.quizzes.ui.JsAnswerFieldComponent.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.quizzes.ui.JsAnswerFieldComponent.__super__ = com.wiris.system.ui.JsPanel;
com.wiris.quizzes.ui.JsAnswerFieldComponent.prototype = $extend(com.wiris.system.ui.JsPanel.prototype,{
	stateChanged: function(e) {
		this.getOriginalElement().setAttribute("value",this.answerField.getValue());
	}
	,getContextPanel: function() {
		return this.contextPanel;
	}
	,buildElement: function() {
		com.wiris.system.ui.JsPanel.prototype.buildElement.call(this);
		var element = this.getOriginalElement();
		if(this.answerField.getFieldType() == com.wiris.quizzes.api.ui.AnswerFieldType.INLINE_MATH_EDITOR) element.style.display = "inline";
		this.contextPanel = this.answerField.getComponentBuilder().buildComponent(this.answerField.getContextPanel(),this);
		this.contextPanel.setUseClamp(false);
		this.contextPanel.setFollowMouse(true);
		this.contextPanel.setPadding(8,16);
	}
	,contextPanel: null
	,answerField: null
	,__class__: com.wiris.quizzes.ui.JsAnswerFieldComponent
});
com.wiris.quizzes.ui.JsAuthoringFieldComponent = $hxClasses["com.wiris.quizzes.ui.JsAuthoringFieldComponent"] = function(authoringField) {
	com.wiris.system.ui.JsPanel.call(this,authoringField);
	this.authoringField = authoringField;
};
com.wiris.quizzes.ui.JsAuthoringFieldComponent.__name__ = ["com","wiris","quizzes","ui","JsAuthoringFieldComponent"];
com.wiris.quizzes.ui.JsAuthoringFieldComponent.__super__ = com.wiris.system.ui.JsPanel;
com.wiris.quizzes.ui.JsAuthoringFieldComponent.prototype = $extend(com.wiris.system.ui.JsPanel.prototype,{
	buildElement: function() {
		com.wiris.system.ui.JsPanel.prototype.buildElement.call(this);
		if(this.authoringField.getFieldType() == com.wiris.quizzes.api.ui.AuthoringFieldType.INLINE_MATH_EDITOR) {
			var element = this.getOriginalElement();
			element.style.display = "inline";
		}
	}
	,authoringField: null
	,__class__: com.wiris.quizzes.ui.JsAuthoringFieldComponent
});
com.wiris.quizzes.ui.JsCalcMeInputComponent = $hxClasses["com.wiris.quizzes.ui.JsCalcMeInputComponent"] = function(calcMeInput) {
	com.wiris.system.ui.JsComponent.call(this,calcMeInput);
	this.calcMeInput = calcMeInput;
};
com.wiris.quizzes.ui.JsCalcMeInputComponent.__name__ = ["com","wiris","quizzes","ui","JsCalcMeInputComponent"];
com.wiris.quizzes.ui.JsCalcMeInputComponent.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.quizzes.ui.JsCalcMeInputComponent.isLoadingCalcMeScript = function() {
	return com.wiris.quizzes.ui.JsCalcMeInputComponent.loadingCalc;
}
com.wiris.quizzes.ui.JsCalcMeInputComponent.__super__ = com.wiris.system.ui.JsComponent;
com.wiris.quizzes.ui.JsCalcMeInputComponent.prototype = $extend(com.wiris.system.ui.JsComponent.prototype,{
	updateContent: function() {
		if(this.calcMe == null) this.loadCalcMe(); else if(this.calcMe.calcModel != this.calcMeInput.getCalcMe()) this.calcMeInput.setCalcMe(this.calcMe.calcModel);
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,isCalcMeScriptLoaded: function() {
		var window = js.Lib.window;
		return window.com != null && window.com.wiris != null && window.com.wiris.js != null && window.com.wiris.js.JsCalc != null;
	}
	,loadCalcMe: function() {
		var _g = this;
		var calcMe = null;
		var element = this.getElement();
		if(this.isCalcMeScriptLoaded()) {
			if(this.calcMe == null) {
				try {
					calcMe = new js.Lib.window.com.wiris.js.JsCalc(this.getParams());
					this.calcMe = calcMe;
					this.calcMeInput.setCalcMe(this.calcMe.calcModel);
				} catch( e ) {
					js.Lib.alert(e);
				}
				var component = this.calcMeInput;
				this.calcMe.onIsReady(function() {
					com.wiris.system.JsDOMUtils.trimDuplicatedCSS(js.Lib.document,com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.HAND_URL),"hand.css");
					if(com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_STATIC) == "true") com.wiris.system.JsDOMUtils.trimDuplicatedCSS(js.Lib.document,com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_URL),"util.css"); else com.wiris.system.JsDOMUtils.trimDuplicatedCSS(js.Lib.document,com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL),"util.css");
					com.wiris.system.JsDOMUtils.trimDuplicatedCSS(js.Lib.document,com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.EDITOR_URL),"template.css");
					com.wiris.system.JsDOMUtils.trimDuplicatedCSS(js.Lib.document,com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.CALC_URL),"template-calc.css");
					calcMe.calcComponent.setParent(component);
					calcMe.calcComponent.defaultComponentListeners[0].setParent(component.defaultComponentListeners[0]);
				});
				this.calcMe.insertInto(element);
			}
		} else haxe.Timer.delay(function() {
			_g.loadCalcMe();
		},200);
	}
	,getParams: function() {
		return com.wiris.system.TypeTools.hashParamsToObjectParams(this.calcMeInput.getParameters());
	}
	,isOffline: function() {
		var offline = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.SERVICE_OFFLINE);
		return offline.toLowerCase() == "true";
	}
	,addCalcMeScript: function() {
		haxe.Timer.delay(function() {
			var url = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.CALC_URL) + "/wiriscalc";
			com.wiris.quizzes.JsDomUtils.addScript(js.Lib.document,js.Lib.window,url);
		},1);
	}
	,buildElement: function() {
		var element;
		element = this.createElement("div");
		this.setElement(element);
		if(!this.isCalcMeScriptLoaded() && !com.wiris.quizzes.ui.JsCalcMeInputComponent.isLoadingCalcMeScript()) this.addCalcMeScript();
		this.loadCalcMe();
		this.updateContent();
		this.calcMeInput.addChangeListener(this);
	}
	,getContextMenu: function() {
		if(this.contextMenu == null) this.contextMenu = new com.wiris.system.ui.JsContextMenuProvider(this.element.firstChild);
		return this.contextMenu;
	}
	,calcMeInput: null
	,calcMe: null
	,__class__: com.wiris.quizzes.ui.JsCalcMeInputComponent
});
com.wiris.system.ui.JsShadowComponent = $hxClasses["com.wiris.system.ui.JsShadowComponent"] = function(shadowComponent) {
	com.wiris.system.ui.JsComponent.call(this,shadowComponent);
	this.shadowComponent = shadowComponent;
	var self = this;
	
        var observer = new MutationObserver(function(mutationsList, observer) {
            for (let mutation of mutationsList) {
                if (mutation.addedNodes != null) {
                    for (let node of mutation.addedNodes) {
                    	if (node.tagName == 'LINK') {
                    		self.cloneStyleNode(node, self.getElement());
                    	}
                    }
                }
            }
        });

        observer.observe(document.head, { childList : true, subtree: true });;
};
com.wiris.system.ui.JsShadowComponent.__name__ = ["com","wiris","system","ui","JsShadowComponent"];
com.wiris.system.ui.JsShadowComponent.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsShadowComponent.__super__ = com.wiris.system.ui.JsComponent;
com.wiris.system.ui.JsShadowComponent.prototype = $extend(com.wiris.system.ui.JsComponent.prototype,{
	updateContent: function() {
		var element = this.getElement();
		if(element.shadowRoot != this.shadowElement.getElement().parentNode) {
			if(element.shadowRoot.lastChild != null) element.shadowRoot.removeChild(element.shadowRoot.lastChild);
			if(this.shadowElement.getElement().parentNode != null) this.shadowElement.getElement().parentNode.removeChild(this.shadowElement.getElement());
			this.shadowElement.setElement(null);
			element.shadowRoot.appendChild(this.shadowElement.getElement());
		}
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,cloneStyleNode: function(styleNode,element) {
		var type = styleNode.getAttribute("type");
		var found = false;
		if(type == "text/css") {
			var links = element.shadowRoot.querySelectorAll("link");
			var i = 0;
			while(i < links.length) {
				var link = links[i++];
				var type1 = link.getAttribute("type");
				if(type1 == "text/css") {
					var r = new EReg("(?:http://.*/)?((?:.*)\\.css)(?:\\?.*)?","");
					if(r.match(styleNode.getAttribute("href"))) {
						var href = link.getAttribute("href");
						var k = href.indexOf(r.matched(1));
						if(k >= 0) found = true;
					}
				}
			}
			if(!found) {
				var copy = styleNode.cloneNode(true);
				element.shadowRoot.appendChild(copy);
			}
		}
	}
	,buildShadowDom: function(element) {
		var links = js.Lib.document.getElementsByTagName("head")[0].getElementsByTagName("link");
		element.attachShadow({ mode : "open"});
		var i = 0;
		while(i < links.length) this.cloneStyleNode(links[i++],element);
		this.setElement(element);
		if(this.shadowElement == null) this.shadowElement = this.shadowComponent.getComponentBuilder().buildComponent(this.shadowComponent.getInnerComponent(),this); else this.shadowElement.setElement(null);
		element.shadowRoot.appendChild(this.shadowElement.getElement());
	}
	,buildElement: function() {
		var element = this.createElement("div");
		element.style.display = "inline-flex";
		this.buildShadowDom(element);
	}
	,shadowComponent: null
	,shadowElement: null
	,__class__: com.wiris.system.ui.JsShadowComponent
});
com.wiris.quizzes.ui.JsEmbeddedAuthoringField = $hxClasses["com.wiris.quizzes.ui.JsEmbeddedAuthoringField"] = function(embeddedAuthoringField) {
	com.wiris.system.ui.JsShadowComponent.call(this,embeddedAuthoringField);
	this.embeddedAuthoringField = embeddedAuthoringField;
	this.embeddedAuthoringField.addChangeListener(this);
};
com.wiris.quizzes.ui.JsEmbeddedAuthoringField.__name__ = ["com","wiris","quizzes","ui","JsEmbeddedAuthoringField"];
com.wiris.quizzes.ui.JsEmbeddedAuthoringField.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElement = null;
com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElementDescriptors = null;
com.wiris.quizzes.ui.JsEmbeddedAuthoringField.embeddedAnswersEditor = null;
com.wiris.quizzes.ui.JsEmbeddedAuthoringField.htmlChangeHandler = function(e) {
	haxe.Timer.delay(function() {
		com.wiris.quizzes.ui.JsEmbeddedAuthoringField.embeddedAnswersEditor.analyzeHTML();
	},1);
}
com.wiris.quizzes.ui.JsEmbeddedAuthoringField.keyupHandler = function(e) {
	if(e.keyCode == 8 || e.keyCode == 46) com.wiris.quizzes.ui.JsEmbeddedAuthoringField.embeddedAnswersEditor.analyzeHTML();
}
com.wiris.quizzes.ui.JsEmbeddedAuthoringField.clickHandler = function(e) {
	if(com.wiris.system.JsDOMUtils.hasClass(com.wiris.system.JsDOMUtils.getEventTarget(e),com.wiris.quizzes.impl.ui.EmbeddedAuthoringField.CLASS_QUIZZES_EMBEDDED_AUTHORING_FIELD)) com.wiris.quizzes.ui.JsEmbeddedAuthoringField.embeddedAnswersEditor.analyzeHTML();
}
com.wiris.quizzes.ui.JsEmbeddedAuthoringField.inputChangeHandler = function(e) {
	if(com.wiris.system.JsDOMUtils.hasClass(com.wiris.system.JsDOMUtils.getEventTarget(e),com.wiris.quizzes.impl.ui.EmbeddedAuthoringField.CLASS_QUIZZES_EMBEDDED_AUTHORING_FIELD)) com.wiris.quizzes.ui.JsEmbeddedAuthoringField.embeddedAnswersEditor.analyzeHTML();
}
com.wiris.quizzes.ui.JsEmbeddedAuthoringField.__super__ = com.wiris.system.ui.JsShadowComponent;
com.wiris.quizzes.ui.JsEmbeddedAuthoringField.prototype = $extend(com.wiris.system.ui.JsShadowComponent.prototype,{
	getElementAnswerIndex: function(element) {
		var attr = element.getAttribute("data-answer-index");
		return attr == null?-1:Std.parseInt(attr);
	}
	,getAnswerIndex: function() {
		return Std.parseInt((js.Boot.__cast(this.embeddedAuthoringField.getSlot() , com.wiris.quizzes.impl.SlotImpl)).id);
	}
	,updateContent: function() {
		var editableElement = this.embeddedAuthoringField.getEditableElement();
		if(com.wiris.quizzes.ui.JsEmbeddedAuthoringField.embeddedAnswersEditor != this.embeddedAuthoringField.getEmbeddedAnswersEditor()) com.wiris.quizzes.ui.JsEmbeddedAuthoringField.embeddedAnswersEditor = this.embeddedAuthoringField.getEmbeddedAnswersEditor();
		if(com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElement != editableElement) {
			if(com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElement != null) {
				var i = HxOverrides.iter(com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElementDescriptors);
				while(i.hasNext()) com.wiris.system.JsDOMUtils.removeEventListener(i.next());
			}
			if(editableElement.nodeType != 9) editableElement = editableElement.ownerDocument;
			com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElement = editableElement;
			com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElementDescriptors = new Array();
			com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElementDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElement,"paste",com.wiris.quizzes.ui.JsEmbeddedAuthoringField.htmlChangeHandler));
			com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElementDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElement,"cut",com.wiris.quizzes.ui.JsEmbeddedAuthoringField.htmlChangeHandler));
			com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElementDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElement,"drop",com.wiris.quizzes.ui.JsEmbeddedAuthoringField.htmlChangeHandler));
			com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElementDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElement,"keyup",com.wiris.quizzes.ui.JsEmbeddedAuthoringField.keyupHandler));
			com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElementDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElement,"click",com.wiris.quizzes.ui.JsEmbeddedAuthoringField.clickHandler));
			com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElementDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(com.wiris.quizzes.ui.JsEmbeddedAuthoringField.editableElement,"change",com.wiris.quizzes.ui.JsEmbeddedAuthoringField.inputChangeHandler));
		}
		if(!com.wiris.system.JsDOMUtils.isDescendant(editableElement,this.getElement())) {
			var answerIndex = this.getAnswerIndex();
			var embeddedAnswerFields = editableElement.querySelectorAll(".wrsUI_" + com.wiris.quizzes.impl.ui.EmbeddedAuthoringField.CLASS_QUIZZES_EMBEDDED_AUTHORING_FIELD);
			var i;
			var recalculate = false;
			var oldIndexes = new Array();
			var _g1 = 0, _g = embeddedAnswerFields.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				var input = embeddedAnswerFields[i1];
				var index = this.getElementAnswerIndex(input);
				oldIndexes.push(index);
				if(index != i1) {
					this.element.setAttribute("data-answer-index",i1 + "");
					recalculate = true;
				}
			}
			if(recalculate) {
				var question = this.embeddedAuthoringField.getQuestion().getImpl();
				question.moveAnswers(oldIndexes,oldIndexes);
			}
			if(answerIndex < embeddedAnswerFields.length) this.buildShadowDom(embeddedAnswerFields[answerIndex]);
		}
		com.wiris.system.ui.JsShadowComponent.prototype.updateContent.call(this);
	}
	,setElement: function(element) {
		com.wiris.system.ui.JsShadowComponent.prototype.setElement.call(this,element);
		element.setAttribute("data-answer-index",this.getAnswerIndex() + "");
		element.setAttribute("contenteditable","false");
	}
	,buildElement: function() {
		var element = this.createElement("span");
		element.style.display = "inline-flex";
		element.style.borderRadius = "4px 4px 0 0";
		if(element.className != "") element.className += " wirisembedded wirisauthoringfield"; else element.className = "wirisembedded wirisauthoringfield";
		element.innerText = "&#8203;";
		this.buildShadowDom(element);
	}
	,embeddedAuthoringField: null
	,__class__: com.wiris.quizzes.ui.JsEmbeddedAuthoringField
});
com.wiris.quizzes.ui.JsGraphInputComponent = $hxClasses["com.wiris.quizzes.ui.JsGraphInputComponent"] = function(graphInput,resourceLoader) {
	com.wiris.system.ui.JsComponent.call(this,graphInput);
	this.graphInput = graphInput;
	this.resourceLoader = resourceLoader;
};
com.wiris.quizzes.ui.JsGraphInputComponent.__name__ = ["com","wiris","quizzes","ui","JsGraphInputComponent"];
com.wiris.quizzes.ui.JsGraphInputComponent.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.quizzes.ui.JsGraphInputComponent.__super__ = com.wiris.system.ui.JsComponent;
com.wiris.quizzes.ui.JsGraphInputComponent.prototype = $extend(com.wiris.system.ui.JsComponent.prototype,{
	updateContent: function() {
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,isGraphScriptLoaded: function() {
		var window = js.Lib.window;
		return window.com != null && window.com.wiris != null && window.com.wiris.js != null && window.com.wiris.js.JsGraph != null;
	}
	,loadGraph: function() {
		var _g = this;
		var graph = null;
		var element = this.getElement();
		if(this.isGraphScriptLoaded()) {
			try {
				var params = { };
				var hash = this.graphInput.getParameters();
				if(hash != null) {
					var keys = hash.keys();
					while(keys.hasNext()) {
						var key = keys.next();
						params[key] = hash.get(key);
					}
				}
				if(com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.GRAPH_TRACK_INSTANCES) != "true") window.com.wiris.js.JsGraph.TRACK_INSTANCES = false;
				graph = window.com.wiris.js.JsGraph.newInstance(params);
				graph.insertInto(element);
				this.graphInput.setGraph(graph);
			} catch( e ) {
				js.Lib.alert(e);
			}
			graph.onIsReady(function() {
				element.style.opacity = "1";
				if(com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_STATIC) == "true") com.wiris.system.JsDOMUtils.trimDuplicatedCSS(js.Lib.document,com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_URL),"util.css"); else com.wiris.system.JsDOMUtils.trimDuplicatedCSS(js.Lib.document,com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL),"util.css");
			});
		} else haxe.Timer.delay(function() {
			_g.loadGraph();
		},200);
	}
	,addGraphScript: function() {
		haxe.Timer.delay(function() {
			var url = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.GRAPH_URL) + "/graph.js";
			com.wiris.quizzes.JsDomUtils.addScript(js.Lib.document,js.Lib.window,url);
		},1);
	}
	,buildElement: function() {
		if(this.component.getElement() != null) {
			this.setElement(this.component.getElement());
			return;
		}
		var element = this.createElement("div");
		element.className = "wrsUI_aux_graphComponentWrapper";
		this.setElement(element);
		if(!this.isGraphScriptLoaded()) this.addGraphScript();
		this.loadGraph();
		this.updateContent();
		this.graphInput.addChangeListener(this);
	}
	,getGraphCallback: null
	,reservedWords: null
	,startHandler: null
	,resourceLoader: null
	,graphInput: null
	,__class__: com.wiris.quizzes.ui.JsGraphInputComponent
});
com.wiris.quizzes.ui.JsMathLabel = $hxClasses["com.wiris.quizzes.ui.JsMathLabel"] = function(mathLabel) {
	com.wiris.system.ui.JsComponent.call(this,mathLabel);
	this.mathLabel = mathLabel;
	this.mathViewer = new com.wiris.quizzes.HxMathViewer();
	this.mathViewer.setCenterBaseline(false);
};
com.wiris.quizzes.ui.JsMathLabel.__name__ = ["com","wiris","quizzes","ui","JsMathLabel"];
com.wiris.quizzes.ui.JsMathLabel.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.quizzes.ui.JsMathLabel.__super__ = com.wiris.system.ui.JsComponent;
com.wiris.quizzes.ui.JsMathLabel.prototype = $extend(com.wiris.system.ui.JsComponent.prototype,{
	updateContent: function() {
		var _g = this;
		if(this.mathLabel.isMathML() || this.mathLabel.isGraphic()) {
			if(!com.wiris.quizzes.impl.MathContent.isEmpty(this.mathLabel.getText())) {
				if(this.getElement().offsetParent != null) {
					com.wiris.system.JsDOMUtils.removeChildren(this.element);
					var child;
					if(this.mathLabel.isMathML()) child = this.mathViewer.render(this.mathLabel.getText()); else child = this.mathViewer.thumbnail(this.mathLabel.getText());
					this.element.appendChild(child);
				} else haxe.Timer.delay(function() {
					_g.updateContent();
				},100);
			} else {
				com.wiris.system.JsDOMUtils.removeChildren(this.element);
				this.element.appendChild(js.Lib.document.createTextNode(""));
			}
		} else {
			com.wiris.system.JsDOMUtils.removeChildren(this.element);
			this.element.appendChild(js.Lib.document.createTextNode(this.mathLabel.getText()));
		}
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,buildElement: function() {
		var element = this.createElement("span");
		this.setElement(element);
		this.updateContent();
		this.mathLabel.addChangeListener(this);
	}
	,mathViewer: null
	,mathLabel: null
	,__class__: com.wiris.quizzes.ui.JsMathLabel
});
com.wiris.quizzes.ui.JsMathTextField = $hxClasses["com.wiris.quizzes.ui.JsMathTextField"] = function(mathTextField) {
	com.wiris.system.ui.JsComponent.call(this,mathTextField);
	this.mathTextField = mathTextField;
	this.mathViewer = new com.wiris.quizzes.HxMathViewer();
	this.mathViewer.setCenterBaseline(false);
};
com.wiris.quizzes.ui.JsMathTextField.__name__ = ["com","wiris","quizzes","ui","JsMathTextField"];
com.wiris.quizzes.ui.JsMathTextField.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.quizzes.ui.JsMathTextField.__super__ = com.wiris.system.ui.JsComponent;
com.wiris.quizzes.ui.JsMathTextField.prototype = $extend(com.wiris.system.ui.JsComponent.prototype,{
	onTextInputMouseDown: function(e) {
		if(!this.mathTextField.hasClass("textComponentOutlined")) {
			var element = this.getElement();
			var mousePosition = com.wiris.system.JsDOMUtils.getMousePosition(element,e);
			this.focusLine.style.left = mousePosition[0] + "px";
			this.focusLine.style.right = element.offsetWidth - mousePosition[0] + "px";
			this.onTextInputFocus(null);
		}
	}
	,onTextInputBlur: function(e) {
		if(!this.mathTextField.hasClass("textComponentOutlined")) {
			this.focusLine.style.left = "50%";
			this.focusLine.style.right = "50%";
		}
	}
	,onTextInputFocus: function(e) {
		var self = this;
		if(!this.mathTextField.hasClass("textComponentOutlined")) setTimeout(function() {
			self.focusLine.style.left = "0";
			self.focusLine.style.right = "0";
		},1);
	}
	,onTextInputInput: function(e) {
		var self = this;
		this.mathTextField.setValue(self.textInput.value);
	}
	,getInputElements: function() {
		var elements = new Array();
		elements.push(this.textInput);
		elements.push(this.imageDisplay);
		return elements;
	}
	,updateContent: function() {
		var self = this;
		com.wiris.system.JsDOMUtils.removeChildren(this.imageDisplay);
		if(self.textLabel.innerText != this.mathTextField.getLabel()) {
			com.wiris.system.JsDOMUtils.removeChildren(this.textLabel);
			this.textLabel.appendChild(js.Lib.document.createTextNode(this.mathTextField.getLabel()));
		}
		if(self.textInput.readOnly != this.mathTextField.isReadOnly()) self.textInput.readOnly = this.mathTextField.isReadOnly();
		if(this.mathTextField.isMathML() || this.mathTextField.isGraphic()) {
			var rendered;
			if(this.mathTextField.isMathML()) rendered = this.mathViewer.render(this.mathTextField.getValue()); else rendered = this.mathViewer.thumbnail(this.mathTextField.getValue());
			this.imageDisplay.appendChild(rendered);
			self.imageDisplay.style.display = "inline-flex";
			self.textInput.style.display = "none";
		} else {
			if(self.textInput.value != this.mathTextField.getValue()) self.textInput.value = this.mathTextField.getValue();
			if(self.textInput.placeholder != this.mathTextField.getPlaceholder()) self.textInput.placeholder = this.mathTextField.getPlaceholder();
			var sizeOrMinusOne = self.textInput.hasAttribute("size")?self.textInput.size:com.wiris.util.ui.component.TextField.NO_SIZE;
			if(sizeOrMinusOne != this.mathTextField.getSize()) {
				if(this.mathTextField.getSize() == com.wiris.util.ui.component.TextField.NO_SIZE) self.textInput.removeAttribute("size"); else self.textInput.size = "" + this.mathTextField.getSize();
			}
			self.imageDisplay.style.display = "none";
			self.textInput.style.display = "inline-block";
		}
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,buildElement: function() {
		var self = this;
		var element = this.createElement("div");
		this.setElement(element);
		this.textLabel = this.createElement("label");
		this.focusLine = this.createElement("hr");
		this.textInput = this.createElement("input");
		self.textInput.type = "text";
		com.wiris.system.JsDOMUtils.addEventListener(this.textInput,"input",$bind(this,this.onTextInputInput));
		com.wiris.system.JsDOMUtils.addEventListener(this.textInput,"focus",$bind(this,this.onTextInputFocus));
		com.wiris.system.JsDOMUtils.addEventListener(this.textInput,"blur",$bind(this,this.onTextInputBlur));
		com.wiris.system.JsDOMUtils.addEventListener(this.textInput,"mousedown",$bind(this,this.onTextInputMouseDown));
		this.imageDisplay = this.createElement("div");
		self.imageDisplay.tabIndex = 0;
		com.wiris.system.JsDOMUtils.addEventListener(this.imageDisplay,"focus",$bind(this,this.onTextInputFocus));
		com.wiris.system.JsDOMUtils.addEventListener(this.imageDisplay,"blur",$bind(this,this.onTextInputBlur));
		com.wiris.system.JsDOMUtils.addEventListener(this.imageDisplay,"mousedown",$bind(this,this.onTextInputMouseDown));
		this.element.appendChild(this.textLabel);
		this.element.appendChild(this.textInput);
		this.element.appendChild(this.imageDisplay);
		this.element.appendChild(this.focusLine);
		this.updateContent();
		this.mathTextField.addChangeListener(this);
	}
	,focusLine: null
	,textLabel: null
	,imageDisplay: null
	,textInput: null
	,mathViewer: null
	,mathTextField: null
	,__class__: com.wiris.quizzes.ui.JsMathTextField
});
com.wiris.quizzes.ui.JsMathTypeInputComponent = $hxClasses["com.wiris.quizzes.ui.JsMathTypeInputComponent"] = function(mathTypeInput,resourceLoader) {
	com.wiris.system.ui.JsComponent.call(this,mathTypeInput);
	this.mathTypeInput = mathTypeInput;
	this.resourceLoader = resourceLoader;
};
com.wiris.quizzes.ui.JsMathTypeInputComponent.__name__ = ["com","wiris","quizzes","ui","JsMathTypeInputComponent"];
com.wiris.quizzes.ui.JsMathTypeInputComponent.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.quizzes.ui.JsMathTypeInputComponent.isLoadingEditorScript = function() {
	return com.wiris.quizzes.ui.JsMathTypeInputComponent.loadingEditor;
}
com.wiris.quizzes.ui.JsMathTypeInputComponent.__super__ = com.wiris.system.ui.JsComponent;
com.wiris.quizzes.ui.JsMathTypeInputComponent.prototype = $extend(com.wiris.system.ui.JsComponent.prototype,{
	updateContent: function() {
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,isEditorScriptLoaded: function() {
		var window = js.Lib.window;
		return window.com != null && window.com.wiris != null && window.com.wiris.jsEditor != null && window.com.wiris.jsEditor.JsEditor != null;
	}
	,loadEditor: function() {
		var _g = this;
		var editor = null;
		var element = this.getElement();
		if(this.isEditorScriptLoaded()) {
			try {
				editor = window.com.wiris.jsEditor.JsEditor.newInstance(com.wiris.system.TypeTools.hashParamsToObjectParams(this.mathTypeInput.getParameters()));
				this.mathTypeInput.setEditor(editor);
			} catch( e ) {
				js.Lib.alert(e);
			}
			var value = this.mathTypeInput.getValue();
			var mathTypeInput = this.mathTypeInput;
			editor.onIsReady(function() {
				element.removeChild(element.firstChild);
				element.lastChild.style.opacity = "1";
				if(com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_STATIC) == "true") com.wiris.system.JsDOMUtils.trimDuplicatedCSS(js.Lib.document,com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_URL),"util.css"); else com.wiris.system.JsDOMUtils.trimDuplicatedCSS(js.Lib.document,com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL),"util.css");
				com.wiris.system.JsDOMUtils.trimDuplicatedCSS(js.Lib.document,com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.EDITOR_URL),"template.css");
				com.wiris.system.JsDOMUtils.trimDuplicatedCSS(js.Lib.document,com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.HAND_URL),"hand.css");
			});
			editor.insertInto(element.lastChild);
		} else haxe.Timer.delay(function() {
			_g.loadEditor();
		},200);
	}
	,isOffline: function() {
		var offline = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.SERVICE_OFFLINE);
		return offline.toLowerCase() == "true";
	}
	,addEditorScript: function() {
		com.wiris.quizzes.ui.JsMathTypeInputComponent.loadingEditor = true;
		haxe.Timer.delay(function() {
			var url = com.wiris.quizzes.api.Quizzes.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.EDITOR_URL) + "/editor";
			com.wiris.quizzes.JsDomUtils.addScript(js.Lib.document,js.Lib.window,url);
		},1);
	}
	,buildElement: function() {
		var element = this.createElement("div");
		element.style.position = "relative";
		var placeholder = this.createElement("div");
		placeholder.className = "wrsUI_aux_mathTypeComponentPlaceholder";
		var circle = this.createElement("div");
		circle.className = "wrsUI_aux_mathTypeComponentePlaceholderCircle";
		var i = 1;
		while(i <= 12) {
			var dot = this.createElement("div");
			dot.className = "wrsUI_aux_mathTypeComponentePlaceholderCircleDot wrsUI_aux_mathTypeComponentePlaceholderCircleDot" + i++;
			circle.appendChild(dot);
		}
		placeholder.appendChild(circle);
		var hasImagePlaceholder = this.mathTypeInput.getPlaceholder() != null;
		if(hasImagePlaceholder) {
			var image = com.wiris.system.ui.JsIcon.createIconElement(this.mathTypeInput.getPlaceholder(),this.resourceLoader);
			image.className = "wrsUI_aux_mathTypeComponentePlaceholderImage";
			placeholder.appendChild(image);
		}
		element.appendChild(placeholder);
		var editor = this.createElement("div");
		editor.className = "wrsUI_aux_mathTypeComponentWrapper";
		editor.style.opacity = "0";
		element.appendChild(editor);
		this.setElement(element);
		if(!this.isEditorScriptLoaded() && !com.wiris.quizzes.ui.JsMathTypeInputComponent.isLoadingEditorScript()) this.addEditorScript();
		this.loadEditor();
		this.updateContent();
		this.mathTypeInput.addChangeListener(this);
	}
	,getEditorCallback: null
	,reservedWords: null
	,startHandler: null
	,resourceLoader: null
	,mathTypeInput: null
	,__class__: com.wiris.quizzes.ui.JsMathTypeInputComponent
});
com.wiris.quizzes.ui.JsPopupTextField = $hxClasses["com.wiris.quizzes.ui.JsPopupTextField"] = function(textField) {
	com.wiris.quizzes.ui.JsMathTextField.call(this,textField);
	this.textField = textField;
	this.window = null;
};
com.wiris.quizzes.ui.JsPopupTextField.__name__ = ["com","wiris","quizzes","ui","JsPopupTextField"];
com.wiris.quizzes.ui.JsPopupTextField.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.ui.JsPopupTextField.__super__ = com.wiris.quizzes.ui.JsMathTextField;
com.wiris.quizzes.ui.JsPopupTextField.prototype = $extend(com.wiris.quizzes.ui.JsMathTextField.prototype,{
	actionPerformed: function(e) {
		if(e.getAction() == this.textField.getOpenPopupAction()) {
			this.window.style.display = "";
			this.updateContent();
		}
	}
	,updateContent: function() {
		com.wiris.quizzes.ui.JsMathTextField.prototype.updateContent.call(this);
		if(this.window != null && this.window.parentNode == null) {
			this.window.style.display = "none";
			this.getWindowContainer().appendChild(this.window);
			this.getWindowContainer().appendChild(this.dummy);
		}
	}
	,getWindowContainer: function() {
		return this.getElement();
	}
	,buildElement: function() {
		if(this.textField.getModalWindow().getElement() == null || this.textField.getWindowComponent().getElement() == null) this.window = this.textField.getComponentBuilder().buildComponent(this.textField.getWindowComponent(),this).getElement(); else this.window = this.textField.getWindowComponent().getElement();
		this.dummy = this.createElement("div");
		this.dummy.setAttribute("tabindex","0");
		com.wiris.quizzes.ui.JsMathTextField.prototype.buildElement.call(this);
		var element = this.getElement();
		var button = this.textField.getComponentBuilder().buildComponent(this.textField.getButton(),this).getElement();
		element.appendChild(button);
		this.textField.addActionListener(this);
	}
	,textField: null
	,window: null
	,dummy: null
	,__class__: com.wiris.quizzes.ui.JsPopupTextField
});
com.wiris.quizzes.ui.JsQuizzesStudioPopupTextField = $hxClasses["com.wiris.quizzes.ui.JsQuizzesStudioPopupTextField"] = function(quizzesStudioPopupTextField) {
	com.wiris.quizzes.ui.JsPopupTextField.call(this,quizzesStudioPopupTextField);
	this.quizzesStudioPopupTextField = quizzesStudioPopupTextField;
};
com.wiris.quizzes.ui.JsQuizzesStudioPopupTextField.__name__ = ["com","wiris","quizzes","ui","JsQuizzesStudioPopupTextField"];
com.wiris.quizzes.ui.JsQuizzesStudioPopupTextField.__super__ = com.wiris.quizzes.ui.JsPopupTextField;
com.wiris.quizzes.ui.JsQuizzesStudioPopupTextField.prototype = $extend(com.wiris.quizzes.ui.JsPopupTextField.prototype,{
	getWindowContainer: function() {
		return js.Lib.document.body;
	}
	,updateContent: function() {
		com.wiris.quizzes.ui.JsPopupTextField.prototype.updateContent.call(this);
		if(!this.quizzesStudioPopupTextField.getContext().isOptOpenAnswer()) {
			this.textLabel.style.display = "none";
			this.textInput.style.display = "none";
			this.imageDisplay.style.display = "none";
			this.focusLine.style.display = "none";
			this.element.style.minWidth = "50px";
			this.element.style.borderRadius = "4px";
			this.element.style.borderBottom = "none";
			this.element.lastChild.style.padding = "0";
			this.element.lastChild.style.minWidth = "34px";
		}
	}
	,buildElement: function() {
		com.wiris.quizzes.ui.JsPopupTextField.prototype.buildElement.call(this);
		var element = this.getElement();
		var self = this;
		setTimeout(function() {
			self.updateContent();
		},200);
	}
	,summary: null
	,quizzesStudioPopupTextField: null
	,__class__: com.wiris.quizzes.ui.JsQuizzesStudioPopupTextField
});
com.wiris.quizzes.ui.JsWirisCasInputComponent = $hxClasses["com.wiris.quizzes.ui.JsWirisCasInputComponent"] = function(wirisCasInput) {
	com.wiris.system.ui.JsComponent.call(this,wirisCasInput);
	this.wirisCasInput = wirisCasInput;
};
com.wiris.quizzes.ui.JsWirisCasInputComponent.__name__ = ["com","wiris","quizzes","ui","JsWirisCasInputComponent"];
com.wiris.quizzes.ui.JsWirisCasInputComponent.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.quizzes.ui.JsWirisCasInputComponent.__super__ = com.wiris.system.ui.JsComponent;
com.wiris.quizzes.ui.JsWirisCasInputComponent.prototype = $extend(com.wiris.system.ui.JsComponent.prototype,{
	actionPerformed: function(e) {
		var action = e.getAction();
		var actionId = action.getId();
		if(actionId == com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.ACTION_LAUNCH_WIRIS_CAS) {
			var element = this.getIdElement();
			this.iframe.id = element.id + "_hiddenIframe";
			this.iframe.name = element.id + "_hiddenIframe";
			this.form.childNodes[0].value = this.wirisCasInput.getLanguage();
			this.form.childNodes[1].value = this.wirisCasInput.getSessionId();
			this.form.target = this.iframe.name;
			this.form.submit();
		}
	}
	,buildElement: function() {
		var element = this.createElement("div");
		element.style.position = "relative";
		this.iframe = this.createElement("iframe");
		this.iframe.className = "wrsUI_aux_wirisCasComponentIframe";
		this.iframe.style.display = "none";
		this.form = this.createElement("form");
		this.form.className = "wrsUI_aux_wirisCasComponentForm";
		this.form.action = com.wiris.quizzes.api.QuizzesBuilder.getInstance().getConfiguration().get(com.wiris.quizzes.api.ConfigurationKeys.WIRISLAUNCHER_URL) + "/wiriscas.jnlp";
		this.form.method = "POST";
		var lang = this.createElement("input");
		lang.type = "hidden";
		lang.name = "lang";
		var sessionId = this.createElement("input");
		sessionId.type = "hidden";
		sessionId.name = "session_id";
		this.button = this.wirisCasInput.getComponentBuilder().buildComponent(this.wirisCasInput.getButton(),this).getElement();
		this.notes = this.wirisCasInput.getComponentBuilder().buildComponent(this.wirisCasInput.getNotes(),this).getElement();
		this.image = this.wirisCasInput.getComponentBuilder().buildComponent(this.wirisCasInput.getImage(),this).getElement();
		this.form.appendChild(lang);
		this.form.appendChild(sessionId);
		this.form.appendChild(this.button);
		this.form.appendChild(this.notes);
		element.appendChild(this.iframe);
		element.appendChild(this.form);
		element.appendChild(this.image);
		this.setElement(element);
		this.wirisCasInput.addActionListener(this);
	}
	,button: null
	,notes: null
	,image: null
	,iframe: null
	,form: null
	,wirisCasInput: null
	,__class__: com.wiris.quizzes.ui.JsWirisCasInputComponent
});
if(!com.wiris.settings) com.wiris.settings = {}
com.wiris.settings.PlatformSettings = $hxClasses["com.wiris.settings.PlatformSettings"] = function() { }
com.wiris.settings.PlatformSettings.__name__ = ["com","wiris","settings","PlatformSettings"];
if(!com.wiris.std) com.wiris.std = {}
if(!com.wiris.std.system) com.wiris.std.system = {}
com.wiris.std.system.HttpProxy = $hxClasses["com.wiris.std.system.HttpProxy"] = function(host,port) {
	this.port = port;
	this.host = host;
	this.auth = null;
};
com.wiris.std.system.HttpProxy.__name__ = ["com","wiris","std","system","HttpProxy"];
com.wiris.std.system.HttpProxy.newHttpProxy = function(host,port,user,pass) {
	var proxy = new com.wiris.std.system.HttpProxy(host,port);
	var hpa = new com.wiris.std.system.HttpProxyAuth();
	hpa.user = user;
	hpa.pass = pass;
	proxy.auth = hpa;
	return proxy;
}
com.wiris.std.system.HttpProxy.prototype = {
	auth: null
	,host: null
	,port: null
	,__class__: com.wiris.std.system.HttpProxy
}
com.wiris.std.system.HttpProxyAuth = $hxClasses["com.wiris.std.system.HttpProxyAuth"] = function() {
};
com.wiris.std.system.HttpProxyAuth.__name__ = ["com","wiris","std","system","HttpProxyAuth"];
com.wiris.std.system.HttpProxyAuth.prototype = {
	pass: null
	,user: null
	,__class__: com.wiris.std.system.HttpProxyAuth
}
com.wiris.system.ArrayEx = $hxClasses["com.wiris.system.ArrayEx"] = function() { }
com.wiris.system.ArrayEx.__name__ = ["com","wiris","system","ArrayEx"];
com.wiris.system.ArrayEx.contains = function(a,b) {
	var _g = 0;
	while(_g < a.length) {
		var x = a[_g];
		++_g;
		if(x == b) return true;
	}
	return false;
}
com.wiris.system.ArrayEx.indexOf = function(a,b) {
	var idx = 0;
	while(idx < a.length) {
		if(a[idx] == b) return idx;
		++idx;
	}
	return -1;
}
com.wiris.system.DateUtils = $hxClasses["com.wiris.system.DateUtils"] = function() { }
com.wiris.system.DateUtils.__name__ = ["com","wiris","system","DateUtils"];
com.wiris.system.DateUtils.getUTCTime = function() {
	return new Date().getTime() + new Date().getTimezoneOffset() * 60000;
}
com.wiris.system.DateUtils.getUTCDate = function() {
	var time = new Date().getTime() + new Date().getTimezoneOffset() * 60000;
	var mili = time % 1000;
	var dateTime = (function($this) {
		var $r;
		var d = new Date();
		d.setTime(time);
		$r = d;
		return $r;
	}(this));
	var date = HxOverrides.dateStr(dateTime);
	var formattedDate = StringTools.replace(date," ","T");
	formattedDate += "." + mili + "Z";
	return formattedDate;
}
com.wiris.system.Downloader = $hxClasses["com.wiris.system.Downloader"] = function() {
};
com.wiris.system.Downloader.__name__ = ["com","wiris","system","Downloader"];
com.wiris.system.Downloader.saveFile = function(element,proxyUrl,fileName,content,parameters) {
	try {
		com.wiris.system.JsDOMUtils.saveTextFile(element,fileName,"application/xml",content);
	} catch( e ) {
		if(proxyUrl != null) com.wiris.system.Downloader.saveFilePost(element,proxyUrl,fileName,content,parameters); else throw e;
	}
}
com.wiris.system.Downloader.saveFilePost = function(element,proxyUrl,fileName,content,parameters) {
	var d = element.ownerDocument;
	var iframe = d.createElement("iframe");
	var submitted = false;
	com.wiris.system.JsDOMUtils.addEventListener(iframe,"load",function(e) {
		if(!submitted) {
			submitted = true;
			var iframedoc = iframe.contentWindow.document;
			parameters.set("data",content);
			parameters.set("filename",fileName);
			var form = com.wiris.system.Downloader.createForm(iframedoc,proxyUrl,parameters);
			iframedoc.body.appendChild(form);
			form.submit();
		} else element.removeChild(iframe);
	});
	element.appendChild(iframe);
}
com.wiris.system.Downloader.createForm = function(d,action,items) {
	var form = d.createElement("form");
	form.setAttribute("action",action);
	form.setAttribute("method","POST");
	var $it0 = items.keys();
	while( $it0.hasNext() ) {
		var name = $it0.next();
		var input = d.createElement("input");
		input.setAttribute("type","hidden");
		input.setAttribute("name",name);
		input.setAttribute("value",items.get(name));
		form.appendChild(input);
	}
	return form;
}
com.wiris.system.Downloader.prototype = {
	__class__: com.wiris.system.Downloader
}
com.wiris.system.Exception = $hxClasses["com.wiris.system.Exception"] = function(message,cause) {
	this.message = message;
};
com.wiris.system.Exception.__name__ = ["com","wiris","system","Exception"];
com.wiris.system.Exception.prototype = {
	getMessage: function() {
		return this.message;
	}
	,message: null
	,__class__: com.wiris.system.Exception
}
com.wiris.system.FileLock = $hxClasses["com.wiris.system.FileLock"] = function(filename) {
	this.filename = filename;
};
com.wiris.system.FileLock.__name__ = ["com","wiris","system","FileLock"];
com.wiris.system.FileLock.getLock = function(file,wait,remaining) {
	var startwait = haxe.Timer.stamp();
	try {
	} catch( e ) {
		if(remaining < 0) throw e;
		var actualwait = js.Boot.__cast((haxe.Timer.stamp() - startwait) * 1000 , Int);
		return com.wiris.system.FileLock.getLock(file,wait,remaining - actualwait);
	}
	return null;
}
com.wiris.system.FileLock.prototype = {
	release: function() {
	}
	,filename: null
	,__class__: com.wiris.system.FileLock
}
com.wiris.system.JSONUtils = $hxClasses["com.wiris.system.JSONUtils"] = function() { }
com.wiris.system.JSONUtils.__name__ = ["com","wiris","system","JSONUtils"];
com.wiris.system.JSONUtils.isArray = function(objectInstance) {
	return objectInstance instanceof Array;
}
com.wiris.system.JSONUtils.isString = function(objectInstance) {
	return typeof(objectInstance) == "string";
}
com.wiris.system.JSONUtils.jsonToObject = function(json) {
	return JSON.parse(json);
}
com.wiris.system.JSONUtils.serialize = function(objectInstance) {
	if(Reflect.isObject(objectInstance) && !com.wiris.system.JSONUtils.isString(objectInstance)) {
		if(com.wiris.system.JSONUtils.isArray(objectInstance)) return com.wiris.system.JSONUtils.serializeToArray(objectInstance);
		return com.wiris.system.JSONUtils.serializeToHash(objectInstance);
	}
	return objectInstance;
}
com.wiris.system.JSONUtils.serializeToArray = function(objectInstance) {
	var array = js.Boot.__cast(objectInstance , Array);
	var i = 0;
	while(i < array.length) {
		array[i] = com.wiris.system.JSONUtils.serialize(array[i]);
		++i;
	}
	return array;
}
com.wiris.system.JSONUtils.serializeToHash = function(objectInstance) {
	var hash = new Hash();
	var i = HxOverrides.iter(Reflect.fields(objectInstance));
	while(i.hasNext()) {
		var key = i.next();
		var value = Reflect.field(objectInstance,key);
		value = com.wiris.system.JSONUtils.serialize(value);
		hash.set(key,value);
	}
	return hash;
}
com.wiris.system.JsBrowserData = $hxClasses["com.wiris.system.JsBrowserData"] = function() {
};
com.wiris.system.JsBrowserData.__name__ = ["com","wiris","system","JsBrowserData"];
com.wiris.system.JsBrowserData.prototype = {
	identity: null
	,versionSearch: null
	,subString: null
	,prop: null
	,string: null
	,__class__: com.wiris.system.JsBrowserData
}
com.wiris.system.JsOSData = $hxClasses["com.wiris.system.JsOSData"] = function() {
};
com.wiris.system.JsOSData.__name__ = ["com","wiris","system","JsOSData"];
com.wiris.system.JsOSData.prototype = {
	identity: null
	,subString: null
	,string: null
	,__class__: com.wiris.system.JsOSData
}
com.wiris.system.JsBrowser = $hxClasses["com.wiris.system.JsBrowser"] = function() {
	this.dataBrowser = new Array();
	this.addBrowser(com.wiris.system.JsBrowser.SOURCE_USER_AGENT,null,"Edge",null,"Edge");
	this.addBrowser(com.wiris.system.JsBrowser.SOURCE_USER_AGENT,null,"Chrome",null,"Chrome");
	this.addBrowser(com.wiris.system.JsBrowser.SOURCE_USER_AGENT,null,"OmniWeb",null,"OmniWeb");
	this.addBrowser(com.wiris.system.JsBrowser.SOURCE_VENDOR,null,"Apple","Version","Safari");
	this.addBrowser(null,com.wiris.system.JsBrowser.SOURCE_WINDOW_OPERA,null,"Version","Opera");
	this.addBrowser(com.wiris.system.JsBrowser.SOURCE_VENDOR,null,"iCab",null,"iCab");
	this.addBrowser(com.wiris.system.JsBrowser.SOURCE_VENDOR,null,"KDE",null,"Konkeror");
	this.addBrowser(com.wiris.system.JsBrowser.SOURCE_USER_AGENT,null,"Firefox",null,"Firefox");
	this.addBrowser(com.wiris.system.JsBrowser.SOURCE_VENDOR,null,"Camino",null,"Camino");
	this.addBrowser(com.wiris.system.JsBrowser.SOURCE_USER_AGENT,null,"Netscape",null,"Netscape");
	this.addBrowser(com.wiris.system.JsBrowser.SOURCE_USER_AGENT,null,"MSIE","MSIE","Explorer");
	this.addBrowser(com.wiris.system.JsBrowser.SOURCE_USER_AGENT,null,"Trident","rv","Explorer");
	this.addBrowser(com.wiris.system.JsBrowser.SOURCE_USER_AGENT,null,"Gecko","rv","Mozilla");
	this.addBrowser(com.wiris.system.JsBrowser.SOURCE_USER_AGENT,null,"Mozilla","Mozilla","Netscape");
	this.dataOS = new Array();
	this.addOS(com.wiris.system.JsBrowser.SOURCE_PLATFORM,"Win","Windows");
	this.addOS(com.wiris.system.JsBrowser.SOURCE_PLATFORM,"Mac","Mac");
	this.addOS(com.wiris.system.JsBrowser.SOURCE_USER_AGENT,"iPhone","iOS");
	this.addOS(com.wiris.system.JsBrowser.SOURCE_USER_AGENT,"iPad","iOS");
	this.addOS(com.wiris.system.JsBrowser.SOURCE_USER_AGENT,"Android","Android");
	this.addOS(com.wiris.system.JsBrowser.SOURCE_PLATFORM,"Linux","Linux");
	if(window.matchMedia != null) this.hasCoarsePointer = window.matchMedia("(any-pointer: coarse)").matches; else this.hasCoarsePointer = false;
	this.setBrowser();
	this.setOS();
	this.touchable = this.isIOS() || this.isAndroid();
};
com.wiris.system.JsBrowser.__name__ = ["com","wiris","system","JsBrowser"];
com.wiris.system.JsBrowser.getBrowserInfo = function(source) {
	if(source == com.wiris.system.JsBrowser.SOURCE_USER_AGENT) return navigator.userAgent; else if(source == com.wiris.system.JsBrowser.SOURCE_VENDOR) return navigator.vendor; else if(source == com.wiris.system.JsBrowser.SOURCE_WINDOW_OPERA) return window.opera; else if(source == com.wiris.system.JsBrowser.SOURCE_PLATFORM) return navigator.platform; else if(source == com.wiris.system.JsBrowser.SOURCE_APP_VERSION) return navigator.appVersion; else return null;
}
com.wiris.system.JsBrowser.prototype = {
	isTouchable: function() {
		return this.touchable;
	}
	,isAndroid: function() {
		return this.os == "Android";
	}
	,isMac: function() {
		return this.os == "Mac";
	}
	,isIOS: function() {
		return this.os == "iOS" || this.os == "Mac" && this.hasCoarsePointer;
	}
	,isFF: function() {
		return this.browser == "Firefox";
	}
	,isSafari: function() {
		return this.browser == "Safari";
	}
	,isChrome: function() {
		return this.browser == "Chrome";
	}
	,isEdge: function() {
		return this.browser == "Edge";
	}
	,isIE: function() {
		return this.browser == "Explorer";
	}
	,getVersion: function() {
		return this.ver;
	}
	,getOS: function() {
		return this.os;
	}
	,getBrowser: function() {
		return this.browser;
	}
	,searchVersion: function(prop,search) {
		var str = js.Boot.__cast(com.wiris.system.JsBrowser.getBrowserInfo(prop) , String);
		var index = str.indexOf(search);
		if(index == -1) return null;
		return "" + Std.parseFloat(HxOverrides.substr(str,index + search.length + 1,null));
	}
	,setOS: function() {
		var i = HxOverrides.iter(this.dataOS);
		while(i.hasNext()) {
			var s = i.next();
			var str = js.Boot.__cast(com.wiris.system.JsBrowser.getBrowserInfo(s.string) , String);
			if(str.indexOf(s.subString) != -1) {
				this.os = s.identity;
				return;
			}
		}
	}
	,setBrowser: function() {
		var i = HxOverrides.iter(this.dataBrowser);
		while(i.hasNext()) {
			var b = i.next();
			if(b.string != null) {
				var obj = com.wiris.system.JsBrowser.getBrowserInfo(b.string);
				if(obj != null) {
					var str = js.Boot.__cast(obj , String);
					if(str.indexOf(b.subString) != -1) {
						this.browser = b.identity;
						this.ver = this.searchVersion(com.wiris.system.JsBrowser.SOURCE_USER_AGENT,b.versionSearch);
						if(this.ver == null) this.ver = this.searchVersion(com.wiris.system.JsBrowser.SOURCE_APP_VERSION,b.versionSearch);
						return;
					}
				}
			}
		}
	}
	,addOS: function(string,subString,identity) {
		var s = new com.wiris.system.JsOSData();
		s.string = string;
		s.subString = subString;
		s.identity = identity;
		this.dataOS.push(s);
	}
	,addBrowser: function(string,prop,subString,versionSearch,identity) {
		var b = new com.wiris.system.JsBrowserData();
		b.string = string;
		b.prop = prop;
		b.subString = subString;
		b.versionSearch = versionSearch != null?versionSearch:identity;
		b.identity = identity;
		this.dataBrowser.push(b);
	}
	,hasCoarsePointer: null
	,touchable: null
	,os: null
	,ver: null
	,browser: null
	,dataOS: null
	,dataBrowser: null
	,__class__: com.wiris.system.JsBrowser
}
com.wiris.system.JsDOMUtils = $hxClasses["com.wiris.system.JsDOMUtils"] = function() { }
com.wiris.system.JsDOMUtils.__name__ = ["com","wiris","system","JsDOMUtils"];
com.wiris.system.JsDOMUtils.ieTouchEvents = null;
com.wiris.system.JsDOMUtils.init = function() {
	if(com.wiris.system.JsDOMUtils.initialized) return;
	com.wiris.system.JsDOMUtils.ieTouchEvents = new Hash();
	com.wiris.system.JsDOMUtils.ieTouchEvents.set("touchstart","MSPointerDown");
	com.wiris.system.JsDOMUtils.ieTouchEvents.set("touchmove","MSPointerMove");
	com.wiris.system.JsDOMUtils.ieTouchEvents.set("touchend","MSPointerUp");
	com.wiris.system.JsDOMUtils.initialized = true;
	com.wiris.system.JsDOMUtils.addEventListener(js.Lib.document,"MSPointerDown",function(e) {
		com.wiris.system.JsDOMUtils.internetExplorerPointers.set("" + e.pointerId,e);
	});
	com.wiris.system.JsDOMUtils.addEventListener(js.Lib.document,"MSPointerUp",function(e) {
		com.wiris.system.JsDOMUtils.internetExplorerPointers = new Hash();
	});
	com.wiris.system.JsDOMUtils.addEventListener(js.Lib.document,"scroll",function(e) {
		com.wiris.system.JsDOMUtils.internetExplorerPointers = new Hash();
	});
	var touched = false;
	var triggerEvents = function(listeners) {
		var i = HxOverrides.iter(listeners);
		while(i.hasNext()) {
			var callbackFunction = i.next();
			callbackFunction();
		}
	};
	com.wiris.system.JsDOMUtils.addEventListener(js.Lib.document,"touchstart",function(e) {
		if(!com.wiris.system.JsDOMUtils.browser.touchable) {
			com.wiris.system.JsDOMUtils.browser.touchable = true;
			triggerEvents(com.wiris.system.JsDOMUtils.touchDeviceListeners);
		}
		touched = true;
	});
	var onTouchEnd = function(e) {
		if(!com.wiris.system.JsDOMUtils.browser.touchable) {
			com.wiris.system.JsDOMUtils.browser.touchable = true;
			triggerEvents(com.wiris.system.JsDOMUtils.touchDeviceListeners);
		}
		touched = true;
		setTimeout(function() {
			touched = false;
		},500);
	};
	com.wiris.system.JsDOMUtils.addEventListener(js.Lib.document,"touchend",onTouchEnd);
	com.wiris.system.JsDOMUtils.addEventListener(js.Lib.document,"touchleave",onTouchEnd);
	com.wiris.system.JsDOMUtils.addEventListener(js.Lib.document,"touchcancel",onTouchEnd);
	com.wiris.system.JsDOMUtils.addEventListener(js.Lib.document,"mousemove",function(e) {
		if(!touched) {
			if(com.wiris.system.JsDOMUtils.browser.touchable) {
				com.wiris.system.JsDOMUtils.browser.touchable = false;
				triggerEvents(com.wiris.system.JsDOMUtils.mouseDeviceListeners);
			}
		}
	});
}
com.wiris.system.JsDOMUtils.addEventListener = function(element,eventName,handler) {
	return com.wiris.system.JsDOMUtils.addEventListenerImpl(element,eventName,handler,false);
}
com.wiris.system.JsDOMUtils.addEventListenerImpl = function(element,eventName,handler,useCapture) {
	if(navigator.msPointerEnabled && com.wiris.system.JsDOMUtils.ieTouchEvents.exists(eventName)) {
		eventName = com.wiris.system.JsDOMUtils.ieTouchEvents.get(eventName);
		return com.wiris.system.JsDOMUtils.addEventListenerImpl(element,eventName,function(e) {
			if(e.pointerType == "touch") {
				if(eventName == "MSPointerUp") com.wiris.system.JsDOMUtils.internetExplorerPointers.remove("" + e.pointerId); else com.wiris.system.JsDOMUtils.internetExplorerPointers.set("" + e.pointerId,e);
				e.touches = new Array();
				var i = com.wiris.system.JsDOMUtils.internetExplorerPointers.iterator();
				while(i.hasNext()) e.touches.push(i.next());
				handler(e);
			}
		},useCapture);
	}
	if(eventName == "touchhold" && com.wiris.system.JsDOMUtils.browser.isTouchable()) {
		var timeout = null;
		var startX = -1;
		var startY = -1;
		var descriptor = com.wiris.system.JsDOMUtils.addEventListenerImpl(element,"touchstart",function(e) {
			touching = true;
			startX = e.touches[0].clientX;
			startY = e.touches[0].clientY;
			timeout = setTimeout(function() {
				timeout = null;
				handler(e);
			},500);
		},useCapture);
		descriptor.subDescriptors.push(com.wiris.system.JsDOMUtils.addEventListenerImpl(element,"touchmove",function(e) {
			if(timeout != null) {
				if(Math.abs(e.touches[0].clientX - startX) > com.wiris.system.JsDOMUtils.TOUCHHOLD_MOVE_MARGIN || Math.abs(e.touches[0].clientY - startY) > com.wiris.system.JsDOMUtils.TOUCHHOLD_MOVE_MARGIN) {
					clearTimeout(timeout);
					timeout = null;
				} else com.wiris.system.JsDOMUtils.cancelEvent(e);
			}
		},useCapture));
		descriptor.subDescriptors.push(com.wiris.system.JsDOMUtils.addEventListenerImpl(element,"touchend",function(e) {
			if(timeout != null) {
				clearTimeout(timeout);
				timeout = null;
			}
		},useCapture));
		return descriptor;
	}
	var descriptor = { };
	descriptor.element = element;
	descriptor.eventName = eventName;
	descriptor.handler = handler;
	descriptor.useCapture = useCapture;
	descriptor.subDescriptors = new Array();
	if(eventName == "dblclick") {
		var event = null;
		var touching = false;
		var firstClickTimestamp = null;
		descriptor.subDescriptors.push(com.wiris.system.JsDOMUtils.addEventListenerImpl(element,"touchstart",function(e) {
			touching = true;
			event = e;
		},useCapture));
		descriptor.subDescriptors.push(com.wiris.system.JsDOMUtils.addEventListenerImpl(element,"touchmove",function(e) {
			touching = false;
		},useCapture));
		descriptor.subDescriptors.push(com.wiris.system.JsDOMUtils.addEventListenerImpl(element,"touchend",function(e) {
			if(touching) {
				touching = false;
				var currentTimestamp = new Date().getTime();
				if(firstClickTimestamp == null || currentTimestamp > firstClickTimestamp + 500) firstClickTimestamp = currentTimestamp; else {
					event._wrs_dealAsTouch = true;
					handler(e);
				}
			}
		},useCapture));
	}
	if(element.attachEvent) element.attachEvent("on" + eventName,function() {
		handler(window.event);
	}); else {
		var options = { };
		options.capture = useCapture;
		if(eventName == "touchmove") options.passive = false;
		element.addEventListener(eventName,handler,options);
	}
	return descriptor;
}
com.wiris.system.JsDOMUtils.removeEventListener = function(descriptor) {
	if(com.wiris.system.JsDOMUtils.browser.isIE() && descriptor.element.detachEvent) descriptor.element.detachEvent("on" + Std.string(descriptor.eventName),descriptor.handler); else descriptor.element.removeEventListener(descriptor.eventName,descriptor.handler,descriptor.useCapture);
	var i = $iterator(descriptor.subDescriptors)();
	while(i.hasNext()) com.wiris.system.JsDOMUtils.removeEventListener(i.next());
}
com.wiris.system.JsDOMUtils.cancelEvent = function(e) {
	if(e.preventDefault) e.preventDefault(); else e.returnValue = false;
}
com.wiris.system.JsDOMUtils.fireEvent = function(element,eventName) {
	var event;
	if(document.createEvent) {
		event = document.createEvent("HTMLEvents");
		event.initEvent(eventName,true,true);
		event.eventName = eventName;
		element.dispatchEvent(event);
	} else {
		event = document.createEventObject();
		event.eventType = eventName;
		event.eventName = eventName;
		element.fireEvent("on" + eventName,event);
	}
}
com.wiris.system.JsDOMUtils.getComputedStyle = function(element) {
	if(element.currentStyle) return element.currentStyle;
	return document.defaultView.getComputedStyle(element,null);
}
com.wiris.system.JsDOMUtils.getComputedStyleProperty = function(element,name) {
	var value;
	if(document.defaultView && document.defaultView.getComputedStyle) {
		var computedStyle = document.defaultView.getComputedStyle(element,null);
		value = computedStyle == null?null:computedStyle.getPropertyValue(name);
	} else if(com.wiris.system.JsDOMUtils.browser.isIE() && element.currentStyle) {
		var camelName = com.wiris.system.JsDOMUtils.camelize(name);
		value = element.currentStyle[camelName];
		if(value != null && value.length > 0 && camelName != "zoom") {
			var firstChar = HxOverrides.cca(value,0);
			if(firstChar >= 48 && firstChar <= 57 && !StringTools.endsWith(value,"px")) {
				var originalLeft = element.style.left;
				var originalRuntimeLeft = element.runtimeStyle?element.runtimeStyle.left:null;
				if(originalRuntimeLeft != null) element.runtimeStyle.left = element.currentStyle.left;
				element.style.left = camelName == "fontSize"?"1em":value;
				value = element.style.pixelLeft + "px";
				element.style.left = originalLeft;
				if(originalRuntimeLeft != null) element.runtimeStyle.left = originalRuntimeLeft;
			}
		}
	} else value = element.style[com.wiris.system.JsDOMUtils.camelize(name)];
	return value;
}
com.wiris.system.JsDOMUtils.getPixelRatio = function() {
	var context = document.createElement("canvas").getContext("2d");
	var dpr = window.devicePixelRatio || 1;
	var bsr = context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1;
	return dpr / bsr;
}
com.wiris.system.JsDOMUtils.camelize = function(str) {
	var start = 0;
	var pos;
	var sb = new StringBuf();
	while((pos = str.indexOf("-",start)) != -1) {
		sb.b += Std.string(HxOverrides.substr(str,start,pos - start));
		sb.b += Std.string(str.charAt(pos + 1).toUpperCase());
		start = pos + 2;
	}
	sb.b += Std.string(HxOverrides.substr(str,start,null));
	return sb.b;
}
com.wiris.system.JsDOMUtils.getElementsByClassName = function(parent,className,recursive) {
	var returnValue = new Array();
	var _g1 = 0, _g = parent.childNodes.length;
	while(_g1 < _g) {
		var i = _g1++;
		if(com.wiris.system.JsDOMUtils.hasClass(parent.childNodes[i],className)) returnValue.push(parent.childNodes[i]);
		if(recursive) returnValue = returnValue.concat(com.wiris.system.JsDOMUtils.getElementsByClassName(parent.childNodes[i],className,true));
	}
	return returnValue;
}
com.wiris.system.JsDOMUtils.getEventTarget = function(event) {
	if(event.srcElement) return event.srcElement;
	return event.target;
}
com.wiris.system.JsDOMUtils.getLeft = function(element) {
	return element.getBoundingClientRect().left;
}
com.wiris.system.JsDOMUtils.getRelativeLeft = function(element,parent) {
	if(parent == null) return com.wiris.system.JsDOMUtils.getLeft(element);
	return com.wiris.system.JsDOMUtils.getLeft(element) - com.wiris.system.JsDOMUtils.getLeft(parent);
}
com.wiris.system.JsDOMUtils.getTop = function(element) {
	return element.getBoundingClientRect().top;
}
com.wiris.system.JsDOMUtils.getRelativeTop = function(element,parent) {
	if(parent == null) return com.wiris.system.JsDOMUtils.getTop(element);
	return com.wiris.system.JsDOMUtils.getTop(element) - com.wiris.system.JsDOMUtils.getTop(parent);
}
com.wiris.system.JsDOMUtils.getWindowScroll = function() {
	var scroll = new Array();
	if(js.Lib.window.pageYOffset == undefined) {
		scroll[0] = js.Lib.document.documentElement.scrollLeft;
		scroll[1] = js.Lib.document.documentElement.scrollTop;
	} else {
		scroll[0] = js.Lib.window.pageXOffset;
		scroll[1] = js.Lib.window.pageYOffset;
	}
	return scroll;
}
com.wiris.system.JsDOMUtils.setWindowScroll = function(scroll) {
	var x = scroll[0] | 0;
	var y = scroll[1] | 0;
	js.Lib.window.scrollTo(x,y);
}
com.wiris.system.JsDOMUtils.isLeftBidiAware = function(keyCode,rtl) {
	return keyCode == 37 && !rtl || keyCode == 39 && rtl;
}
com.wiris.system.JsDOMUtils.getFirstDisplayedChild = function(parent) {
	var child = parent != null?parent.firstChild:parent;
	while(child != null) {
		if(com.wiris.system.JsDOMUtils.getComputedStyleProperty(child,"display") != "none") return child;
		child = child.nextSibling;
	}
	return null;
}
com.wiris.system.JsDOMUtils.isDescendant = function(parent,possibleDescendant) {
	if(parent == null || possibleDescendant == null) return false;
	while(possibleDescendant.parentNode != null) {
		if(possibleDescendant.parentNode == parent) return true;
		possibleDescendant = possibleDescendant.parentNode;
	}
	return false;
}
com.wiris.system.JsDOMUtils.parseDimension = function(x) {
	return x < 0 || x == null?0:x;
}
com.wiris.system.JsDOMUtils.removeChildren = function(element) {
	while(element.firstChild != null) element.removeChild(element.firstChild);
}
com.wiris.system.JsDOMUtils.hasClass = function(element,className) {
	if(element == null || element.className == null || !(element.className.split)) return false;
	var classes = element.className.split(" ");
	var i = HxOverrides.iter(classes);
	while(i.hasNext()) if(i.next() == className) return true;
	return false;
}
com.wiris.system.JsDOMUtils.addClass = function(element,className) {
	if(element == null) return;
	if(element.className == "") element.className = className; else if(!com.wiris.system.JsDOMUtils.hasClass(element,className)) element.className += " " + className;
}
com.wiris.system.JsDOMUtils.removeClass = function(element,className) {
	if(element == null || element.className == null || !(element.className.split)) return;
	var classes = element.className.split(" ");
	HxOverrides.remove(classes,className);
	element.className = classes.join(" ");
}
com.wiris.system.JsDOMUtils.toggleClass = function(element,className) {
	if(com.wiris.system.JsDOMUtils.hasClass(element,className)) com.wiris.system.JsDOMUtils.removeClass(element,className); else com.wiris.system.JsDOMUtils.addClass(element,className);
}
com.wiris.system.JsDOMUtils.activateClass = function(element,className) {
	if(!com.wiris.system.JsDOMUtils.hasClass(element,className)) com.wiris.system.JsDOMUtils.addClass(element,className);
}
com.wiris.system.JsDOMUtils.setCaretPosition = function(element,position,end) {
	if(element.setSelectionRange) element.setSelectionRange(position,end); else if(element.createTextRange) {
		var range = element.createTextRange();
		range.collapse(true);
		range.moveStart("character",position);
		range.moveEnd("character",end);
		range.select();
	}
}
com.wiris.system.JsDOMUtils.getSelectionBounds = function(element) {
	var bounds = new Array();
	if(element.selectionStart != null) {
		bounds[0] = element.selectionStart;
		bounds[1] = element.selectionEnd;
		return bounds;
	}
	var range = document.selection.createRange();
	if(range && range.parentElement() == element) {
		var length = element.value.length;
		var normalizedValue = element.value.split("\r\n").join("\n");
		var textInputRange = element.createTextRange();
		textInputRange.moveToBookmark(range.getBookmark());
		var endRange = element.createTextRange();
		endRange.collapse(false);
		if(textInputRange.compareEndPoints("StartToEnd",endRange) > -1) bounds[0] = bounds[1] = length; else {
			bounds[0] = -textInputRange.moveStart("character",-length);
			bounds[0] += normalizedValue.slice(0,bounds[0]).split("\n").length - 1;
			if(textInputRange.compareEndPoints("EndToEnd",endRange) > -1) bounds[1] = length; else {
				bounds[1] = -textInputRange.moveEnd("character",-length);
				bounds[1] += normalizedValue.slice(0,bounds[1]).split("\n").length - 1;
			}
		}
		return bounds;
	}
	return null;
}
com.wiris.system.JsDOMUtils.getMousePosition = function(target,e) {
	if(e._wrs_dealAsTouch) return com.wiris.system.JsDOMUtils.getTouchPosition(target,e.touches[0]);
	var elementScroll = new Array();
	elementScroll[0] = target.scrollLeft;
	elementScroll[1] = target.scrollTop;
	return com.wiris.system.JsDOMUtils.getMousePositionImpl(target,e,elementScroll,0);
}
com.wiris.system.JsDOMUtils.getMousePositionImpl = function(target,e,elementScroll,border) {
	var position = new Array();
	position[0] = e.clientX - com.wiris.system.JsDOMUtils.getLeft(target) - border + elementScroll[0];
	position[1] = e.clientY - com.wiris.system.JsDOMUtils.getTop(target) - border + elementScroll[1];
	return position;
}
com.wiris.system.JsDOMUtils.getMousePagePosition = function(target,e) {
	var pagePosition = new Array();
	pagePosition[0] = e.pageX;
	pagePosition[1] = e.pageY;
	return pagePosition;
}
com.wiris.system.JsDOMUtils.getScrollPosition = function(target,e) {
	var elementScroll = new Array();
	elementScroll[0] = target.scrollLeft;
	elementScroll[1] = target.scrollTop;
	return elementScroll;
}
com.wiris.system.JsDOMUtils.inFixedParent = function(element) {
	while(element != null) {
		if(com.wiris.system.JsDOMUtils.getComputedStyleProperty(element,"position") == "fixed") return true;
		element = element.offsetParent;
	}
	return false;
}
com.wiris.system.JsDOMUtils.getTouchPosition = function(target,touch) {
	var elementScroll = new Array();
	elementScroll[0] = target.scrollLeft;
	elementScroll[1] = target.scrollTop;
	return com.wiris.system.JsDOMUtils.getTouchPositionImpl(target,touch,elementScroll,0);
}
com.wiris.system.JsDOMUtils.getTouchPositionImpl = function(target,touch,elementScroll,border) {
	var position = new Array();
	position[0] = touch.clientX - com.wiris.system.JsDOMUtils.getLeft(target) - border + elementScroll[0];
	position[1] = touch.clientY - com.wiris.system.JsDOMUtils.getTop(target) - border + elementScroll[1];
	return position;
}
com.wiris.system.JsDOMUtils.getStandardButton = function(e) {
	if(e.touches) return 1;
	if("button" in e) return e.button + 1;
	return 0;
}
com.wiris.system.JsDOMUtils.vibrate = function(milliseconds) {
	if(navigator.vibrate) navigator.vibrate(milliseconds);
}
com.wiris.system.JsDOMUtils.onTouchDeviceDetected = function(callbackFunction) {
	com.wiris.system.JsDOMUtils.init();
	com.wiris.system.JsDOMUtils.touchDeviceListeners.push(callbackFunction);
}
com.wiris.system.JsDOMUtils.onMouseDeviceDetected = function(callbackFunction) {
	com.wiris.system.JsDOMUtils.init();
	com.wiris.system.JsDOMUtils.mouseDeviceListeners.push(callbackFunction);
}
com.wiris.system.JsDOMUtils.findScriptElement = function(reg) {
	var scripts = js.Lib.document.getElementsByTagName("script");
	var n = scripts.length;
	var i = 0;
	while(i < n) {
		var src = scripts[i].getAttribute("src");
		if(reg.match(src)) return scripts[i];
		++i;
	}
	return null;
}
com.wiris.system.JsDOMUtils.rewriteDefaultPaths = function(contextPath) {
	if(window.com.wiris.js.defaultServicePath != null && StringTools.startsWith(window.com.wiris.js.defaultServicePath,"http://")) {
		var protocol = js.Lib.window.location.protocol;
		var defaultServicePathWithoutProtocol = window.com.wiris.js.defaultServicePath.substr("http:".length);
		var reg = new EReg("(http:|https:)" + defaultServicePathWithoutProtocol + "/" + contextPath,"");
		if(com.wiris.system.JsDOMUtils.findScriptElement(reg) != null) protocol = reg.matched(1);
		if(protocol == "https:") {
			window.com.wiris.js.defaultServicePath = "https:" + defaultServicePathWithoutProtocol;
			if(window.com.wiris.js.defaultBasePath != null) window.com.wiris.js.defaultBasePath = "https:" + window.com.wiris.js.defaultBasePath.substr("http:".length);
		}
	}
}
com.wiris.system.JsDOMUtils.createCSSRules = function(selector,rules) {
	var style = js.Lib.document.createElement("style");
	style.type = "text/css";
	js.Lib.document.getElementsByTagName("head")[0].appendChild(style);
	if(style.sheet != null && style.sheet.insertRule != null) style.sheet.insertRule(selector + "{" + rules + "}",0); else if(style.styleSheet != null) style.styleSheet.addRule(selector,rules); else if(style.sheet != null) style.sheet.addRule(selector,rules);
}
com.wiris.system.JsDOMUtils.execCommand = function(command) {
	return document.execCommand(command);
}
com.wiris.system.JsDOMUtils.findServicePath = function(scriptName) {
	var scriptTags = js.Lib.document.getElementsByTagName("script");
	var servicePath = null;
	var _g1 = 0, _g = scriptTags.length;
	while(_g1 < _g) {
		var i = _g1++;
		var src = scriptTags[i].src;
		var j = src.lastIndexOf("/" + scriptName);
		if(j >= 0) servicePath = HxOverrides.substr(src,0,j); else if(src == scriptName) servicePath = "";
	}
	if(servicePath != null && StringTools.startsWith(servicePath,"http://") && js.Lib.window.location.protocol == "https:") servicePath = "https://" + HxOverrides.substr(servicePath,"http://".length,null);
	return servicePath;
}
com.wiris.system.JsDOMUtils.addScript = function(d,win,url) {
	if(win[url] == null) {
		win[url] = true;
		var script = d.createElement("script");
		script.setAttribute("type","text/javascript");
		script.setAttribute("src",url);
		d.getElementsByTagName("head")[0].appendChild(script);
		return script;
	}
	return null;
}
com.wiris.system.JsDOMUtils.addStylesheet = function(d,url) {
	if(!com.wiris.system.JsDOMUtils.existsCSS(d,url)) {
		var link = d.createElement("link");
		link.setAttribute("rel","stylesheet");
		link.setAttribute("type","text/css");
		link.setAttribute("href",url);
		d.getElementsByTagName("head")[0].appendChild(link);
	}
}
com.wiris.system.JsDOMUtils.loadTextFile = function(elem,func) {
	com.wiris.system.JsDOMUtils.loadFileImpl(elem,func);
}
com.wiris.system.JsDOMUtils.loadPNGImageFile = function(elem,func) {
	com.wiris.system.JsDOMUtils.loadFileImpl(elem,func,true,"image/png");
}
com.wiris.system.JsDOMUtils.loadFileImpl = function(elem,func,asDataURL,accept) {
	if(asDataURL == null) asDataURL = false;
	var w = js.Lib.window;
	if(w.File && w.FileReader && w.FileList && w.Blob) {
		var d = elem.ownerDocument;
		var fileInput = d.createElement("input");
		fileInput.setAttribute("name","data");
		fileInput.setAttribute("type","file");
		fileInput.setAttribute("style","display: none;");
		if(accept != null) fileInput.setAttribute("accept",accept);
		elem.appendChild(fileInput);
		com.wiris.system.JsDOMUtils.init();
		com.wiris.system.JsDOMUtils.addEventListener(fileInput,"change",function(e) {
			if(fileInput.files.length) {
				var file = fileInput.files[0];
				var reader = new FileReader();
				reader.onload = function(le) {
					func(le.target.result);
				};
				if(asDataURL) reader.readAsDataURL(file); else reader.readAsText(file);
			}
			elem.removeChild(fileInput);
		});
		fileInput.click();
	} else throw "Browser incompatible with JavaScript File API.";
}
com.wiris.system.JsDOMUtils.saveTextFile = function(elem,filename,filetype,contents) {
	var d = elem.ownerDocument;
	var w = js.Lib.window;
	if(w.Blob) {
		var blob = new Blob([contents], {'type': filetype});
		var a = d.createElement("a");
		if('download' in a && w.URL) {
			a.href = w.URL.createObjectURL(blob);
			a.download = filename;
			elem.appendChild(a);
			a.click();
			elem.removeChild(a);
			return;
		}
	}
	throw "Browser incompatible with HTML object download anchors.";
}
com.wiris.system.JsDOMUtils.trapFocus = function(disabledFocusContainer,focusableContainer) {
	var lastScroll = com.wiris.system.JsDOMUtils.getWindowScroll();
	var previousFocused = focusableContainer;
	var descriptor = com.wiris.system.JsDOMUtils.addEventListener(js.Lib.document,"focusin",function(e) {
		previousFocused = com.wiris.system.JsDOMUtils.getEventTarget(e);
	});
	descriptor.subDescriptors.push(com.wiris.system.JsDOMUtils.addEventListener(disabledFocusContainer,"focusin",function(e) {
		var focusedElement = com.wiris.system.JsDOMUtils.getEventTarget(e);
		if(!com.wiris.system.JsDOMUtils.isDescendant(focusableContainer,focusedElement)) {
			com.wiris.system.JsDOMUtils.setWindowScroll(lastScroll);
			var focusableElements = com.wiris.system.JsDOMUtils.getFocusableElements(js.Lib.document.body);
			var focusedElementIndex = 0;
			while(focusedElementIndex < focusableElements.length) {
				if(focusableElements[focusedElementIndex] == focusedElement) break;
				++focusedElementIndex;
			}
			var direction = previousFocused == focusedElement || com.wiris.system.JsDOMUtils.elementIsBefore(previousFocused,focusedElement)?1:-1;
			var alternative = com.wiris.system.JsDOMUtils.findFocusableAlternative(focusableElements,disabledFocusContainer,focusableContainer,focusedElementIndex,direction);
			if(alternative != null) alternative.focus();
			e.stopPropagation();
		} else lastScroll = com.wiris.system.JsDOMUtils.getWindowScroll();
	}));
	var focusedElement = js.Lib.document.activeElement;
	if(!com.wiris.system.JsDOMUtils.isDescendant(focusableContainer,focusedElement)) {
		com.wiris.system.JsDOMUtils.setWindowScroll(lastScroll);
		var focusableElements = com.wiris.system.JsDOMUtils.getFocusableElements(js.Lib.document.body);
		var focusedElementIndex = 0;
		while(focusedElementIndex < focusableElements.length) {
			if(focusableElements[focusedElementIndex] == focusedElement) break;
			++focusedElementIndex;
		}
		var alternative = com.wiris.system.JsDOMUtils.findFocusableAlternative(focusableElements,disabledFocusContainer,focusableContainer,focusedElementIndex,1);
		if(alternative != null) alternative.focus();
	}
	return descriptor;
}
com.wiris.system.JsDOMUtils.findFocusableAlternative = function(focusableElements,disabledFocusContainer,focusableContainer,focusedElementIndex,direction,stopOnIndex) {
	if(stopOnIndex == null) stopOnIndex = -100;
	if(focusedElementIndex == 0 && stopOnIndex == -100 && direction == -1) return com.wiris.system.JsDOMUtils.findFocusableAlternative(focusableElements,disabledFocusContainer,focusableContainer,0,1,focusableElements.length - 1);
	var originalFocusedElementIndex = focusedElementIndex;
	focusedElementIndex += direction;
	while(focusedElementIndex >= 0 && focusedElementIndex < focusableElements.length && com.wiris.system.JsDOMUtils.isDescendant(disabledFocusContainer,focusableElements[focusedElementIndex]) && (!com.wiris.system.JsDOMUtils.isDescendant(focusableContainer,focusableElements[focusedElementIndex]) || focusableElements[focusedElementIndex].offsetParent == null)) {
		focusedElementIndex += direction;
		if(focusedElementIndex == stopOnIndex) return null;
	}
	if(focusedElementIndex < 0) return com.wiris.system.JsDOMUtils.findFocusableAlternative(focusableElements,disabledFocusContainer,focusableContainer,focusableElements.length - 1,-1,originalFocusedElementIndex);
	if(focusedElementIndex >= focusableElements.length) return com.wiris.system.JsDOMUtils.findFocusableAlternative(focusableElements,disabledFocusContainer,focusableContainer,0,1,originalFocusedElementIndex);
	return focusableElements[focusedElementIndex];
}
com.wiris.system.JsDOMUtils.untrapFocus = function(descriptor) {
	com.wiris.system.JsDOMUtils.removeEventListener(descriptor);
}
com.wiris.system.JsDOMUtils.getFocusableElements = function(container) {
	var elements = container.querySelectorAll("button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])");
	var focusableElements = new Array();
	var i = 0;
	while(i < elements.length) {
		if(com.wiris.system.JsDOMUtils.getComputedStyleProperty(elements[i],"display") != "none" && com.wiris.system.JsDOMUtils.getComputedStyleProperty(elements[i],"visibility") != "hidden") focusableElements.push(elements[i]);
		++i;
	}
	return focusableElements;
}
com.wiris.system.JsDOMUtils.elementIsBefore = function(elementA,elementB) {
	if(elementA == elementB) throw "Trying to compare the same element.";
	var pathA = com.wiris.system.JsDOMUtils.getElementPath(elementA);
	var pathB = com.wiris.system.JsDOMUtils.getElementPath(elementB);
	var i = 1;
	var n = Math.min(pathA.length,pathB.length) | 0;
	while(i < n) {
		if(pathA[i] != pathB[i]) return com.wiris.system.JsDOMUtils.getElementChildIndex(pathA[i]) < com.wiris.system.JsDOMUtils.getElementChildIndex(pathB[i]);
		++i;
	}
	return false;
}
com.wiris.system.JsDOMUtils.elementIsVisible = function(element) {
	return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length);
}
com.wiris.system.JsDOMUtils.getElementPath = function(element) {
	var path = new Array();
	while(element != null) {
		path.splice(0,0,element);
		element = element.parentNode;
	}
	return path;
}
com.wiris.system.JsDOMUtils.getElementChildIndex = function(element) {
	if(element.parentNode == null) return -1;
	var i = 0;
	while(i < element.parentNode.childNodes.length) {
		if(element.parentNode.childNodes[i] == element) return i;
		++i;
	}
	return -1;
}
com.wiris.system.JsDOMUtils.existsCSS = function(document,name) {
	var head = document.getElementsByTagName("head")[0];
	var links = head.getElementsByTagName("link");
	var i = 0;
	while(i < links.length) {
		var link = links[i++];
		var type = link.getAttribute("type");
		if(type == "text/css") {
			var href = link.getAttribute("href");
			if(href.indexOf(name) > 0) return true;
		}
	}
	return false;
}
com.wiris.system.JsDOMUtils.trimDuplicatedCSS = function(document,validSource,name) {
	var head = document.getElementsByTagName("head")[0];
	var links = head.getElementsByTagName("link");
	var i = 0;
	var keep = -1;
	while(i < links.length) {
		var link = links[i];
		var type = link.getAttribute("type");
		if(type == "text/css") {
			var href = link.getAttribute("href");
			var index = href.indexOf(validSource);
			if(keep < 0 && index >= 0 && href.indexOf(name,index + 1) >= 0) {
				keep = i;
				i = -1;
			} else if(keep >= 0 && keep != i && href.indexOf(name) >= 0) {
				head.removeChild(link);
				if(i-- < keep) keep--;
			}
		}
		i++;
	}
}
com.wiris.system.LocalStorage = $hxClasses["com.wiris.system.LocalStorage"] = function() {
};
com.wiris.system.LocalStorage.__name__ = ["com","wiris","system","LocalStorage"];
com.wiris.system.LocalStorage.setItem = function(key,value) {
	try {
		js.Lib.window.localStorage.setItem(key,value);
		return true;
	} catch( err ) {
		return false;
	}
}
com.wiris.system.LocalStorage.getItem = function(key) {
	return js.Lib.window.localStorage.getItem(key);
}
com.wiris.system.LocalStorage.removeItem = function(key) {
	var item = js.Lib.window.localStorage.getItem(key);
	if(item != null) {
		js.Lib.window.localStorage.removeItem(key);
		return true;
	} else return false;
}
com.wiris.system.LocalStorage.prototype = {
	__class__: com.wiris.system.LocalStorage
}
com.wiris.system.LocalStorageCache = $hxClasses["com.wiris.system.LocalStorageCache"] = function(code) {
	this.MAX_BYTES = 2097152;
	this.code = code;
	this.available = this.isLocalStorageAvailable();
	this.getItems();
};
com.wiris.system.LocalStorageCache.__name__ = ["com","wiris","system","LocalStorageCache"];
com.wiris.system.LocalStorageCache.prototype = {
	unserializeItems: function(s) {
		return haxe.Json.parse(s);
	}
	,serializeItems: function(a) {
		return haxe.Json.stringify(a);
	}
	,isLocalStorageAvailable: function() {
		try {
			var storage = this.getStorage();
			var x = this.getStorageName("__test__");
			storage.setItem(x,x);
			storage.removeItem(x);
			return true;
		} catch( e ) {
			return false;
		}
	}
	,getStorage: function() {
		return js.Lib.window.localStorage;
	}
	,saveItems: function() {
		var serialized = this.serializeItems(this.items);
		this.getStorage().setItem(this.getStorageName(com.wiris.system.LocalStorageCache.ITEMS_KEY),serialized);
	}
	,getItems: function() {
		try {
			var serialized = this.getItem(com.wiris.system.LocalStorageCache.ITEMS_KEY);
			if(serialized != null) this.items = this.unserializeItems(serialized); else this.items = new Array();
			this.totalLength = 0;
			var _g = 0, _g1 = this.items;
			while(_g < _g1.length) {
				var item = _g1[_g];
				++_g;
				this.totalLength += item.length;
			}
		} catch( e ) {
			this.clear();
		}
	}
	,getStorageName: function(name) {
		return this.code + "_" + name;
	}
	,exists: function(key) {
		return this.available && this.getItem(key) != null;
	}
	,removeItem: function(key,saveItems) {
		var _g = 0, _g1 = this.items;
		while(_g < _g1.length) {
			var item = _g1[_g];
			++_g;
			if(item.name == key) {
				HxOverrides.remove(this.items,item);
				this.totalLength -= item.length;
				this.getStorage().removeItem(this.getStorageName(name));
				if(saveItems == null || saveItems) this.saveItems();
			}
		}
	}
	,getItem: function(key) {
		return this.available?this.getStorage().getItem(this.getStorageName(key)):null;
	}
	,setItemImpl: function(key,data) {
		var item = { name : key, length : data.length};
		this.items.push(item);
		this.totalLength += item.length;
		this.saveItems();
		this.getStorage().setItem(this.getStorageName(key),data);
	}
	,clear: function() {
		var storage = this.getStorage();
		var i = storage.length - 1;
		while(i >= 0) {
			var key = storage.key(i);
			if(StringTools.startsWith(key,this.getStorageName(""))) storage.removeItem(key);
			i--;
		}
		this.items = new Array();
		this.totalLength = 0;
	}
	,setItem: function(key,data) {
		var len = data.length;
		if(this.available && len < this.MAX_BYTES) try {
			this.removeItem(key,false);
			while(this.totalLength + len > this.MAX_BYTES) this.removeItem(this.items[0].name,false);
			this.setItemImpl(key,data);
		} catch( e ) {
			this.clear();
			this.setItemImpl(key,data);
		}
	}
	,totalLength: null
	,items: null
	,code: null
	,MAX_BYTES: null
	,available: null
	,__class__: com.wiris.system.LocalStorageCache
}
com.wiris.system.Logger = $hxClasses["com.wiris.system.Logger"] = function() { }
com.wiris.system.Logger.__name__ = ["com","wiris","system","Logger"];
com.wiris.system.Logger.log = function(level,message) {
	var prefix;
	if(level >= 1000) prefix = "SEVERE"; else if(level >= 900) prefix = "WARNING"; else prefix = "INFO";
	message = "[" + prefix + "] " + message;
	haxe.Log.trace(message,{ fileName : "Logger.hx", lineNumber : 25, className : "com.wiris.system.Logger", methodName : "log"});
}
com.wiris.system.PropertiesTools = $hxClasses["com.wiris.system.PropertiesTools"] = function() { }
com.wiris.system.PropertiesTools.__name__ = ["com","wiris","system","PropertiesTools"];
com.wiris.system.PropertiesTools.getSystemProperty = function(s) {
	return null;
}
com.wiris.system.PropertiesTools.getProperty = function(prop,key,dflt) {
	if(typeof prop[key]!='undefined') return prop[key];
	return dflt;
}
com.wiris.system.PropertiesTools.newProperties = function() {
	return new Hash();
}
com.wiris.system.PropertiesTools.setProperty = function(prop,key,value) {
	prop[key] = value;
}
com.wiris.system.PropertiesTools.fromProperties = function(prop) {
	var paramHash = new Hash();
	var i = HxOverrides.iter(Reflect.fields(prop));
	while(i.hasNext()) {
		var key = i.next();
		var value = Reflect.field(prop,key);
		paramHash.set(key,value);
	}
	return paramHash;
}
com.wiris.system.PropertiesTools.toProperties = function(h) {
	var np;
	np = new Array();;
	var ks = h.keys();
	while(ks.hasNext()) {
		var k = ks.next();
		np[k] = h.get(k);
	}
	return np;
}
com.wiris.system.Storage = $hxClasses["com.wiris.system.Storage"] = function(location) {
	location = StringTools.replace(location,"/",com.wiris.system.Storage.getDirectorySeparator());
	location = StringTools.replace(location,"\\",com.wiris.system.Storage.getDirectorySeparator());
	this.location = location;
};
com.wiris.system.Storage.__name__ = ["com","wiris","system","Storage"];
com.wiris.system.Storage.directorySeparator = null;
com.wiris.system.Storage.resourcesDir = null;
com.wiris.system.Storage.newResourceStorage = function(name) {
	return new com.wiris.system.Storage(name);
}
com.wiris.system.Storage.newStorage = function(name) {
	return new com.wiris.system.Storage(name);
}
com.wiris.system.Storage.newStorageWithParent = function(parent,name) {
	var path = parent.location == "."?name:parent.location + com.wiris.system.Storage.getDirectorySeparator() + name;
	return new com.wiris.system.Storage(path);
}
com.wiris.system.Storage.getResourcesDir = function() {
	if(com.wiris.system.Storage.resourcesDir == null) com.wiris.system.Storage.setResourcesDir();
	return com.wiris.system.Storage.resourcesDir;
}
com.wiris.system.Storage.setResourcesDir = function() {
	com.wiris.system.Storage.resourcesDir = ".";
}
com.wiris.system.Storage.getDirectorySeparator = function() {
	if(com.wiris.system.Storage.directorySeparator == null) com.wiris.system.Storage.setDirectorySeparator();
	return com.wiris.system.Storage.directorySeparator;
}
com.wiris.system.Storage.setDirectorySeparator = function() {
	var sep;
	sep = "/";
	com.wiris.system.Storage.directorySeparator = sep;
}
com.wiris.system.Storage.getCurrentPath = function() {
	throw "Not implemented!";
	return null;
}
com.wiris.system.Storage.prototype = {
	setResourceObject: function(obj) {
	}
	,list: function() {
		throw "Not implemented!";
		return null;
	}
	,isDirectory: function() {
		throw "Not implemented!";
		return false;
	}
	,'delete': function() {
		throw "Not implemented!";
	}
	,toString: function() {
		return this.location;
	}
	,getParent: function() {
		var path = null;
		if(path == null) path = this.location;
		var index = path.lastIndexOf(com.wiris.system.Storage.getDirectorySeparator());
		path = index != -1?HxOverrides.substr(path,0,index):".";
		return new com.wiris.system.Storage(path);
	}
	,mkdirs: function() {
		throw "Not implemented!";
	}
	,getLocalCache: function() {
		if(this.localStorage == null) this.localStorage = new com.wiris.system.LocalStorageCache("wq");
		return this.localStorage;
	}
	,exists: function() {
		var exists = false;
		var names = haxe.Resource.listNames();
		var i;
		var _g1 = 0, _g = names.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(names[i1] == this.location) {
				exists = true;
				break;
			}
		}
		if(!exists && this.getLocalCache().exists(this.location)) exists = true;
		return exists;
	}
	,read: function() {
		if(this.getLocalCache().exists(this.location)) return this.getLocalCache().getItem(this.location);
		return haxe.io.Bytes.ofData(this.readBinary()).toString();
	}
	,readBinary: function() {
		var bytes;
		if(this.getLocalCache().exists(this.location)) bytes = haxe.io.Bytes.ofString(this.getLocalCache().getItem(this.location)); else bytes = haxe.Resource.getBytes(this.location);
		return bytes.b;
	}
	,write: function(s) {
		this.getLocalCache().setItem(this.location,s);
	}
	,writeBinary: function(bs) {
		var bytes = haxe.io.Bytes.ofData(bs);
		this.getLocalCache().setItem(this.location,bytes.toString());
	}
	,localStorage: null
	,location: null
	,__class__: com.wiris.system.Storage
}
com.wiris.system.StringEx = $hxClasses["com.wiris.system.StringEx"] = function() { }
com.wiris.system.StringEx.__name__ = ["com","wiris","system","StringEx"];
com.wiris.system.StringEx.substring = function(s,start,end) {
	if(end == null) return HxOverrides.substr(s,start,null);
	return HxOverrides.substr(s,start,end - start);
}
com.wiris.system.StringEx.compareTo = function(s1,s2) {
	if(s1 > s2) return 1;
	if(s1 < s2) return -1;
	return 0;
}
com.wiris.system.System = $hxClasses["com.wiris.system.System"] = function() { }
com.wiris.system.System.__name__ = ["com","wiris","system","System"];
com.wiris.system.System.arraycopy = function(src,srcPos,dest,destPos,n) {
	var _g = 0;
	while(_g < n) {
		var i = _g++;
		dest[destPos + i] = src[srcPos + i];
	}
}
com.wiris.system.TelemetryUtils = $hxClasses["com.wiris.system.TelemetryUtils"] = function() { }
com.wiris.system.TelemetryUtils.__name__ = ["com","wiris","system","TelemetryUtils"];
com.wiris.system.TelemetryUtils.sendBatch = function(data) {
	var url = data.get(com.wiris.system.TelemetryUtils.OPTIONS_KEY).get(com.wiris.system.TelemetryUtils.URL_KEY);
	var apiKey = data.get(com.wiris.system.TelemetryUtils.HEADERS_KEY).get(com.wiris.system.TelemetryUtils.API_KEY_KEY);
	var body = data.get(com.wiris.system.TelemetryUtils.BODY_KEY);
	fetch(url,{ method : "POST", headers : { 'x-api-key' : apiKey, 'Content-Type' : com.wiris.system.TelemetryUtils.CONTENT_TYPE_VALUE}, body : body, keepalive : true});
}
com.wiris.system.TelemetryUtils.getSenderParameters = function() {
	var params = new Hash();
	params.set(com.wiris.util.telemetry.Sender.USER_AGENT_KEY,js.Lib.window.navigator.userAgent);
	params.set(com.wiris.util.telemetry.Sender.OS_KEY,js.Lib.window.navigator.platform);
	params.set(com.wiris.util.telemetry.Sender.LANGUAGE_KEY,js.Lib.window.navigator.language);
	params.set(com.wiris.util.telemetry.Sender.DOMAIN_KEY,js.Lib.window.location.hostname);
	return params;
}
com.wiris.system.TypeTools = $hxClasses["com.wiris.system.TypeTools"] = function() { }
com.wiris.system.TypeTools.__name__ = ["com","wiris","system","TypeTools"];
com.wiris.system.TypeTools.floatToString = function(value) {
	return "" + value;
}
com.wiris.system.TypeTools.isFloating = function(str) {
	var pattern = new EReg("^[+-]?\\d*\\.?\\d+([eE][+-]?\\d+)?$","");
	return pattern.match(str);
}
com.wiris.system.TypeTools.isInteger = function(str) {
	var pattern = new EReg("^[+-]?\\d+$","");
	return pattern.match(str);
}
com.wiris.system.TypeTools.isIdentifierPart = function(c) {
	var letterPattern = new EReg("[a-z]","i");
	var numberPattern = new EReg("[0-9]","");
	var str = String.fromCharCode(c);
	return letterPattern.match(str) || numberPattern.match(str) || str == "_";
}
com.wiris.system.TypeTools.isIdentifierStart = function(c) {
	var letterPattern = new EReg("[a-z]","i");
	var str = String.fromCharCode(c);
	return letterPattern.match(str) || str == "_";
}
com.wiris.system.TypeTools.isArray = function(o) {
	return js.Boot.__instanceof(o,Array);
}
com.wiris.system.TypeTools.isHash = function(o) {
	return js.Boot.__instanceof(o,Hash);
}
com.wiris.system.TypeTools.isBool = function(o) {
	return js.Boot.__instanceof(o,Bool);
}
com.wiris.system.TypeTools.toBool = function(o) {
	return o?true:false;
}
com.wiris.system.TypeTools.string2ByteData_iso8859_1 = function(str) {
	var data = new Array();
	var _g1 = 0, _g = str.length;
	while(_g1 < _g) {
		var i = _g1++;
		data.push(HxOverrides.cca(str,i));
	}
	var bytes = haxe.io.Bytes.ofData(data);
	return bytes;
}
com.wiris.system.TypeTools.hashParamsToObjectParams = function(params) {
	if(params == null) return null;
	var paramObject = { };
	var i = params.keys();
	while(i.hasNext()) {
		var key = i.next();
		var value = params.get(key);
		paramObject[key] = value;
	}
	return paramObject;
}
com.wiris.system.TypeTools.longBitsToDouble = function(notused,numberhigh,numberlow) {
	var numberint64 = new haxe.Int64(numberhigh,numberlow);
	var high7ff = 0 | 0;
	var low7ff = 2047 | 0;
	var int647ff = new haxe.Int64(high7ff,low7ff);
	var highfff = 1048575 | 0;
	var lowfff = -1 | 0;
	var int64fff = new haxe.Int64(highfff,lowfff);
	var high100 = 1048576 | 0;
	var low100 = 0 | 0;
	var int64100 = new haxe.Int64(high100,low100);
	var shiftright63 = new haxe.Int64(numberint64.high >> 31,numberint64.high >> 31);
	var s = (shiftright63.high | shiftright63.low) == 0?1:-1;
	var shiftright52 = new haxe.Int64(numberint64.high >> 31,numberint64.high >> 20);
	var and7ff = new haxe.Int64(shiftright52.high & int647ff.high,shiftright52.low & int647ff.low);
	var eint64 = and7ff;
	var andfff = new haxe.Int64(numberint64.high & int64fff.high,numberint64.low & int64fff.low);
	var shift1 = new haxe.Int64(andfff.high << 1 | andfff.low >>> 31,andfff.low << 1);
	var or100 = new haxe.Int64(andfff.high | int64100.high,andfff.low | int64100.low);
	var mint64 = (eint64.high | eint64.low) == 0?shift1:or100;
	var estring = eint64.toString();
	var e = Std.parseFloat(estring);
	var mstring = mint64.toString();
	var m = Std.parseFloat(mstring);
	var finalResult = s * Math.pow(2,e - 1075) * m;
	return finalResult;
}
com.wiris.system.TypeTools.intBitsToFloat = function(bits) {
	var s = bits >> 31 == 0?1:-1;
	var e = bits >> 23 & 255;
	var m = e == 0?(bits & 8388607) << 1:bits & 8388607 | 8388608;
	return s * m * Math.pow(2,e - 150);
}
haxe.Timer = $hxClasses["haxe.Timer"] = function(time_ms) {
	var me = this;
	this.id = window.setInterval(function() {
		me.run();
	},time_ms);
};
haxe.Timer.__name__ = ["haxe","Timer"];
haxe.Timer.delay = function(f,time_ms) {
	var t = new haxe.Timer(time_ms);
	t.run = function() {
		t.stop();
		f();
	};
	return t;
}
haxe.Timer.measure = function(f,pos) {
	var t0 = haxe.Timer.stamp();
	var r = f();
	haxe.Log.trace(haxe.Timer.stamp() - t0 + "s",pos);
	return r;
}
haxe.Timer.stamp = function() {
	return new Date().getTime() / 1000;
}
haxe.Timer.prototype = {
	run: function() {
	}
	,stop: function() {
		if(this.id == null) return;
		window.clearInterval(this.id);
		this.id = null;
	}
	,id: null
	,__class__: haxe.Timer
}
haxe.Int64 = $hxClasses["haxe.Int64"] = function(high,low) {
	this.high = high;
	this.low = low;
};
haxe.Int64.__name__ = ["haxe","Int64"];
haxe.Int64.make = function(high,low) {
	return new haxe.Int64(high,low);
}
haxe.Int64.ofInt = function(x) {
	return new haxe.Int64(x >> 31 | 0,x | 0);
}
haxe.Int64.ofInt32 = function(x) {
	return new haxe.Int64(x >> 31,x);
}
haxe.Int64.toInt = function(x) {
	if(haxe.Int32.toInt(x.high) != 0) {
		if(x.high < 0) return -haxe.Int64.toInt(haxe.Int64.neg(x));
		throw "Overflow";
	}
	return haxe.Int32.toInt(x.low);
}
haxe.Int64.getLow = function(x) {
	return x.low;
}
haxe.Int64.getHigh = function(x) {
	return x.high;
}
haxe.Int64.add = function(a,b) {
	var high = a.high + b.high | 0;
	var low = a.low + b.low | 0;
	if(haxe.Int32.ucompare(low,a.low) < 0) high = high + (1 | 0) | 0;
	return new haxe.Int64(high,low);
}
haxe.Int64.sub = function(a,b) {
	var high = a.high - b.high | 0;
	var low = a.low - b.low | 0;
	if(haxe.Int32.ucompare(a.low,b.low) < 0) high = high - (1 | 0) | 0;
	return new haxe.Int64(high,low);
}
haxe.Int64.mul = function(a,b) {
	var mask = 65535 | 0;
	var al = a.low & mask, ah = a.low >>> 16;
	var bl = b.low & mask, bh = b.low >>> 16;
	var p00 = al * (bl & 65535) + (al * (bl >>> 16) << 16 | 0) | 0;
	var p10 = ah * (bl & 65535) + (ah * (bl >>> 16) << 16 | 0) | 0;
	var p01 = al * (bh & 65535) + (al * (bh >>> 16) << 16 | 0) | 0;
	var p11 = ah * (bh & 65535) + (ah * (bh >>> 16) << 16 | 0) | 0;
	var low = p00;
	var high = (p11 + (p01 >>> 16) | 0) + (p10 >>> 16) | 0;
	p01 = p01 << 16;
	low = low + p01 | 0;
	if(haxe.Int32.ucompare(low,p01) < 0) high = high + (1 | 0) | 0;
	p10 = p10 << 16;
	low = low + p10 | 0;
	if(haxe.Int32.ucompare(low,p10) < 0) high = high + (1 | 0) | 0;
	high = high + haxe.Int32.mul(a.low,b.high) | 0;
	high = high + haxe.Int32.mul(a.high,b.low) | 0;
	return new haxe.Int64(high,low);
}
haxe.Int64.divMod = function(modulus,divisor) {
	var quotient = new haxe.Int64(0 | 0,0 | 0);
	var mask = new haxe.Int64(0 | 0,1 | 0);
	divisor = new haxe.Int64(divisor.high,divisor.low);
	while(!(divisor.high < 0)) {
		var cmp = haxe.Int64.ucompare(divisor,modulus);
		divisor.high = divisor.high << 1 | divisor.low >>> 31;
		divisor.low = divisor.low << 1;
		mask.high = mask.high << 1 | mask.low >>> 31;
		mask.low = mask.low << 1;
		if(cmp >= 0) break;
	}
	while(!((mask.low | mask.high) == 0)) {
		if(haxe.Int64.ucompare(modulus,divisor) >= 0) {
			quotient.high = quotient.high | mask.high;
			quotient.low = quotient.low | mask.low;
			modulus = haxe.Int64.sub(modulus,divisor);
		}
		mask.low = mask.low >>> 1 | mask.high << 31;
		mask.high = mask.high >>> 1;
		divisor.low = divisor.low >>> 1 | divisor.high << 31;
		divisor.high = divisor.high >>> 1;
	}
	return { quotient : quotient, modulus : modulus};
}
haxe.Int64.div = function(a,b) {
	var sign = (a.high | b.high) < 0;
	if(a.high < 0) a = haxe.Int64.neg(a);
	if(b.high < 0) b = haxe.Int64.neg(b);
	var q = haxe.Int64.divMod(a,b).quotient;
	return sign?haxe.Int64.neg(q):q;
}
haxe.Int64.mod = function(a,b) {
	var sign = (a.high | b.high) < 0;
	if(a.high < 0) a = haxe.Int64.neg(a);
	if(b.high < 0) b = haxe.Int64.neg(b);
	var m = haxe.Int64.divMod(a,b).modulus;
	return sign?haxe.Int64.neg(m):m;
}
haxe.Int64.shl = function(a,b) {
	return (b & 63) == 0?a:(b & 63) < 32?new haxe.Int64(a.high << b | a.low >>> 32 - (b & 63),a.low << b):new haxe.Int64(a.low << b - 32,0 | 0);
}
haxe.Int64.shr = function(a,b) {
	return (b & 63) == 0?a:(b & 63) < 32?new haxe.Int64(a.high >> b,a.low >>> b | a.high << 32 - (b & 63)):new haxe.Int64(a.high >> 31,a.high >> b - 32);
}
haxe.Int64.ushr = function(a,b) {
	return (b & 63) == 0?a:(b & 63) < 32?new haxe.Int64(a.high >>> b,a.low >>> b | a.high << 32 - (b & 63)):new haxe.Int64(0 | 0,a.high >>> b - 32);
}
haxe.Int64.and = function(a,b) {
	return new haxe.Int64(a.high & b.high,a.low & b.low);
}
haxe.Int64.or = function(a,b) {
	return new haxe.Int64(a.high | b.high,a.low | b.low);
}
haxe.Int64.xor = function(a,b) {
	return new haxe.Int64(a.high ^ b.high,a.low ^ b.low);
}
haxe.Int64.neg = function(a) {
	var high = ~a.high;
	var low = -a.low;
	if(low == 0) high = high + (1 | 0) | 0;
	return new haxe.Int64(high,low);
}
haxe.Int64.isNeg = function(a) {
	return a.high < 0;
}
haxe.Int64.isZero = function(a) {
	return (a.high | a.low) == 0;
}
haxe.Int64.compare = function(a,b) {
	var v = a.high - b.high;
	return v != 0?v:haxe.Int32.ucompare(a.low,b.low);
}
haxe.Int64.ucompare = function(a,b) {
	var v = haxe.Int32.ucompare(a.high,b.high);
	return v != 0?v:haxe.Int32.ucompare(a.low,b.low);
}
haxe.Int64.toStr = function(a) {
	return a.toString();
}
haxe.Int64.prototype = {
	toString: function() {
		if(this.high == 0 && this.low == 0) return "0";
		var str = "";
		var neg = false;
		var i = this;
		if(i.high < 0) {
			neg = true;
			i = haxe.Int64.neg(i);
		}
		var ten = new haxe.Int64(0 | 0,10 | 0);
		while(!((i.high | i.low) == 0)) {
			var r = haxe.Int64.divMod(i,ten);
			str = haxe.Int32.toInt(r.modulus.low) + str;
			i = r.quotient;
		}
		if(neg) str = "-" + str;
		return str;
	}
	,low: null
	,high: null
	,__class__: haxe.Int64
}
haxe.Int32 = $hxClasses["haxe.Int32"] = function() { }
haxe.Int32.__name__ = ["haxe","Int32"];
haxe.Int32.make = function(a,b) {
	return a << 16 | b;
}
haxe.Int32.ofInt = function(x) {
	return x | 0;
}
haxe.Int32.clamp = function(x) {
	return x | 0;
}
haxe.Int32.toInt = function(x) {
	if((x >> 30 & 1) != x >>> 31) throw "Overflow " + Std.string(x);
	return x;
}
haxe.Int32.toNativeInt = function(x) {
	return x;
}
haxe.Int32.add = function(a,b) {
	return a + b | 0;
}
haxe.Int32.sub = function(a,b) {
	return a - b | 0;
}
haxe.Int32.mul = function(a,b) {
	return a * (b & 65535) + (a * (b >>> 16) << 16 | 0) | 0;
}
haxe.Int32.div = function(a,b) {
	return a / b | 0;
}
haxe.Int32.mod = function(a,b) {
	return a % b;
}
haxe.Int32.shl = function(a,b) {
	return a << b;
}
haxe.Int32.shr = function(a,b) {
	return a >> b;
}
haxe.Int32.ushr = function(a,b) {
	return a >>> b;
}
haxe.Int32.and = function(a,b) {
	return a & b;
}
haxe.Int32.or = function(a,b) {
	return a | b;
}
haxe.Int32.xor = function(a,b) {
	return a ^ b;
}
haxe.Int32.neg = function(a) {
	return -a;
}
haxe.Int32.isNeg = function(a) {
	return a < 0;
}
haxe.Int32.isZero = function(a) {
	return a == 0;
}
haxe.Int32.complement = function(a) {
	return ~a;
}
haxe.Int32.compare = function(a,b) {
	return a - b;
}
haxe.Int32.ucompare = function(a,b) {
	if(a < 0) return b < 0?~b - ~a:1;
	return b < 0?-1:a - b;
}
com.wiris.system.UUIDUtils = $hxClasses["com.wiris.system.UUIDUtils"] = function() { }
com.wiris.system.UUIDUtils.__name__ = ["com","wiris","system","UUIDUtils"];
com.wiris.system.UUIDUtils.splitmix64_seed = function(num) {
	var index = new haxe.Int64(num >> 31 | 0,num | 0);
	var n1 = -1640531527 | 0;
	var n2 = 2135587861 | 0;
	var n3 = -1084733587 | 0;
	var n4 = 484763065 | 0;
	var n5 = -1798288965 | 0;
	var n6 = 321982955 | 0;
	var result = haxe.Int64.add(index,new haxe.Int64(n1,n2));
	result = haxe.Int64.mul(haxe.Int64.xor(result,new haxe.Int64(result.high >> 30,result.low >>> 30 | result.high << 2)),new haxe.Int64(n3,n4));
	result = haxe.Int64.mul(haxe.Int64.xor(result,new haxe.Int64(result.high >> 27,result.low >>> 27 | result.high << 5)),new haxe.Int64(n5,n6));
	return haxe.Int64.xor(result,new haxe.Int64(result.high >> 31,result.low >>> 31 | result.high << 1));
}
com.wiris.system.UUIDUtils.randomFromRange = function(min,max) {
	var n1 = new haxe.Int64(0 | 0,1 | 0);
	var s1 = com.wiris.system.UUIDUtils.state0;
	var s0 = com.wiris.system.UUIDUtils.state1;
	com.wiris.system.UUIDUtils.state0 = s0;
	s1 = haxe.Int64.xor(s1,new haxe.Int64(s1.high >> 23,s1.low >>> 23 | s1.high << 9));
	com.wiris.system.UUIDUtils.state1 = haxe.Int64.xor(haxe.Int64.xor(new haxe.Int64(s1.high ^ s0.high,s1.low ^ s0.low),new haxe.Int64(s1.high >>> 18,s1.low >>> 18 | s1.high << 14)),new haxe.Int64(s0.high >>> 5,s0.low >>> 5 | s0.high << 27));
	var result32 = haxe.Int64.getLow(haxe.Int64.mod(haxe.Int64.add(com.wiris.system.UUIDUtils.state1,s0),haxe.Int64.sub(max,haxe.Int64.add(min,n1))));
	var result = (function($this) {
		var $r;
		if((result32 >> 30 & 1) != result32 >>> 31) throw "Overflow " + Std.string(result32);
		$r = result32;
		return $r;
	}(this));
	result = result < 0?-result:result;
	return result + haxe.Int64.toInt(min);
}
com.wiris.system.UUIDUtils.randomByte = function() {
	return com.wiris.system.UUIDUtils.randomFromRange(new haxe.Int64(0 | 0,0 | 0),new haxe.Int64(0 | 0,255 | 0));
}
com.wiris.system.UUIDUtils.unparse = function(data) {
	var hex = data.toHex();
	var uuid = HxOverrides.substr(hex,0,8) + "-" + HxOverrides.substr(hex,8,4) + "-" + HxOverrides.substr(hex,12,4) + "-" + HxOverrides.substr(hex,16,4) + "-" + HxOverrides.substr(hex,20,12);
	return uuid;
}
com.wiris.system.UUIDUtils.generateV4 = function(randBytes,randomFunc) {
	if(randomFunc == null) randomFunc = com.wiris.system.UUIDUtils.randomByte;
	var buffer = randBytes;
	if(buffer == null) {
		buffer = haxe.io.Bytes.alloc(16);
		var _g = 0;
		while(_g < 16) {
			var i = _g++;
			buffer.b[i] = randomFunc() & 255;
		}
	} else if(buffer.length < 16) throw "Random bytes should be at least 16 bytes";
	buffer.b[6] = (buffer.b[6] & 15 | 64) & 255;
	buffer.b[8] = (buffer.b[8] & 63 | 128) & 255;
	var uuid = com.wiris.system.UUIDUtils.unparse(buffer);
	return uuid;
}
if(!com.wiris.system._Utf8) com.wiris.system._Utf8 = {}
com.wiris.system._Utf8.StringIterator = $hxClasses["com.wiris.system._Utf8.StringIterator"] = function(s) {
	this.source = s;
	this.n = this.source.length;
	this.offset = 0;
};
com.wiris.system._Utf8.StringIterator.__name__ = ["com","wiris","system","_Utf8","StringIterator"];
com.wiris.system._Utf8.StringIterator.prototype = {
	next: function() {
		var c = HxOverrides.cca(this.source,this.offset++);
		if(c >= 55296 && c < 57344) {
			var c2 = HxOverrides.cca(this.source,this.offset++);
			c = ((c & 1023) << 10 | c2 & 1023) + 65536;
		}
		return c;
	}
	,nextByte: function() {
		return HxOverrides.cca(this.source,this.offset++);
	}
	,hasNext: function() {
		return this.offset < this.n;
	}
	,source: null
	,n: null
	,offset: null
	,__class__: com.wiris.system._Utf8.StringIterator
}
com.wiris.util.graphics.ClientGraphicsContext = $hxClasses["com.wiris.util.graphics.ClientGraphicsContext"] = function() { }
com.wiris.util.graphics.ClientGraphicsContext.__name__ = ["com","wiris","util","graphics","ClientGraphicsContext"];
com.wiris.util.graphics.ClientGraphicsContext.prototype = {
	getIdentifier: null
	,selects: null
	,fontExists: null
	,fillRect: null
	,drawArc: null
	,getLineWidth: null
	,drawPolyline: null
	,getFonts: null
	,canDisplay: null
	,setStyle: null
	,getMetrics: null
	,endTranslate: null
	,drawLine: null
	,drawVerticalLineWithType: null
	,drawHorizontalLineWithType: null
	,drawVerticalLine: null
	,drawHorizontalLine: null
	,drawText: null
	,beginTranslate: null
	,__class__: com.wiris.util.graphics.ClientGraphicsContext
}
if(!com.wiris.system.graphics) com.wiris.system.graphics = {}
com.wiris.system.graphics.JsClientGraphicsContext = $hxClasses["com.wiris.system.graphics.JsClientGraphicsContext"] = function(container,resourceLoader,removeChildren,storeRenderActions) {
	if(storeRenderActions == null) storeRenderActions = false;
	if(removeChildren == null) removeChildren = true;
	if(storeRenderActions) this.renderActions = new Array();
	com.wiris.system.graphics.JsClientGraphicsContext.initialize(resourceLoader);
	this.container = container;
	this.metricsCache = new Hash();
	this.originalStyle = com.wiris.util.graphics.BoxStyle.newFontSizeP(100);
	this.repaintNeeded = false;
	this.resourceLoader = resourceLoader;
	this.smallBrackets = false;
	this.style = this.originalStyle;
	this.styleClass = "";
	this.styleClassWithoutFontFamily = "";
	this.textDimensionsSuffix = "";
	this.x = 0;
	this.y = 0;
	this.firstTranslate = true;
	if(removeChildren) com.wiris.system.JsDOMUtils.removeChildren(this.container);
	var metricsParent = com.wiris.system.JsDOMUtils.getElementsByClassName(this.container,"wrs_metrics",false)[0];
	if(metricsParent == null) {
		var metricsParent1 = js.Lib.document.createElement("span");
		metricsParent1.className = "wrs_metrics";
		metricsParent1.style.position = "absolute";
		metricsParent1.style.top = com.wiris.system.graphics.JsClientGraphicsContext.HIDDEN_TOP;
		metricsParent1.style.whiteSpace = "nowrap";
		this.metricsElement = js.Lib.document.createElement("span");
		this.metricsElement.style.position = "fixed";
		this.metricsElement.style.top = com.wiris.system.graphics.JsClientGraphicsContext.HIDDEN_TOP;
		this.metricsElement.style.left = "0";
		this.metricsElement.style.margin = "0";
		this.metricsElement.style.padding = "0";
		this.metricsElement.appendChild(js.Lib.document.createTextNode("x"));
		var metricsImgNode = js.Lib.document.createElement("img");
		metricsImgNode.setAttribute("src","data:image/png;base64," + com.wiris.system.graphics.JsClientGraphicsContext.BASELINE_MARK_BASE64);
		metricsImgNode.setAttribute("alt","");
		metricsImgNode.style.height = "0";
		metricsImgNode.style.width = "0";
		this.metricsElement.appendChild(metricsImgNode);
		metricsParent1.appendChild(this.metricsElement);
		this.container.appendChild(metricsParent1);
	} else this.metricsElement = metricsParent.firstChild;
	this.setColor(com.wiris.system.graphics.JsClientGraphicsContext.DEFAULT_COLOR);
	this.setFontFamily(com.wiris.system.graphics.JsClientGraphicsContext.DEFAULT_FONT_FAMILY);
	this.setFontSize(com.wiris.system.graphics.JsClientGraphicsContext.DEFAULT_FONT_SIZE);
};
com.wiris.system.graphics.JsClientGraphicsContext.__name__ = ["com","wiris","system","graphics","JsClientGraphicsContext"];
com.wiris.system.graphics.JsClientGraphicsContext.__interfaces__ = [com.wiris.util.graphics.ClientGraphicsContext];
com.wiris.system.graphics.JsClientGraphicsContext.fontList = null;
com.wiris.system.graphics.JsClientGraphicsContext.fontClasses = null;
com.wiris.system.graphics.JsClientGraphicsContext.specialChars = null;
com.wiris.system.graphics.JsClientGraphicsContext.initialize = function(resourceLoader) {
	if(com.wiris.system.graphics.JsClientGraphicsContext.specialChars == null) {
		com.wiris.system.graphics.JsClientGraphicsContext.specialChars = new Hash();
		com.wiris.system.graphics.JsClientGraphicsContext.parseSpecialChars(Xml.parse(resourceLoader.loadResource("characters.xml")));
		com.wiris.system.graphics.JsClientGraphicsContext.fontList = new Array();
		com.wiris.system.graphics.JsClientGraphicsContext.fontClasses = new Hash();
		com.wiris.system.graphics.JsClientGraphicsContext.fontList.push("drawFont");
		com.wiris.system.graphics.JsClientGraphicsContext.fontList.push("rootFont");
		com.wiris.system.graphics.JsClientGraphicsContext.addFont("horizontal","wrs_horizontalChar");
		com.wiris.system.graphics.JsClientGraphicsContext.addFont("brack_sm","wrs_specialSmallChar");
		com.wiris.system.graphics.JsClientGraphicsContext.addFont("brackets","wrs_specialChar");
		com.wiris.system.graphics.JsClientGraphicsContext.addFont("math1_rtl","wrs_mathRTLChar");
		com.wiris.system.graphics.JsClientGraphicsContext.addFont("script","wrs_scriptChar");
		com.wiris.system.graphics.JsClientGraphicsContext.addFont("fraktur","wrs_frakturChar");
		com.wiris.system.graphics.JsClientGraphicsContext.addFont("double-struck","wrs_doubleStruckChar");
		com.wiris.system.graphics.JsClientGraphicsContext.addFont("stix","wrs_font_stix");
		com.wiris.system.graphics.JsClientGraphicsContext.addFont("math1","wrs_mathChar");
		com.wiris.system.graphics.JsClientGraphicsContext.addFont("round_brackets1854","wrs_roundBrackets1854Char");
		com.wiris.system.graphics.JsClientGraphicsContext.addFont("round_brackets2254","wrs_roundBrackets2254Char");
		com.wiris.system.graphics.JsClientGraphicsContext.addFont("round_brackets2654","wrs_roundBrackets2654Char");
		com.wiris.system.graphics.JsClientGraphicsContext.addFont("round_brackets3054","wrs_roundBrackets3054Char");
		com.wiris.system.graphics.JsClientGraphicsContext.addFont("round_brackets3454","wrs_roundBrackets3454Char");
		com.wiris.system.graphics.JsClientGraphicsContext.addFont("moe-arabic","wrs_font_moeArabic");
		com.wiris.system.graphics.JsClientGraphicsContext.fontList.push("negationFont");
		com.wiris.system.graphics.JsClientGraphicsContext.fontList.push("Arial");
	}
}
com.wiris.system.graphics.JsClientGraphicsContext.addFont = function(name,className) {
	com.wiris.system.graphics.JsClientGraphicsContext.fontList.push(name);
	com.wiris.system.graphics.JsClientGraphicsContext.fontClasses.set(name,className);
}
com.wiris.system.graphics.JsClientGraphicsContext.colorToRgb = function(color) {
	var red = color >> 16 & 255;
	var green = color >> 8 & 255;
	var blue = color & 255;
	return "rgb(" + red + "," + green + "," + blue + ")";
}
com.wiris.system.graphics.JsClientGraphicsContext.getStandardFontClassName = function(fontFamily) {
	var i = HxOverrides.iter(fontFamily.toLowerCase().split(" "));
	fontFamily = i.next();
	while(i.hasNext()) {
		var part = i.next();
		if(part.length > 0) {
			fontFamily += part.toUpperCase().charAt(0);
			if(part.length > 1) fontFamily += HxOverrides.substr(part,1,part.length - 1);
		}
	}
	return "wrs_font_" + fontFamily;
}
com.wiris.system.graphics.JsClientGraphicsContext.parseSpecialChars = function(node) {
	if("" + Std.string(node.nodeType) == "element" && node.getNodeName() == "char") {
		var charCode = Std.parseInt(node.get("c"));
		var type = node.get("t");
		var key = String.fromCharCode(charCode);
		if(type != null && type.length > 0) key += ":" + type;
		com.wiris.system.graphics.JsClientGraphicsContext.specialChars.set(key,true);
	}
	if("" + Std.string(node.nodeType) == "element" || "" + Std.string(node.nodeType) == "document") {
		var i = node.iterator();
		while(i.hasNext()) com.wiris.system.graphics.JsClientGraphicsContext.parseSpecialChars(i.next());
	}
}
com.wiris.system.graphics.JsClientGraphicsContext.compare = function(s,min) {
	if(s.length == 0) return 0;
	var i = HxOverrides.iter(s);
	var x = i.next();
	while(i.hasNext()) {
		var candidate = i.next();
		if(min) {
			if(candidate < x) x = candidate;
		} else if(candidate > x) x = candidate;
	}
	return x;
}
com.wiris.system.graphics.JsClientGraphicsContext.prototype = {
	getIdentifier: function() {
		return "js";
	}
	,selects: function(selector) {
		if(selector.length == 0) return true;
		var parts = selector.split("@");
		if(parts.length == 0) return true;
		if(parts[0] != "js") return false;
		if(parts.length > 1) {
			if("@windows@osx@ios@android@linux@*@".indexOf("@" + parts[1] + "@") < 0) return false;
			if(parts[1] == "windows" && com.wiris.system.JsDOMUtils.browser.getOS() != "Windows") return false;
			if(parts[1] == "osx" && com.wiris.system.JsDOMUtils.browser.getOS() != "Mac") return false;
			if(parts[1] == "ios" && com.wiris.system.JsDOMUtils.browser.getOS() != "iOS") return false;
			if(parts[1] == "android" && com.wiris.system.JsDOMUtils.browser.getOS() != "Android") return false;
			if(parts[1] == "linux" && com.wiris.system.JsDOMUtils.browser.getOS() != "Linux") return false;
			if(parts.length > 2) {
				if(com.wiris.system.JsDOMUtils.browser.isIE()) {
					if("@ie@ie7@ie8@ie9@ie10@ie11@".indexOf("@" + parts[2] + "@") < 0) return false;
					if(parts[2] == "ie7" && Std.parseInt(com.wiris.system.JsDOMUtils.browser.getVersion()) != 7) return false;
					if(parts[2] == "ie8" && Std.parseInt(com.wiris.system.JsDOMUtils.browser.getVersion()) != 8) return false;
					if(parts[2] == "ie9" && Std.parseInt(com.wiris.system.JsDOMUtils.browser.getVersion()) != 9) return false;
					if(parts[2] == "ie10" && Std.parseInt(com.wiris.system.JsDOMUtils.browser.getVersion()) != 10) return false;
					if(parts[2] == "ie11" && Std.parseInt(com.wiris.system.JsDOMUtils.browser.getVersion()) != 11) return false;
				}
				if(com.wiris.system.JsDOMUtils.browser.isChrome() && parts[2] != "chrome") return false;
				if(com.wiris.system.JsDOMUtils.browser.isFF() && parts[2] != "firefox") return false;
				if(com.wiris.system.JsDOMUtils.browser.isEdge() && parts[2] != "edge") return false;
				if(com.wiris.system.JsDOMUtils.browser.isSafari() && parts[3] != "safari") return false;
			}
		}
		return true;
	}
	,fontExists: function(fontFamily) {
		return "@Arial@Times New Roman@Courier New@Stix@Tahoma@Verdana@".indexOf("@" + fontFamily + "@") >= 0;
	}
	,fillRect: function(x,y,width,height) {
		x += this.x;
		y += this.y;
		var div = js.Lib.document.createElement("span");
		div.style.top = y + "px";
		div.style.left = x + "px";
		div.style.width = width + "px";
		div.style.height = height + "px";
		div.style.background = this.rgbColor;
		div.style.position = "absolute";
		div.style.zIndex = 0;
		this.container.appendChild(div);
	}
	,getCustomFontClassName: function(fontName) {
		if(!com.wiris.system.graphics.JsClientGraphicsContext.fontClasses.exists(fontName)) return null;
		return com.wiris.system.graphics.JsClientGraphicsContext.fontClasses.get(fontName);
	}
	,getFonts: function() {
		return com.wiris.system.graphics.JsClientGraphicsContext.fontList;
	}
	,canDisplay: function(fontName,character) {
		if(fontName == null) fontName = this.fontFamily;
		var text = String.fromCharCode(character);
		if(fontName == "jsRootFont") return character >= com.wiris.util.xml.WCharacterBase.ROOT && character <= com.wiris.util.xml.WCharacterBase.ROOT_VERTICAL_LINE;
		if(fontName == "a") return com.wiris.system.graphics.JsClientGraphicsContext.specialChars.get(text + ":a") != null;
		if(fontName == "math1") return com.wiris.system.graphics.JsClientGraphicsContext.specialChars.get(text + ":m") != null;
		if(fontName == "math1_rtl") return com.wiris.system.graphics.JsClientGraphicsContext.specialChars.get(text + ":r") != null;
		if(fontName == "horizontal") return com.wiris.system.graphics.JsClientGraphicsContext.specialChars.get(text + ":h") != null;
		if(fontName == "brackets") return com.wiris.system.graphics.JsClientGraphicsContext.specialChars.get(text + ":b") != null;
		if(fontName == "brack_sm") return com.wiris.system.graphics.JsClientGraphicsContext.specialChars.get(text + ":s") != null;
		if(fontName == "script") return com.wiris.system.graphics.JsClientGraphicsContext.specialChars.get(text + ":c") != null;
		if(fontName == "fraktur") return com.wiris.system.graphics.JsClientGraphicsContext.specialChars.get(text + ":f") != null;
		if(fontName == "double-struck") return com.wiris.system.graphics.JsClientGraphicsContext.specialChars.get(text + ":d") != null;
		if(fontName == "round_brackets1854") return com.wiris.system.graphics.JsClientGraphicsContext.specialChars.get(text + ":r1854") != null;
		if(fontName == "round_brackets2254") return com.wiris.system.graphics.JsClientGraphicsContext.specialChars.get(text + ":r2254") != null;
		if(fontName == "round_brackets2654") return com.wiris.system.graphics.JsClientGraphicsContext.specialChars.get(text + ":r2654") != null;
		if(fontName == "round_brackets3054") return com.wiris.system.graphics.JsClientGraphicsContext.specialChars.get(text + ":r3054") != null;
		if(fontName == "round_brackets3454") return com.wiris.system.graphics.JsClientGraphicsContext.specialChars.get(text + ":r3454") != null;
		if(fontName == "stix") return com.wiris.system.graphics.JsClientGraphicsContext.specialChars.get(text + ":sx") != null;
		return this.fontFamily.toLowerCase() == fontName.toLowerCase();
	}
	,getMetrics: function(fontName,text) {
		if(fontName == null) fontName = this.fontFamily;
		return this.getTextDimensions(fontName,text,false,true);
	}
	,drawVML: function(x,y,width,height,code) {
		if(this.rtl && Std.parseInt(com.wiris.system.JsDOMUtils.browser.getVersion()) == 7) x -= width;
		var div = js.Lib.document.createElement("span");
		div.className = "wrs_vml";
		div.style.left = x - 1 + "px";
		div.style.top = y - 1 + "px";
		div.style.width = width + "px";
		div.style.height = height + "px";
		div.style.position = "absolute";
		div.style.zIndex = 2;
		this.container.appendChild(div);
		div.innerHTML = code;
	}
	,drawSVG: function(x,y,width,height,code) {
		var div = js.Lib.document.createElement("span");
		div.style.left = x + "px";
		div.style.top = y + "px";
		div.style.width = width + "px";
		div.style.height = height + "px";
		div.style.position = "absolute";
		div.innerHTML = "<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" style=\"position:absolute;z-index:2;left:0\" width=\"" + width + "px\" height=\"" + height + "px\">" + code + "</svg>";
		this.container.appendChild(div);
	}
	,getLineStyle: function() {
		return this.style.getLineStyle();
	}
	,getLineWidth: function() {
		return Math.max(this.style.getLineWidth() * this.style.getZoom() * this.style.getP() / 100,1) | 0;
	}
	,drawArcVML: function(x,y,width,height,startAngle,arcAngle) {
		var code;
		var lineWidth = this.getLineWidth();
		var ceiledHalfLineWidth = Math.ceil(lineWidth / 2) | 0;
		if(this.rtl) x -= width - ceiledHalfLineWidth;
		width -= lineWidth;
		height -= lineWidth;
		x += ceiledHalfLineWidth;
		y += ceiledHalfLineWidth;
		startAngle = 90 - (360 + startAngle) % 360;
		var endAngle = startAngle - arcAngle;
		code = "<arc xmlns=\"urn:schemas-microsoft-com:vml\" style=\"behavior: url(#default#VML);margin:0;padding:0;display:inline-block;z-index:2;position:absolute;";
		code += "width:" + width + "px;";
		code += "height:" + height + "px;\" ";
		code += "startangle=\"" + startAngle + "\" endangle=\"" + endAngle + "\" filled=\"false\" stroke=\"true\" strokecolor=\"" + this.rgbColor + "\" strokeweight=\"" + lineWidth + "px\" />";
		this.drawVML(this.x + x,this.y + y,width,height,code);
	}
	,drawArcSVG: function(x,y,width,height,startAngle,arcAngle) {
		var code;
		if(arcAngle == 360) {
			var midX = width / 2;
			var midY = height / 2;
			var parsedWidth = width - this.getLineWidth();
			var parsedHeight = height - this.getLineWidth();
			var rx = parsedWidth / 2;
			var ry = parsedHeight / 2;
			code = "<ellipse cx=\"" + midX + "\" cy=\"" + midY + "\" rx=\"" + rx + "\" ry=\"" + ry + "\" style=\"fill:none;stroke:" + this.rgbColor + ";stroke-width:" + this.getLineWidth() + "\" />";
		} else {
			var midX = width / 2;
			var midY = height / 2;
			var parsedWidth = width - this.getLineWidth();
			var parsedHeight = height - this.getLineWidth();
			var rx = parsedWidth / 2;
			var ry = parsedHeight / 2;
			var startX = midX + Math.cos(startAngle * Math.PI / 180.0) * rx;
			var startY = midY + -Math.sin(startAngle * Math.PI / 180.0) * ry;
			var endX = midX + Math.cos((startAngle + arcAngle) * Math.PI / 180.0) * rx;
			var endY = midY + -Math.sin((startAngle + arcAngle) * Math.PI / 180.0) * ry;
			var largeArcFlag = arcAngle > 180?1:0;
			var path = "M" + startX + "," + startY + " ";
			path += "A" + rx + "," + ry + " ";
			path += "0 ";
			path += largeArcFlag + ",";
			path += "0 ";
			path += endX + "," + endY;
			code = "<path d=\"" + path + "\" style=\"stroke:" + this.rgbColor + ";stroke-width:" + this.getLineWidth() + ";fill:none\" />";
		}
		this.drawSVG(this.x + x,this.y + y,width,height,code);
	}
	,drawArc: function(x,y,width,height,startAngle,arcAngle) {
		if(this.renderActions != null) this.renderActions.push(com.wiris.system.graphics.RenderAction.Arc(x,y,width,height,startAngle,arcAngle));
		if(!com.wiris.system.JsDOMUtils.browser.isIE() || Std.parseFloat(com.wiris.system.JsDOMUtils.browser.getVersion()) >= 9) this.drawArcSVG(x,y,width,height,startAngle,arcAngle); else this.drawArcVML(x,y,width,height,startAngle,arcAngle);
	}
	,setComponentColor: function(c) {
		c.style.color = this.rgbColor;
	}
	,standardHeightAndBaseline: function(fontName,text,dim) {
		if(text == "x") return dim;
		var oldStyle = this.getStyle();
		var newStyle = com.wiris.util.graphics.BoxStyle.newFontSizeP(oldStyle.getP());
		if(oldStyle.isFlagMask(com.wiris.util.graphics.BoxStyle.PIXELS_SIZE_FLAG)) newStyle.setFontSize(oldStyle.getFontSize());
		if(oldStyle.isFlagMask(com.wiris.util.graphics.BoxStyle.FONT_FAMILY_FLAG)) newStyle.setFontFamily(oldStyle.getFontFamily());
		if(oldStyle.isFlagMask(com.wiris.util.graphics.BoxStyle.ZOOM_FLAG)) newStyle.setZoom(oldStyle.getZoom());
		this.setStyle(newStyle,newStyle);
		var xDim = this.getTextDimensions(fontName,"x",true,true);
		this.setStyle(oldStyle,oldStyle);
		return [dim[0],xDim[1],xDim[2]];
	}
	,setStyle: function(style,changed) {
		this.style = style;
		if(this.renderActions != null) this.renderActions.push(com.wiris.system.graphics.RenderAction.Style(style,changed));
		if(changed.isFlagMask(com.wiris.util.graphics.BoxStyle.PIXELS_SIZE_FLAG)) this.setFontSize(changed.getFontSize());
		if(changed.isFlagMask(com.wiris.util.graphics.BoxStyle.COLOR_FLAG)) this.setColor(changed.getColor());
		if(changed.isFlagMask(com.wiris.util.graphics.BoxStyle.FONT_FAMILY_FLAG)) this.setFontFamily(changed.getFontFamily());
		var classes = new Array();
		this.textDimensionsSuffix = "";
		if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.ITALIC_FLAG)) {
			if(style.isFlag(com.wiris.util.graphics.BoxStyle.ITALIC_FLAG)) {
				classes.push("wrs_italic");
				this.textDimensionsSuffix += ":italic";
			} else {
				classes.push("wrs_notItalic");
				this.textDimensionsSuffix += ":notItalic";
			}
		}
		if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.BOLD_FLAG)) {
			if(style.isFlag(com.wiris.util.graphics.BoxStyle.BOLD_FLAG)) {
				classes.push("wrs_bold");
				this.textDimensionsSuffix += ":bold";
			} else {
				classes.push("wrs_notBold");
				this.textDimensionsSuffix += ":notBold";
			}
		}
		this.styleClassWithoutFontFamily = classes.join(" ");
		if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.FONT_FAMILY_FLAG)) {
			var className = com.wiris.system.graphics.JsClientGraphicsContext.getStandardFontClassName(style.getFontFamily());
			if(className != null) classes.push(className);
			this.textDimensionsSuffix += ":" + style.getFontFamily();
		}
		this.styleClass = classes.join(" ");
	}
	,setMetricsCache: function(metricsCache) {
		if(metricsCache != null) this.metricsCache = metricsCache;
	}
	,getFontSize: function() {
		return this.fontSize;
	}
	,setFontSize: function(fontSize) {
		this.fontSize = fontSize;
	}
	,setFontFamily: function(fontFamily) {
		this.fontFamily = fontFamily;
	}
	,setColor: function(color) {
		this.rgbColor = com.wiris.system.graphics.JsClientGraphicsContext.colorToRgb(color);
		this.color = color;
	}
	,setBracketsSmaller: function(b) {
		this.smallBrackets = b;
	}
	,needsRepaint: function() {
		return this.repaintNeeded || !this.areMetricsWellCalculated();
	}
	,loadFonts: function() {
		var fontContainer = js.Lib.document.createElement("span");
		fontContainer.style.position = "absolute";
		fontContainer.style.top = com.wiris.system.graphics.JsClientGraphicsContext.HIDDEN_TOP;
		fontContainer.style.overflow = "hidden";
		fontContainer.style.width = "1px";
		fontContainer.className = "wrs_fontContainer";
		var i = com.wiris.system.graphics.JsClientGraphicsContext.fontClasses.iterator();
		while(i.hasNext()) {
			var className = i.next();
			if(className != "wrs_font_stix") {
				var font = js.Lib.document.createElement("span");
				font.className = className;
				font.appendChild(js.Lib.document.createTextNode(String.fromCharCode(61442)));
				fontContainer.appendChild(font);
			}
		}
		this.container.parentNode.insertBefore(fontContainer,this.container);
	}
	,isFontLoaded: function(fontName,text) {
		if(text == null) text = "";
		if(fontName == "stix" && text != null && text.length > 0) {
			var italic = this.style.isFlag(com.wiris.util.graphics.BoxStyle.ITALIC_FLAG);
			var sample = null;
			var unicode = com.wiris.system.Utf8.charCodeAt(text,0);
			var i = HxOverrides.iter(com.wiris.system.graphics.JsClientGraphicsContext.STIX_SETS);
			while(i.hasNext()) {
				var set = i.next();
				if(this.unicodeIsContained(unicode,italic,set)) {
					sample = this.generateUnicodeSample(set);
					break;
				}
			}
			if(sample != null) {
				var stixTextWidth = this.getTextDimensions(fontName,sample,false,false)[0];
				var arialTextWidth = this.getTextDimensions("Arial",sample,false,false)[0];
				var stixXWidth = this.getTextDimensions(fontName,"x",false,false)[0];
				var arialXWidth = this.getTextDimensions("Arial","x",false,false)[0];
				return stixTextWidth != arialTextWidth && stixXWidth < 2 * arialXWidth;
			}
		} else if(fontName == "stix") return true;
		var loadMarkWidth = this.getTextDimensions(fontName,String.fromCharCode(61442),false,false)[0];
		var arialXWidth = this.getTextDimensions("Arial","x",false,false)[0];
		return loadMarkWidth > arialXWidth * 4;
	}
	,generateUnicodeSample: function(set) {
		var sample = "";
		var i = HxOverrides.iter(js.Boot.__cast(set[1] , Array));
		while(sample.length < com.wiris.system.graphics.JsClientGraphicsContext.STIX_SAMPLE_SIZE && i.hasNext()) {
			var parts = i.next().split("-");
			if(parts.length == 1) {
				var charCode = Std.parseInt("0x" + parts[0]);
				if(charCode != 61442) sample += com.wiris.system.Utf8.uchr(charCode);
			} else {
				var from = Std.parseInt("0x" + parts[0]);
				var to = Std.parseInt("0x" + parts[1]);
				while(from <= to && sample.length < com.wiris.system.graphics.JsClientGraphicsContext.STIX_SAMPLE_SIZE) {
					if(from != 61442) sample += com.wiris.system.Utf8.uchr(from);
					++from;
				}
			}
		}
		return sample;
	}
	,unicodeIsContained: function(unicode,italic,set) {
		if(italic != set[0]) return false;
		var i = HxOverrides.iter(js.Boot.__cast(set[1] , Array));
		while(i.hasNext()) {
			var parts = i.next().split("-");
			if(parts.length == 1) {
				if(unicode == Std.parseInt("0x" + parts[0])) return true;
			} else if(unicode >= Std.parseInt("0x" + parts[0]) && unicode <= Std.parseInt("0x" + parts[1])) return true;
		}
		return false;
	}
	,getTextDimensions: function(fontName,text,drawing,checkIfFontIsLoaded) {
		var cacheKey = text + ":" + fontName + ":" + this.style.getP() * this.style.getZoom() + ":" + this.style.getFontSize() + this.textDimensionsSuffix;
		if(fontName == "brackets") cacheKey += ":b";
		if(fontName == "brack_sm") cacheKey += ":s";
		if(drawing) cacheKey += ":d";
		var cachedDimensions = this.metricsCache.get(cacheKey);
		if(cachedDimensions != null) return cachedDimensions;
		var insertInCache = true;
		var needsFont = false;
		var fontClassName = this.getCustomFontClassName(fontName);
		if(fontClassName != null) needsFont = true; else fontClassName = com.wiris.system.graphics.JsClientGraphicsContext.getStandardFontClassName(fontName);
		if(!checkIfFontIsLoaded) insertInCache = false; else if(needsFont && !this.isFontLoaded(fontName,text)) {
			this.repaintNeeded = true;
			insertInCache = false;
		}
		this.metricsElement.className = "";
		while(this.metricsElement.childNodes.length > 1) this.metricsElement.removeChild(this.metricsElement.firstChild);
		this.metricsElement.insertBefore(js.Lib.document.createTextNode(text),this.metricsElement.firstChild);
		this.metricsElement.className = this.styleClassWithoutFontFamily + " " + fontClassName;
		this.metricsElement.style.fontSize = this.fontSize * (this.style.getP() * this.style.getZoom()) / 100 + "px";
		var baseline = this.metricsElement.lastChild.offsetTop;
		if(this.metricsElement.lastChild.offsetHeight > 0) {
			insertInCache = false;
			this.repaintNeeded = true;
			baseline = this.metricsElement.lastChild.offsetHeight;
		}
		var drawingCacheKey = drawing?cacheKey:cacheKey + ":d";
		var noDrawingCacheKey = !drawing?cacheKey:HxOverrides.substr(cacheKey,0,cacheKey.length - 2);
		var dimensions = [this.metricsElement.offsetWidth,this.metricsElement.offsetHeight,baseline];
		var standardDimensions;
		if(needsFont) {
			standardDimensions = [dimensions[0],dimensions[1],dimensions[2]];
			var fontSizePx = com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.metricsElement,"font-size");
			if(fontSizePx == null) {
				this.repaintNeeded = true;
				insertInCache = false;
			} else {
				var fontSize = Std.parseInt(HxOverrides.substr(fontSizePx,0,fontSizePx.length - 2));
				if(com.wiris.system.JsDOMUtils.hasClass(this.metricsElement,"wrs_specialSmallChar")) {
					standardDimensions[1] = Math.round(fontSize * 340.0 / 1024.0);
					standardDimensions[2] = standardDimensions[1];
				} else if(com.wiris.system.JsDOMUtils.hasClass(this.metricsElement,"wrs_specialChar")) {
					standardDimensions[1] = Math.round(fontSize * 896.0 / 1024.0);
					standardDimensions[2] = standardDimensions[1];
				}
			}
		} else standardDimensions = this.standardHeightAndBaseline(fontName,text,dimensions);
		if(insertInCache) {
			this.metricsCache.set(drawingCacheKey,dimensions);
			this.metricsCache.set(noDrawingCacheKey,standardDimensions);
		} else {
		}
		if(drawing) return dimensions;
		return standardDimensions;
	}
	,getStyle: function() {
		return this.style;
	}
	,getMetricsCache: function() {
		if(!this.areMetricsWellCalculated()) return null;
		return this.metricsCache;
	}
	,getColor: function() {
		return this.color;
	}
	,endTranslate: function(x,y,width,height) {
		if(this.renderActions != null) this.renderActions.push(com.wiris.system.graphics.RenderAction.TranslationEnd(x,y));
		this.x -= x;
		this.y -= y;
	}
	,drawVerticalLineWithType: function(id,x,y,height,type) {
		x += this.x;
		y += this.y;
		var lineWidth = this.getLineWidth();
		if(this.renderActions != null) this.renderActions.push(com.wiris.system.graphics.RenderAction.VerticalLine(x,y,height,lineWidth,type));
		var halfLineWidth = lineWidth / 2 | 0;
		var line = js.Lib.document.createElement("span");
		if(type == "dotted") {
			line.style.borderLeftStyle = "dotted";
			line.style.borderLeftColor = this.rgbColor;
			line.style.borderLeftWidth = lineWidth + "px";
		} else if(type == "dashed") {
			line.style.borderLeftStyle = "dashed";
			line.style.borderLeftColor = this.rgbColor;
			line.style.borderLeftWidth = lineWidth + "px";
		} else {
			line.style.background = this.rgbColor;
			line.style.width = lineWidth + "px";
		}
		line.style.position = "absolute";
		line.style.zIndex = 2;
		line.style.top = y - halfLineWidth + "px";
		line.style.left = x - halfLineWidth + "px";
		line.style.height = com.wiris.system.JsDOMUtils.parseDimension(height + 2 * halfLineWidth) + "px";
		line.innerHTML = "&nbsp;";
		this.container.appendChild(line);
	}
	,drawVerticalLine: function(id,x,y,height) {
		x += this.x;
		y += this.y;
		var lineWidth = this.getLineWidth();
		var halfLineWidth = lineWidth / 2 | 0;
		if(this.renderActions != null) this.renderActions.push(com.wiris.system.graphics.RenderAction.VerticalLine(x,y,height,lineWidth,null));
		var line = js.Lib.document.createElement("span");
		line.style.position = "absolute";
		line.style.zIndex = 2;
		line.style.borderLeft = lineWidth + "px solid " + this.rgbColor;
		line.style.top = y - halfLineWidth + "px";
		line.style.left = x - halfLineWidth + "px";
		line.style.width = "0";
		line.style.height = com.wiris.system.JsDOMUtils.parseDimension(height + 2 * halfLineWidth) + "px";
		line.innerHTML = "&nbsp;";
		this.container.appendChild(line);
	}
	,drawTextSub: function(text,x,y,baseline,fontName) {
		var textContainer = js.Lib.document.createElement("span");
		this.setComponentColor(textContainer);
		var fontClassName = this.getCustomFontClassName(fontName);
		if(fontClassName != null) com.wiris.system.JsDOMUtils.addClass(textContainer,fontClassName);
		com.wiris.system.JsDOMUtils.addClass(textContainer,this.styleClass);
		var dimensions = this.getTextDimensions(fontName,text,true,true);
		var finalY = y + baseline - dimensions[2];
		textContainer.style.position = "absolute";
		textContainer.style.left = x + "px";
		textContainer.style.top = finalY + "px";
		textContainer.style.zIndex = 2;
		textContainer.style.fontSize = this.fontSize * (this.style.getP() * this.style.getZoom()) / 100 + "px";
		if(this.renderActions != null) this.renderActions.push(com.wiris.system.graphics.RenderAction.Text(x,finalY,baseline,text,fontName));
		textContainer.appendChild(js.Lib.document.createTextNode(text));
		this.container.appendChild(textContainer);
		return dimensions[0];
	}
	,drawText: function(id,fontName,text,x,y,baseline) {
		if(fontName == null) fontName = this.fontFamily;
		x += this.x;
		y += this.y;
		if(com.wiris.util.xml.WCharacterBase.isLTRNumber(text)) {
			var charOffset = 0;
			var _g1 = 0, _g = text.length;
			while(_g1 < _g) {
				var i = _g1++;
				var charWidth = this.drawTextSub(text.charAt(i),x + charOffset,y,baseline,fontName);
				charOffset += charWidth;
			}
		} else this.drawTextSub(text,x,y,baseline,fontName);
	}
	,drawPolylineVML: function(x0,y0,px,py,length) {
		px = px.slice();
		py = py.slice();
		var i = 0;
		while(i < length) {
			px[i] += x0;
			py[i] += y0;
			++i;
		}
		var minX = px[0];
		var minY = py[0];
		var maxX = px[0];
		var maxY = py[0];
		i = 1;
		while(i < length) {
			if(px[i] < minX) minX = px[i];
			if(py[i] < minY) minY = py[i];
			if(px[i] > maxX) maxX = px[i];
			if(py[i] > maxY) maxY = py[i];
			++i;
		}
		i = 0;
		while(i < length) {
			px[i] -= minX;
			py[i] -= minY;
			++i;
		}
		var flooredHalfLineWidth = this.getLineWidth() / 2 | 0;
		var points = "";
		i = 0;
		while(i < length) {
			points += px[i] + "," + py[i] + " ";
			++i;
		}
		this.drawVML(this.x + minX + 1,this.y + minY + 1,maxX - minX + this.getLineWidth(),maxY - minY + this.getLineWidth(),"<polyline xmlns=\"urn:schemas-microsoft-com:vml\" " + "style=\"behavior: url(#default#VML);display:inline-block;margin:0;padding:0;position:absolute;\" " + "filled=\"f\" " + "strokecolor=\"" + this.rgbColor + "\" " + "points=\"" + points + "\" strokeweight=\"" + this.getLineWidth() + "px\"></polyline>");
	}
	,drawPolylineSVG: function(x0,y0,px,py,length) {
		px = px.slice();
		py = py.slice();
		var i = 0;
		while(i < length) {
			px[i] += x0;
			py[i] += y0;
			++i;
		}
		var minX = px[0];
		var minY = py[0];
		var maxX = px[0];
		var maxY = py[0];
		i = 1;
		while(i < length) {
			if(px[i] < minX) minX = px[i];
			if(py[i] < minY) minY = py[i];
			if(px[i] > maxX) maxX = px[i];
			if(py[i] > maxY) maxY = py[i];
			++i;
		}
		i = 0;
		while(i < length) {
			px[i] -= minX;
			py[i] -= minY;
			++i;
		}
		var points = "";
		i = 0;
		while(i < length) {
			points += px[i] + "," + py[i] + " ";
			++i;
		}
		this.drawSVG(this.x + minX + 0.5,this.y + minY + 0.5,maxX - minX + this.getLineWidth(),maxY - minY + this.getLineWidth(),"<polyline points=\"" + points + "\" style=\"stroke:" + this.rgbColor + ";stroke-width:" + this.getLineWidth() + ";\" fill=\"none\"/>");
	}
	,drawLineVML: function(x1,y1,x2,y2) {
		var minX;
		var minY;
		var maxX;
		var maxY;
		if(x1 < x2) {
			minX = x1;
			maxX = x2;
		} else {
			minX = x2;
			maxX = x1;
		}
		if(y1 < y2) {
			minY = y1;
			maxY = y2;
		} else {
			minY = y2;
			maxY = y1;
		}
		x1 = x1 - minX;
		x2 = x2 - minX;
		y1 = y1 - minY;
		y2 = y2 - minY;
		var flooredHalfLineWidth = this.getLineWidth() / 2 | 0;
		this.drawVML(this.x + minX,this.y + minY,maxX - minX + this.getLineWidth(),maxY - minY + this.getLineWidth(),"<line xmlns=\"urn:schemas-microsoft-com:vml\" " + "style=\"behavior: url(#default#VML);display:inline-block;margin:0;padding:0;position:absolute;\" " + "strokecolor=\"" + this.rgbColor + "\" " + "from=\"" + x1 + "," + y1 + "\" to=\"" + x2 + "," + y2 + "\" strokeweight=\"" + this.getLineWidth() + "px\"></line>");
	}
	,drawLineSVG: function(x1,y1,x2,y2) {
		var minX;
		var minY;
		var maxX;
		var maxY;
		if(x1 < x2) {
			minX = x1;
			maxX = x2;
		} else {
			minX = x2;
			maxX = x1;
		}
		if(y1 < y2) {
			minY = y1;
			maxY = y2;
		} else {
			minY = y2;
			maxY = y1;
		}
		x1 = x1 - minX;
		x2 = x2 - minX;
		y1 = y1 - minY;
		y2 = y2 - minY;
		this.drawSVG(this.x + minX,this.y + minY,maxX - minX + this.getLineWidth(),maxY - minY + this.getLineWidth(),"<line x1=\"" + x1 + "\" y1=\"" + y1 + "\" x2=\"" + x2 + "\" y2=\"" + y2 + "\" style=\"stroke:" + this.rgbColor + ";stroke-width:" + this.getLineWidth() + ";\"/>");
	}
	,drawPolyline: function(x0,y0,px,py,length) {
		if(this.renderActions != null) this.renderActions.push(com.wiris.system.graphics.RenderAction.Polyline(x0,y0,px,py));
		if(!com.wiris.system.JsDOMUtils.browser.isIE() || Std.parseFloat(com.wiris.system.JsDOMUtils.browser.getVersion()) >= 9) this.drawPolylineSVG(x0,y0,px,py,length); else this.drawPolylineVML(x0,y0,px,py,length);
	}
	,drawLine: function(x1,y1,x2,y2) {
		if(!com.wiris.system.JsDOMUtils.browser.isIE() || Std.parseFloat(com.wiris.system.JsDOMUtils.browser.getVersion()) >= 9) this.drawLineSVG(x1,y1,x2,y2); else this.drawLineVML(x1,y1,x2,y2);
	}
	,drawHorizontalLineWithType: function(id,x,y,width,type) {
		x += this.x;
		y += this.y;
		var lineWidth = this.getLineWidth();
		if(this.renderActions != null) this.renderActions.push(com.wiris.system.graphics.RenderAction.HorizontalLine(x,y,width,lineWidth,type));
		var halfLineWidth = lineWidth / 2 | 0;
		var line = js.Lib.document.createElement("span");
		if(type == "dotted") {
			line.style.borderTopStyle = "dotted";
			line.style.borderTopColor = this.rgbColor;
			line.style.borderTopWidth = lineWidth + "px";
		} else if(type == "dashed") {
			line.style.borderTopStyle = "dashed";
			line.style.borderTopColor = this.rgbColor;
			line.style.borderTopWidth = lineWidth + "px";
		} else {
			line.style.background = this.rgbColor;
			line.style.height = lineWidth + "px";
		}
		line.style.position = "absolute";
		line.style.zIndex = 2;
		line.style.top = y - halfLineWidth + "px";
		line.style.left = x - halfLineWidth + "px";
		line.style.width = com.wiris.system.JsDOMUtils.parseDimension(width + 2 * halfLineWidth) + "px";
		line.innerHTML = "&nbsp;";
		this.container.appendChild(line);
	}
	,drawHorizontalLine: function(id,x,y,width) {
		x += this.x;
		y += this.y;
		var lineWidth = this.getLineWidth();
		if(this.renderActions != null) this.renderActions.push(com.wiris.system.graphics.RenderAction.HorizontalLine(x,y,width,lineWidth,null));
		var halfLineWidth = lineWidth / 2 | 0;
		var line = js.Lib.document.createElement("span");
		line.style.position = "absolute";
		line.style.zIndex = 2;
		line.style.borderTop = lineWidth + "px solid " + this.rgbColor;
		line.style.top = y - halfLineWidth + "px";
		line.style.left = x - halfLineWidth + "px";
		line.style.width = com.wiris.system.JsDOMUtils.parseDimension(width + 2 * halfLineWidth) + "px";
		line.style.height = "0";
		line.innerHTML = "&nbsp;";
		this.container.appendChild(line);
	}
	,beginTranslate: function(x,y,width,height) {
		if(this.firstTranslate) {
			this.rtl = this.style.isFlag(com.wiris.util.graphics.BoxStyle.RTL_FLAG);
			this.firstTranslate = false;
		}
		if(this.renderActions != null) this.renderActions.push(com.wiris.system.graphics.RenderAction.TranslationBegin(x,y));
		this.x += x;
		this.y += y;
	}
	,areMetricsWellCalculated: function() {
		return this.isFontLoaded("brackets") && com.wiris.system.JsDOMUtils.isDescendant(js.Lib.document.body,this.container);
	}
	,getRecordedRenderActions: function() {
		return this.renderActions;
	}
	,rtl: null
	,firstTranslate: null
	,y: null
	,x: null
	,textDimensionsSuffix: null
	,styleClassWithoutFontFamily: null
	,styleClass: null
	,style: null
	,smallBrackets: null
	,rgbColor: null
	,resourceLoader: null
	,repaintNeeded: null
	,originalStyle: null
	,metricsElement: null
	,metricsCache: null
	,fontSize: null
	,fontFamily: null
	,container: null
	,color: null
	,renderActions: null
	,__class__: com.wiris.system.graphics.JsClientGraphicsContext
}
com.wiris.util.graphics.ClientGraphicsContext2D = $hxClasses["com.wiris.util.graphics.ClientGraphicsContext2D"] = function() { }
com.wiris.util.graphics.ClientGraphicsContext2D.__name__ = ["com","wiris","util","graphics","ClientGraphicsContext2D"];
com.wiris.util.graphics.ClientGraphicsContext2D.__interfaces__ = [com.wiris.util.graphics.ClientGraphicsContext];
com.wiris.util.graphics.ClientGraphicsContext2D.prototype = {
	drawImage: null
	,setAntialiasingEnabled: null
	,finish: null
	,fillRegion: null
	,addPath: null
	,drawPolyline2D: null
	,fillPolygon2D: null
	,drawEllipse2D: null
	,fillEllipse2D: null
	,drawArc2D: null
	,fillArc2D: null
	,drawLine2D: null
	,clearLayer: null
	,setLayer: null
	,getNumberLayers: null
	,__class__: com.wiris.util.graphics.ClientGraphicsContext2D
}
com.wiris.system.graphics.JsClientGraphicsContext2D = $hxClasses["com.wiris.system.graphics.JsClientGraphicsContext2D"] = function(parent,resourceLoader) {
	this.parent = parent;
	var createLayers = parent.firstChild == null;
	if(createLayers) parent.appendChild(js.Lib.document.createElement("div"));
	com.wiris.system.graphics.JsClientGraphicsContext.call(this,parent.firstChild,resourceLoader,true);
	this.parent.firstChild.firstChild.firstChild.style.top = "-999px";
	this.layers = new Array();
	var i = 0;
	while(i < com.wiris.system.graphics.JsClientGraphicsContext2D.LAYERS) {
		var layer;
		if(createLayers) {
			layer = js.Lib.document.createElement("canvas");
			parent.appendChild(layer);
		} else layer = parent.childNodes[i + 1];
		this.layers.push(layer);
		++i;
	}
	this.ratio = 1;
	this.updateSize();
	this.italic = false;
	this.bold = false;
	this.antialize = true;
	this.pickLayer(0);
	this.setCurrentContextStyle();
	this.X = 0.5;
	this.Y = 0.5;
};
com.wiris.system.graphics.JsClientGraphicsContext2D.__name__ = ["com","wiris","system","graphics","JsClientGraphicsContext2D"];
com.wiris.system.graphics.JsClientGraphicsContext2D.__interfaces__ = [com.wiris.util.graphics.ClientGraphicsContext2D];
com.wiris.system.graphics.JsClientGraphicsContext2D.__super__ = com.wiris.system.graphics.JsClientGraphicsContext;
com.wiris.system.graphics.JsClientGraphicsContext2D.prototype = $extend(com.wiris.system.graphics.JsClientGraphicsContext.prototype,{
	getMetrics: function(fontName,text) {
		if(HxOverrides.cca(text,0) == 61442) return com.wiris.system.graphics.JsClientGraphicsContext.prototype.getMetrics.call(this,fontName,text);
		if(fontName == null) fontName = this.fontFamily;
		var previousFont = this.currentContext.font;
		this.currentContext.font = (this.italic?"italic":"normal") + " " + (this.bold?"bold":"normal") + " " + this.fontSize * (this.style.getP() * this.style.getZoom()) / 100 + "px" + " " + this.getActualFontName(fontName);
		var width = Math.round(this.currentContext.measureText(text).width);
		this.currentContext.font = previousFont;
		var v = com.wiris.system.graphics.JsClientGraphicsContext.prototype.getMetrics.call(this,fontName,text);
		return [width,v[1],v[2]];
	}
	,drawText: function(id,fontName,t,x,y,b) {
		if(!this.antialize) throw "Method drawText not suported without antialising";
		this.currentContext.font = (this.italic?"italic":"normal") + " " + (this.bold?"bold":"normal") + " " + this.fontSize * (this.style.getP() * this.style.getZoom()) / 100 + "px" + " " + this.getActualFontName(fontName);
		this.currentContext.fillText(t,this.X + x,this.Y + y + b);
	}
	,fillRect: function(x,y,width,height) {
		if(!this.antialize) throw "Method fillRect not suported without antialising";
		this.currentContext.fillRect(x,y,width,height);
	}
	,drawArc: function(x,y,width,height,startAngle,arcAngle) {
		this.drawArc2D(x,y,width,height,startAngle,arcAngle);
	}
	,drawPolyline: function(x0,y0,px,py,length) {
		var xs = new Array();
		var ys = new Array();
		var i = 0;
		while(i < length) {
			xs.push(px[i]);
			ys.push(py[i]);
			++i;
		}
		this.beginTranslate(x0,y0,0,0);
		this.drawPolyline2D(xs,ys,length);
		this.endTranslate(x0,y0,0,0);
	}
	,getActualFontName: function(fontName) {
		if(com.wiris.util.type.Arrays.contains(com.wiris.system.graphics.JsClientGraphicsContext2D.CUSTOM_FONT_NAMES,fontName)) return "Conv_" + fontName;
		if(fontName == "round_brackets1854") return "Conv_roundBrackets1854";
		if(fontName == "round_brackets2254") return "Conv_roundBrackets2254";
		if(fontName == "round_brackets2654") return "Conv_roundBrackets2654";
		if(fontName == "round_brackets3054") return "Conv_roundBrackets3054";
		if(fontName == "round_brackets3454") return "Conv_roundBrackets3454";
		return fontName;
	}
	,setCurrentContextStyle: function() {
		this.currentContext.beginPath();
		this.currentContext.lineWidth = this.getLineWidth();
		this.currentContext.strokeStyle = com.wiris.util.graphics.Color.fromIntARGB(this.color).toCSSHex();
		this.currentContext.fillStyle = com.wiris.util.graphics.Color.fromIntARGB(this.color).toCSSHex();
		this.currentContext.lineJoin = "round";
		this.currentContext.lineCap = "round";
		this.currentContext.textBaseline = "alphabetic";
		var dashedType = this.getLineStyle();
		if(dashedType == 0) this.currentContext.setLineDash([]); else if(dashedType == 1) this.currentContext.setLineDash([5,15]); else if(dashedType == 2) this.currentContext.setLineDash([1,15]); else if(dashedType == 3) this.currentContext.setLineDash([5,15,5]); else this.currentContext.setLineDash([]);
		var actualFont = this.getActualFontName(this.fontFamily);
		this.currentContext.font = (this.italic?"italic":"normal") + " " + (this.bold?"bold":"normal") + " " + this.fontSize * (this.style.getP() * this.style.getZoom()) / 100 + "px" + " " + actualFont;
	}
	,setStyle: function(s,c) {
		com.wiris.system.graphics.JsClientGraphicsContext.prototype.setStyle.call(this,s,c);
		this.currentContext.stroke();
		if(c.isFlagMask(com.wiris.util.graphics.BoxStyle.ITALIC_FLAG)) this.italic = c.isFlag(com.wiris.util.graphics.BoxStyle.ITALIC_FLAG);
		if(c.isFlagMask(com.wiris.util.graphics.BoxStyle.BOLD_FLAG)) this.bold = c.isFlag(com.wiris.util.graphics.BoxStyle.BOLD_FLAG);
		if(c.isFlagMask(com.wiris.util.graphics.BoxStyle.COLOR_FLAG)) this.setColor(c.getColorWithAlpha());
		this.setCurrentContextStyle();
	}
	,endTranslate: function(x,y,width,height) {
		this.X -= x;
		this.Y -= y;
	}
	,drawLine: function(x1,y1,x2,y2) {
		this.drawLine2D(x1,y1,x2,y2);
	}
	,drawVerticalLineWithType: function(id,x,y,h,type) {
		this.drawVerticalLine(id,x,y,h);
	}
	,drawHorizontalLineWithType: function(id,x,y,w,type) {
		this.drawHorizontalLine(id,x,y,w);
	}
	,drawVerticalLine: function(id,x,y,h) {
		this.drawLine2D(x,y,x,y + h);
	}
	,drawHorizontalLine: function(id,x,y,w) {
		this.drawLine2D(x,y,x + w,y);
	}
	,beginTranslate: function(x,y,width,height) {
		this.X += x;
		this.Y += y;
	}
	,drawImage: function(topLeft,topRight,ratio,base64) {
		var _g = this;
		if(base64 == null) return;
		this.currentContext.save();
		var scale = 1.0;
		var dx = topRight[0] - topLeft[0];
		var dy = topRight[1] - topLeft[1];
		var width = Math.abs(dx);
		var height = width * ratio;
		var distanceX = Math.sqrt(dx * dx + dy * dy);
		var distanceY = distanceX * ratio;
		var angle = Math.atan(dy / dx);
		if(dx < 0) angle += Math.PI;
		this.currentContext.translate(topLeft[0],topLeft[1]);
		this.currentContext.rotate(angle);
		this.currentContext.translate(-topLeft[0],-topLeft[1]);
		if(com.wiris.system.graphics.JsClientGraphicsContext2D.imageElements.get(base64) != null) this.currentContext.drawImage(com.wiris.system.graphics.JsClientGraphicsContext2D.imageElements.get(base64),topLeft[0],topLeft[1],distanceX * scale,distanceY * scale); else {
			var image = js.Lib.document.createElement("img");
			image.src = base64;
			image.onload = function(e) {
				_g.currentContext.drawImage(image,topLeft[0],topLeft[1],distanceX * scale,distanceY * scale);
				com.wiris.system.graphics.JsClientGraphicsContext2D.imageElements.set(base64,image);
			};
		}
		this.currentContext.restore();
	}
	,drawPolyline2D: function(x,y,n) {
		if(!this.antialize) throw "Method drawPolyline2D not suported without antialising";
		this.currentContext.moveTo(this.X + x[0],this.Y + y[0]);
		var i = 1;
		while(i < n) {
			this.currentContext.lineTo(this.X + x[i],this.Y + y[i]);
			++i;
		}
	}
	,fillRegion: function() {
		this.currentContext.fill();
	}
	,addPath: function(x,y,n) {
		this.drawPolyline2D(x,y,n);
	}
	,fillPolygon2D: function(x,y,n) {
		if(!this.antialize) throw "Method fillPolygon2D not suported without antialising";
		this.currentContext.moveTo(this.X + x[0],this.Y + y[0]);
		var i = 1;
		while(i < n) {
			this.currentContext.lineTo(this.X + x[i],this.Y + y[i]);
			++i;
		}
		this.currentContext.fill();
	}
	,drawEllipse2D: function(x,y,width,height) {
		this.drawArc2D(x,y,width,height,0,2 * Math.PI);
	}
	,fillEllipse2D: function(x,y,width,height) {
		this.fillArc2D(x,y,width,height,0,2 * Math.PI);
	}
	,drawArc2D: function(x,y,width,height,startAngle,arcAngle) {
		if(!this.antialize) throw "Method drawArc2D not suported without antialising";
		var rx = width / 2;
		var ry = height / 2;
		x += this.X;
		y += this.Y;
		this.currentContext.save();
		this.currentContext.translate(x,y);
		this.currentContext.scale(rx,ry);
		this.currentContext.arc(1,1,1,2 * Math.PI - startAngle,2 * Math.PI - startAngle - arcAngle,true);
		this.currentContext.restore();
	}
	,fillArc2D: function(x,y,width,height,startAngle,arcAngle) {
		if(!this.antialize) throw "Method fillArc2D not suported without antialising";
		this.currentContext.stroke();
		this.setCurrentContextStyle();
		this.currentContext.fillStyle = this.currentContext.strokeStyle;
		this.drawArc2D(x,y,width,height,startAngle,arcAngle);
		this.currentContext.fill();
		this.currentContext.stroke();
		this.setCurrentContextStyle();
	}
	,putPixel: function(x,y) {
		if(this.isInViewport(x,y)) {
			var layer = this.layers[this.currentLayer];
			if(this.imageData == null) this.imageData = this.currentContext.createImageData(layer.width,layer.height);
			var pixelIndex = (y * layer.width + x) * 4;
			this.imageData.data[pixelIndex] = this.rgba[0];
			this.imageData.data[pixelIndex + 1] = this.rgba[1];
			this.imageData.data[pixelIndex + 2] = this.rgba[2];
			this.imageData.data[pixelIndex + 3] = this.rgba[3];
		}
	}
	,isInViewport: function(x,y) {
		var layer = this.layers[this.currentLayer];
		if(0 <= x && x <= layer.width && 0 <= y && y <= layer.height) return true;
		return false;
	}
	,drawLine2DWithoutAntialize: function(x1,y1,x2,y2) {
		var lineWidth = this.getLineWidth();
		x1 = this.ratio * x1;
		x2 = this.ratio * x2;
		y1 = this.ratio * y1;
		y2 = this.ratio * y2;
		this.rgba = com.wiris.util.graphics.Color.fromInt(this.color).getARGB();
		if(y1 == y2) {
			var x0 = Math.round(Math.min(x1,x2));
			var xf = Math.round(Math.max(x1,x2));
			var _g = 0;
			while(_g < lineWidth) {
				var i = _g++;
				var x = x0;
				if(i % 2 == 0) while(x <= xf) {
					this.putPixel(x,Math.round(y1 + Math.floor(i / 2)));
					x++;
				} else while(x <= xf) {
					this.putPixel(x,Math.round(y1 - Math.floor(i / 2)));
					x++;
				}
			}
		} else if(x1 == x2) {
			var y0 = Math.round(Math.min(y1,y2));
			var yf = Math.round(Math.max(y1,y2));
			var _g = 0;
			while(_g < lineWidth) {
				var i = _g++;
				var y = y0;
				if(i % 2 == 0) while(y <= yf) {
					this.putPixel(Math.round(x1 + Math.floor(i / 2)),y);
					y++;
				} else while(y <= yf) {
					this.putPixel(Math.round(x1 - Math.floor(i / 2)),y);
					y++;
				}
			}
		} else {
			var x0 = Math.round(Math.min(x1,x2));
			var xf = Math.round(Math.max(x1,x2));
			var y0 = y2;
			var yf = y1;
			if(x0 == Math.round(x1)) {
				y0 = y1;
				yf = y2;
			}
			if(xf == (this.layers[this.currentLayer].width && yf == 0)) {
				var _g = 0;
				while(_g < lineWidth) {
					var i = _g++;
					if(i % 2 == 0) {
						var _g1 = x0 + Math.floor(i / 2);
						while(_g1 < xf) {
							var x = _g1++;
							var y = (yf - y0) * (x - x0) / (xf - x0) + y0;
							this.putPixel(x,Math.round(y - Math.floor(i / 2)));
						}
					} else {
						var _g2 = x0, _g1 = xf - Math.floor(i / 2);
						while(_g2 < _g1) {
							var x = _g2++;
							var y = (yf - y0) * (x - x0) / (xf - x0) + y0;
							this.putPixel(x,Math.round(y + Math.floor(i / 2)));
						}
					}
				}
			} else if(xf == (this.layers[this.currentLayer].width && yf == this.layers[this.currentLayer].height)) {
				var _g = 0;
				while(_g < lineWidth) {
					var i = _g++;
					if(i % 2 == 0) {
						var _g2 = x0, _g1 = xf - Math.floor(i / 2);
						while(_g2 < _g1) {
							var x = _g2++;
							var y = (yf - y0) * (x - x0) / (xf - x0) + y0;
							this.putPixel(x,Math.round(y - Math.floor(i / 2)));
						}
					} else {
						var _g1 = x0 + Math.floor(i / 2);
						while(_g1 < xf) {
							var x = _g1++;
							var y = (yf - y0) * (x - x0) / (xf - x0) + y0;
							this.putPixel(x,Math.round(y + Math.floor(i / 2)));
						}
					}
				}
			} else if(xf == this.layers[this.currentLayer].width) {
				var _g = 0;
				while(_g < lineWidth) {
					var i = _g++;
					if(i % 2 == 0) {
						var _g1 = x0;
						while(_g1 < xf) {
							var x = _g1++;
							var y = (yf - y0) * (x - x0) / (xf - x0) + y0;
							this.putPixel(x,Math.round(y + Math.floor(i / 2)));
						}
					} else {
						var _g1 = x0;
						while(_g1 < xf) {
							var x = _g1++;
							var y = (yf - y0) * (x - x0) / (xf - x0) + y0;
							this.putPixel(x,Math.round(y - Math.floor(i / 2)));
						}
					}
				}
			} else {
				var _g = 0;
				while(_g < lineWidth) {
					var i = _g++;
					if(i % 2 == 0) {
						var _g1 = x0;
						while(_g1 < xf) {
							var x = _g1++;
							var y = (yf - y0) * (x - x0) / (xf - x0) + y0;
							this.putPixel(Math.round(x + Math.floor(i / 2)),Math.round(y));
						}
					} else {
						var _g1 = x0;
						while(_g1 < xf) {
							var x = _g1++;
							var y = (yf - y0) * (x - x0) / (xf - x0) + y0;
							this.putPixel(Math.round(x - Math.floor(i / 2)),Math.round(y));
						}
					}
				}
			}
		}
	}
	,drawLine2D: function(x1,y1,x2,y2) {
		if(this.antialize) {
			this.currentContext.moveTo(this.X + x1,this.Y + y1);
			this.currentContext.lineTo(this.X + x2,this.Y + y2);
		} else this.drawLine2DWithoutAntialize(x1,y1,x2,y2);
	}
	,setAntialiasingEnabled: function(enabled) {
		if(enabled != this.antialize) {
			if(!enabled) {
				var layer = this.layers[this.currentLayer];
				this.imageData = this.currentContext.getImageData(0,0,layer.width,layer.height);
			} else if(this.imageData != null) {
				this.currentContext.putImageData(this.imageData,0,0);
				this.imageData = null;
			}
			this.antialize = enabled;
		}
	}
	,clearLayer: function() {
		var width;
		var height;
		if(this.parent.offsetHeight > 0 && this.parent.offsetWidth > 0) {
			width = this.parent.offsetWidth;
			height = this.parent.offsetHeight;
		} else {
			var layer = this.layers[this.currentLayer];
			width = layer.width;
			height = layer.height;
		}
		this.currentContext.clearRect(0,0,width,height);
	}
	,setLayer: function(i) {
		this.finish();
		this.pickLayer(i);
		this.setCurrentContextStyle();
	}
	,getNumberLayers: function() {
		return this.layers.length;
	}
	,finish: function() {
		if(this.antialize) this.currentContext.stroke(); else this.setAntialiasingEnabled(true);
	}
	,updateSize: function() {
		var originalRatio = this.ratio;
		this.ratio = com.wiris.system.JsDOMUtils.getPixelRatio();
		var layerWidth = this.parent.offsetWidth * this.ratio;
		var layerHeight = this.parent.offsetHeight * this.ratio;
		var i;
		var _g1 = 0, _g = this.layers.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			var layer = this.layers[i1];
			if(layer.width != layerWidth || layer.height != layerHeight) {
				if(layerWidth > 0 && layerHeight > 0) {
					var temp = js.Lib.document.createElement("canvas");
					temp.width = layerWidth;
					temp.height = layerHeight;
					temp.getContext("2d").scale(this.ratio / originalRatio,this.ratio / originalRatio);
					temp.getContext("2d").drawImage(layer,0,0);
					layer.width = layerWidth;
					layer.height = layerHeight;
					layer.style.width = this.parent.offsetWidth + "px";
					layer.style.height = this.parent.offsetHeight + "px";
					layer.getContext("2d").scale(1,1);
					layer.getContext("2d").drawImage(temp,0,0);
					layer.getContext("2d").scale(this.ratio,this.ratio);
				}
			}
		}
	}
	,pickLayer: function(i) {
		this.currentLayer = i;
		this.currentContext = this.layers[this.currentLayer].getContext("2d");
	}
	,rgba: null
	,imageData: null
	,antialize: null
	,parent: null
	,bold: null
	,italic: null
	,ratio: null
	,Y: null
	,X: null
	,currentContext: null
	,currentLayer: null
	,layers: null
	,__class__: com.wiris.system.graphics.JsClientGraphicsContext2D
});
com.wiris.system.graphics.RenderAction = $hxClasses["com.wiris.system.graphics.RenderAction"] = { __ename__ : ["com","wiris","system","graphics","RenderAction"], __constructs__ : ["TranslationBegin","TranslationEnd","Style","Line","VerticalLine","HorizontalLine","Polyline","Arc","Rectangle","Text"] }
com.wiris.system.graphics.RenderAction.TranslationBegin = function(dx,dy) { var $x = ["TranslationBegin",0,dx,dy]; $x.__enum__ = com.wiris.system.graphics.RenderAction; $x.toString = $estr; return $x; }
com.wiris.system.graphics.RenderAction.TranslationEnd = function(dx,dy) { var $x = ["TranslationEnd",1,dx,dy]; $x.__enum__ = com.wiris.system.graphics.RenderAction; $x.toString = $estr; return $x; }
com.wiris.system.graphics.RenderAction.Style = function(styles,changed) { var $x = ["Style",2,styles,changed]; $x.__enum__ = com.wiris.system.graphics.RenderAction; $x.toString = $estr; return $x; }
com.wiris.system.graphics.RenderAction.Line = function(x0,y0,x1,y1) { var $x = ["Line",3,x0,y0,x1,y1]; $x.__enum__ = com.wiris.system.graphics.RenderAction; $x.toString = $estr; return $x; }
com.wiris.system.graphics.RenderAction.VerticalLine = function(x,y,length,strokeWidth,type) { var $x = ["VerticalLine",4,x,y,length,strokeWidth,type]; $x.__enum__ = com.wiris.system.graphics.RenderAction; $x.toString = $estr; return $x; }
com.wiris.system.graphics.RenderAction.HorizontalLine = function(x,y,length,strokeWidth,type) { var $x = ["HorizontalLine",5,x,y,length,strokeWidth,type]; $x.__enum__ = com.wiris.system.graphics.RenderAction; $x.toString = $estr; return $x; }
com.wiris.system.graphics.RenderAction.Polyline = function(x0,y0,xs,ys) { var $x = ["Polyline",6,x0,y0,xs,ys]; $x.__enum__ = com.wiris.system.graphics.RenderAction; $x.toString = $estr; return $x; }
com.wiris.system.graphics.RenderAction.Arc = function(x,y,width,height,startAngle,endAngle) { var $x = ["Arc",7,x,y,width,height,startAngle,endAngle]; $x.__enum__ = com.wiris.system.graphics.RenderAction; $x.toString = $estr; return $x; }
com.wiris.system.graphics.RenderAction.Rectangle = function(x,y,width,height,filled) { var $x = ["Rectangle",8,x,y,width,height,filled]; $x.__enum__ = com.wiris.system.graphics.RenderAction; $x.toString = $estr; return $x; }
com.wiris.system.graphics.RenderAction.Text = function(x,y,baseline,text,font) { var $x = ["Text",9,x,y,baseline,text,font]; $x.__enum__ = com.wiris.system.graphics.RenderAction; $x.toString = $estr; return $x; }
com.wiris.util.ui.StyleInterface = $hxClasses["com.wiris.util.ui.StyleInterface"] = function() { }
com.wiris.util.ui.StyleInterface.__name__ = ["com","wiris","util","ui","StyleInterface"];
com.wiris.util.ui.StyleInterface.prototype = {
	getZIndex: null
	,getVerticalAlignment: null
	,getHorizontalAlignment: null
	,getForegroundColor: null
	,getBackgroundColor: null
	,getMinHeight: null
	,getMinWidth: null
	,getOffsetHeight: null
	,getOffsetWidth: null
	,getOffsetTop: null
	,getOffsetLeft: null
	,getHeight: null
	,getWidth: null
	,getBorderColor: null
	,getMargin: null
	,getBorderSize: null
	,__class__: com.wiris.util.ui.StyleInterface
}
com.wiris.system.ui.ComputedStyle = $hxClasses["com.wiris.system.ui.ComputedStyle"] = function(jsComponent) {
	this.jsComponent = jsComponent;
};
com.wiris.system.ui.ComputedStyle.__name__ = ["com","wiris","system","ui","ComputedStyle"];
com.wiris.system.ui.ComputedStyle.__interfaces__ = [com.wiris.util.ui.StyleInterface];
com.wiris.system.ui.ComputedStyle.prototype = {
	getZIndex: function() {
		return parseInt(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"z-index")) || 0;
	}
	,getVerticalAlignment: function() {
		var align = com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"vertical-align") || "middle";
		var _g1 = 0, _g = com.wiris.system.ui.ComputedStyle.VERTICAL_ALIGN_VALUES.length;
		while(_g1 < _g) {
			var n = _g1++;
			if(com.wiris.system.ui.ComputedStyle.VERTICAL_ALIGN_VALUES[n] == align) return n;
		}
		return -1;
	}
	,getHorizontalAlignment: function() {
		var align = com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"text-align") || "left";
		var _g1 = 0, _g = com.wiris.system.ui.ComputedStyle.TEXT_ALIGN_VALUES.length;
		while(_g1 < _g) {
			var n = _g1++;
			if(com.wiris.system.ui.ComputedStyle.TEXT_ALIGN_VALUES[n] == align) return n;
		}
		return -1;
	}
	,getForegroundColor: function() {
		return com.wiris.util.graphics.Color.fromText(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"color") || "black");
	}
	,getBackgroundColor: function() {
		return com.wiris.util.graphics.Color.fromText(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"background-color") || "black");
	}
	,getMinHeight: function() {
		return parseInt(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"min-height")) || -1;
	}
	,getMinWidth: function() {
		return parseInt(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"min-width")) || -1;
	}
	,getOffsetHeight: function() {
		return this.jsComponent.getElement().offsetHeight;
	}
	,getOffsetWidth: function() {
		return this.jsComponent.getElement().offsetWidth;
	}
	,getOffsetTop: function() {
		return this.jsComponent.getElement().offsetTop;
	}
	,getOffsetLeft: function() {
		return this.jsComponent.getElement().offsetLeft;
	}
	,getHeight: function() {
		return parseInt(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"height")) || -1;
	}
	,getWidth: function() {
		return parseInt(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"width")) || -1;
	}
	,getBorderColor: function() {
		var top = com.wiris.util.graphics.Color.fromText(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"border-top-color") || "black");
		var right = com.wiris.util.graphics.Color.fromText(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"border-right-color") || "black");
		var bottom = com.wiris.util.graphics.Color.fromText(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"border-bottom-color") || "black");
		var left = com.wiris.util.graphics.Color.fromText(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"border-left-color") || "black");
		return [top,right,bottom,left];
	}
	,getMargin: function() {
		var top = parseInt(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"margin-top")) || 0;
		var right = parseInt(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"margin-right")) || 0;
		var bottom = parseInt(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"margin-bottom")) || 0;
		var left = parseInt(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"margin-left")) || 0;
		return [top,right,bottom,left];
	}
	,getBorderSize: function() {
		var top = parseInt(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"border-top-width")) || 0;
		var right = parseInt(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"border-right-width")) || 0;
		var bottom = parseInt(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"border-bottom-width")) || 0;
		var left = parseInt(com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.jsComponent.getElement(),"border-left-width")) || 0;
		return [top,right,bottom,left];
	}
	,jsComponent: null
	,__class__: com.wiris.system.ui.ComputedStyle
}
com.wiris.system.ui.JsActivityContainer = $hxClasses["com.wiris.system.ui.JsActivityContainer"] = function(activityContainer) {
	com.wiris.system.ui.JsPanel.call(this,activityContainer);
	this.historySize = 0;
	this.activityContainer = activityContainer;
	this.currentActivity = this.activityContainer.getCurrentActivity();
	this.activities = new Array();
};
com.wiris.system.ui.JsActivityContainer.__name__ = ["com","wiris","system","ui","JsActivityContainer"];
com.wiris.system.ui.JsActivityContainer.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsActivityContainer.__super__ = com.wiris.system.ui.JsPanel;
com.wiris.system.ui.JsActivityContainer.prototype = $extend(com.wiris.system.ui.JsPanel.prototype,{
	update: function() {
		var _g = this;
		var oldActivity = this.currentActivity;
		var newActivity = this.activityContainer.getCurrentActivity();
		this.currentActivity = newActivity;
		if(newActivity != oldActivity) {
			var direction = this.activityContainer.getHistory().length - this.historySize;
			this.historySize = this.activityContainer.getHistory().length;
			if(direction > 0) {
				com.wiris.system.JsDOMUtils.addClass(newActivity.getElement(),"wrsUI_aux_activityPanelHiddenRight");
				newActivity.setVisible(true);
				haxe.Timer.delay(function() {
					newActivity.getElement().scrollTop = 0;
					newActivity.getElement().firstChild.scrollTop = 0;
					com.wiris.system.JsDOMUtils.addClass(oldActivity.getElement(),"wrsUI_aux_activityPanelAnimated");
					com.wiris.system.JsDOMUtils.addClass(newActivity.getElement(),"wrsUI_aux_activityPanelAnimated");
					requestAnimationFrame(function() {
						com.wiris.system.JsDOMUtils.addClass(oldActivity.getElement(),"wrsUI_aux_activityPanelHiddenLeft");
						com.wiris.system.JsDOMUtils.removeClass(newActivity.getElement(),"wrsUI_aux_activityPanelHiddenRight");
					});
				},1);
			} else {
				com.wiris.system.JsDOMUtils.addClass(newActivity.getElement(),"wrsUI_aux_activityPanelHiddenLeft");
				newActivity.setVisible(true);
				haxe.Timer.delay(function() {
					newActivity.getElement().scrollTop = 0;
					newActivity.getElement().firstChild.scrollTop = 0;
					com.wiris.system.JsDOMUtils.addClass(oldActivity.getElement(),"wrsUI_aux_activityPanelAnimated");
					com.wiris.system.JsDOMUtils.addClass(newActivity.getElement(),"wrsUI_aux_activityPanelAnimated");
					requestAnimationFrame(function() {
						com.wiris.system.JsDOMUtils.addClass(oldActivity.getElement(),"wrsUI_aux_activityPanelHiddenRight");
						com.wiris.system.JsDOMUtils.removeClass(newActivity.getElement(),"wrsUI_aux_activityPanelHiddenLeft");
					});
				},1);
			}
			if(com.wiris.system.JsDOMUtils.elementIsVisible(newActivity.getElement())) this.eventListener = com.wiris.system.JsDOMUtils.addEventListener(oldActivity.getElement(),"transitionend",function(event) {
				if(com.wiris.system.JsDOMUtils.getEventTarget(event) == oldActivity.getElement()) {
					com.wiris.system.JsDOMUtils.removeClass(oldActivity.getElement(),"wrsUI_aux_activityPanelAnimated");
					com.wiris.system.JsDOMUtils.removeClass(oldActivity.getElement(),"wrsUI_aux_activityPanelHiddenRight");
					com.wiris.system.JsDOMUtils.removeClass(oldActivity.getElement(),"wrsUI_aux_activityPanelHiddenLeft");
					oldActivity.setVisible(false);
					com.wiris.system.JsDOMUtils.removeClass(newActivity.getElement(),"wrsUI_aux_activityPanelAnimated");
					com.wiris.system.JsDOMUtils.removeEventListener(_g.eventListener);
					_g.activityContainer.setActivityChanging(false);
				}
			}); else {
				com.wiris.system.JsDOMUtils.removeClass(oldActivity.getElement(),"wrsUI_aux_activityPanelAnimated");
				com.wiris.system.JsDOMUtils.removeClass(oldActivity.getElement(),"wrsUI_aux_activityPanelHiddenRight");
				com.wiris.system.JsDOMUtils.removeClass(oldActivity.getElement(),"wrsUI_aux_activityPanelHiddenLeft");
				oldActivity.setVisible(false);
				com.wiris.system.JsDOMUtils.removeClass(newActivity.getElement(),"wrsUI_aux_activityPanelAnimated");
				this.activityContainer.setActivityChanging(false);
			}
		}
	}
	,stateChanged: function(e) {
		this.update();
	}
	,clearRipple: function() {
		var i = HxOverrides.iter(this.activities);
		while(i.hasNext()) i.next().clearRipple();
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsPanel.prototype.removeListeners.call(this);
		this.activityContainer.removeChangeListener(this);
	}
	,buildChildren: function() {
		var element = this.getOriginalElement();
		var i = HxOverrides.iter(this.activityContainer.getComponents());
		while(i.hasNext()) {
			var component = i.next();
			if(js.Boot.__instanceof(component,com.wiris.util.ui.component.ActivityPanel)) {
				var panel = js.Boot.__cast(component , com.wiris.util.ui.component.ActivityPanel);
				var child = this.panel.getComponentBuilder().buildComponent(panel,this);
				this.activities.push(child);
				if(panel != this.activityContainer.getCurrentActivity()) panel.setVisible(false); else {
					this.currentActivity = panel;
					panel.setVisible(true);
				}
				element.appendChild(child.getElement());
			} else element.appendChild(this.panel.getComponentBuilder().buildComponent(component,this).getElement());
		}
		this.activityContainer.addChangeListener(this);
	}
	,activities: null
	,eventListener: null
	,historySize: null
	,currentActivity: null
	,activityContainer: null
	,__class__: com.wiris.system.ui.JsActivityContainer
});
com.wiris.system.ui.JsBorderPanel = $hxClasses["com.wiris.system.ui.JsBorderPanel"] = function(borderPanel) {
	com.wiris.system.ui.JsPanel.call(this,borderPanel);
	this.borderPanel = borderPanel;
	this.elements = new Hash();
};
com.wiris.system.ui.JsBorderPanel.__name__ = ["com","wiris","system","ui","JsBorderPanel"];
com.wiris.system.ui.JsBorderPanel.__super__ = com.wiris.system.ui.JsPanel;
com.wiris.system.ui.JsBorderPanel.prototype = $extend(com.wiris.system.ui.JsPanel.prototype,{
	updateStyles: function() {
		com.wiris.system.ui.JsPanel.prototype.updateStyles.call(this);
		var childAtCenter = this.elements.get("wrsUI_borderPanelAtCenter");
		var childAtNorth = this.elements.get("wrsUI_borderPanelAtNorth");
		var childAtNorthWest = this.elements.get("wrsUI_borderPanelAtNorthWest");
		var childAtWest = this.elements.get("wrsUI_borderPanelAtWest");
		var childAtSouthWest = this.elements.get("wrsUI_borderPanelAtSouthWest");
		var childAtSouth = this.elements.get("wrsUI_borderPanelAtSouth");
		var childAtSouthEast = this.elements.get("wrsUI_borderPanelAtSouthEast");
		var childAtEast = this.elements.get("wrsUI_borderPanelAtEast");
		var childAtNorthEast = this.elements.get("wrsUI_borderPanelAtNorthEast");
		var i = this.elements.keys();
		while(i.hasNext()) {
			var child = this.elements.get(i.next());
			var staticChild = child.className.indexOf("wrsUI_borderPanelStatic") != -1;
			if(!staticChild) {
				if(child == childAtNorth) {
					child.style.setProperty("grid-row","1");
					if(childAtNorthWest == null && childAtNorthEast == null) child.style.setProperty("grid-column","1/4"); else if(childAtNorthEast == null) child.style.setProperty("grid-column","1/3"); else if(childAtNorthWest == null) child.style.setProperty("grid-column","2/4"); else child.style.setProperty("grid-column","2");
				} else if(child == childAtNorthWest) {
					child.style.setProperty("grid-row","1");
					child.style.setProperty("grid-column","1");
				} else if(child == childAtNorthEast) {
					child.style.setProperty("grid-row","1");
					child.style.setProperty("grid-column","3");
				} else if(child == childAtSouth) {
					child.style.setProperty("grid-row","3");
					if(childAtSouthWest == null && childAtSouthEast == null) child.style.setProperty("grid-column","1/4"); else if(childAtSouthEast == null) child.style.setProperty("grid-column","1/3"); else if(childAtSouthWest == null) child.style.setProperty("grid-column","2/4"); else child.style.setProperty("grid-column","2");
				} else if(child == childAtSouthWest) {
					child.style.setProperty("grid-row","3");
					child.style.setProperty("grid-column","1");
				} else if(child == childAtSouthEast) {
					child.style.setProperty("grid-row","3");
					child.style.setProperty("grid-column","3");
				} else if(child == childAtWest) {
					child.style.setProperty("grid-column","1");
					if(childAtNorthWest == null && childAtSouthWest == null) child.style.setProperty("grid-row","1/4"); else if(childAtSouthWest == null) child.style.setProperty("grid-row","1/3"); else if(childAtNorthWest == null) child.style.setProperty("grid-row","2/4"); else child.style.setProperty("grid-row","2");
				} else if(child == childAtEast) {
					child.style.setProperty("grid-column","3");
					if(childAtNorthEast == null && childAtSouthEast == null) child.style.setProperty("grid-row","1/4"); else if(childAtSouthEast == null) child.style.setProperty("grid-row","1/3"); else if(childAtNorthEast == null) child.style.setProperty("grid-row","2/4"); else child.style.setProperty("grid-row","2");
				} else if(child == childAtCenter) {
					if(childAtNorth == null && childAtNorthWest == null && childAtWest == null && childAtSouthWest == null && childAtSouth == null && childAtSouthEast == null && childAtEast == null && childAtNorthEast == null) {
						child.style.setProperty("grid-row","1/4");
						child.style.setProperty("grid-column","1/4");
					} else if(childAtWest == null && childAtEast == null) {
						child.style.setProperty("grid-column","1/4");
						if(childAtNorthWest == null && childAtNorth == null && childAtNorthEast == null) child.style.setProperty("grid-row","1/3"); else if(childAtSouthWest == null && childAtSouth == null && childAtSouthEast == null) child.style.setProperty("grid-row","2/4"); else child.style.setProperty("grid-row","2");
					} else if(childAtNorth == null && childAtSouth == null) {
						child.style.setProperty("grid-row","1/4");
						if(childAtNorthEast == null && childAtEast == null && childAtSouthEast == null) child.style.setProperty("grid-column","1/3"); else if(childAtNorthWest == null && childAtWest == null && childAtSouthWest == null) child.style.setProperty("grid-column","2/4"); else child.style.setProperty("grid-column","2");
					} else {
						child.style.setProperty("grid-row","2");
						child.style.setProperty("grid-column","2");
					}
				}
			}
		}
	}
	,getChildPosition: function(child) {
		var i = -1;
		while(++i < child.classList.length) if(child.classList[i].startsWith("wrsUI_borderPanelAt")) return child.classList[i];
		return null;
	}
	,childRemoved: function(e) {
		var child = this.getOriginalElement().childNodes[e.getChildPosition()];
		this.elements.remove(this.getChildPosition(child));
		com.wiris.system.ui.JsPanel.prototype.childRemoved.call(this,e);
	}
	,buildAndInsertChild: function(component,index) {
		var childElement = com.wiris.system.ui.JsPanel.prototype.buildAndInsertChild.call(this,component,index);
		this.elements.set(this.getChildPosition(childElement),childElement);
		return childElement;
	}
	,elements: null
	,borderPanel: null
	,__class__: com.wiris.system.ui.JsBorderPanel
});
com.wiris.system.ui.JsRippleComponent = $hxClasses["com.wiris.system.ui.JsRippleComponent"] = function(rippleComponent) {
	com.wiris.system.ui.JsComponent.call(this,rippleComponent);
	this.rippleComponent = rippleComponent;
	this.ripple = null;
	this.activated = false;
	this.animationTimeout = null;
};
com.wiris.system.ui.JsRippleComponent.__name__ = ["com","wiris","system","ui","JsRippleComponent"];
com.wiris.system.ui.JsRippleComponent.__super__ = com.wiris.system.ui.JsComponent;
com.wiris.system.ui.JsRippleComponent.prototype = $extend(com.wiris.system.ui.JsComponent.prototype,{
	updateRipplingClass: function() {
		var element = this.getElement();
		if(this.activated || this.animationTimeout != null) com.wiris.system.JsDOMUtils.addClass(element,"wrsUI_aux_rippling"); else com.wiris.system.JsDOMUtils.removeClass(element,"wrsUI_aux_rippling");
	}
	,setRippleSize: function(size) {
		this.ripple.style.width = size;
		this.ripple.style.paddingBottom = size;
	}
	,setRipplePosition: function(x,y) {
		this.ripple.style.left = x;
		this.ripple.style.top = y;
	}
	,clearRipple: function() {
		if(this.animationTimeout != null) clearTimeout(this.animationTimeout);
		this.activated = false;
		com.wiris.system.JsDOMUtils.removeClass(this.ripple,"wrsUI_aux_animated");
		this.updateRipplingClass();
		this.setRipplePosition("","");
		this.setRippleSize("");
		com.wiris.system.JsDOMUtils.addClass(this.ripple,"wrsUI_aux_animated");
	}
	,onElementTransitionEnd: function(e) {
		var self = this;
		if(e.propertyName == "perspective") {
			var value = com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.getElement(),"perspective");
			if(com.wiris.system.JsDOMUtils.getEventTarget(e) == this.ripple) {
				if(value == "2px") {
					if(this.animationTimeout != null) clearTimeout(this.animationTimeout);
					this.animationTimeout = setTimeout(function() {
						self.animationTimeout = null;
						self.updateRipplingClass();
					},com.wiris.system.ui.JsRippleComponent.RIPPLE_ANIMATION_DURATION);
					this.updateRipplingClass();
				}
			} else {
				this.activated = value == "2px";
				if(this.activated) {
					com.wiris.system.JsDOMUtils.removeClass(this.ripple,"wrsUI_aux_animated");
					this.setRippleSize("0");
					setTimeout(function() {
						com.wiris.system.JsDOMUtils.addClass(self.ripple,"wrsUI_aux_animated");
						self.setRippleSize("250%");
						self.updateRipplingClass();
					});
				} else this.updateRipplingClass();
			}
		} else if(e.propertyName == "opacity" && com.wiris.system.JsDOMUtils.getEventTarget(e) == this.ripple && com.wiris.system.JsDOMUtils.getComputedStyleProperty(this.ripple,"opacity") != 1) {
			com.wiris.system.JsDOMUtils.removeClass(this.ripple,"wrsUI_aux_animated");
			this.setRipplePosition("","");
			this.setRippleSize("");
			com.wiris.system.JsDOMUtils.addClass(this.ripple,"wrsUI_aux_animated");
		}
	}
	,onElementMouseDown: function(e) {
		var element = this.getElement();
		var mousePosition = com.wiris.system.JsDOMUtils.getMousePosition(element,e);
		this.setRipplePosition(mousePosition[0] + "px",mousePosition[1] + "px");
	}
	,onWindowBlur: function(e) {
		this.clearRipple();
	}
	,visibilityChanged: function(e) {
		com.wiris.system.ui.JsComponent.prototype.visibilityChanged.call(this,e);
		if(!this.rippleComponent.isVisible()) this.clearRipple();
	}
	,buildElement: function() {
		var element = this.getElement();
		this.ripple = this.createElement("div");
		this.ripple.className = "wrsUI_aux_ripple wrsUI_aux_animated";
		element.appendChild(this.ripple);
		com.wiris.system.JsDOMUtils.addEventListener(element,"mousedown",$bind(this,this.onElementMouseDown));
		com.wiris.system.JsDOMUtils.addEventListener(element,"transitionend",$bind(this,this.onElementTransitionEnd));
		com.wiris.system.JsDOMUtils.addEventListener(js.Lib.window,"blur",$bind(this,this.onWindowBlur));
	}
	,animationTimeout: null
	,activated: null
	,ripple: null
	,rippleComponent: null
	,__class__: com.wiris.system.ui.JsRippleComponent
});
com.wiris.system.ui.JsButton = $hxClasses["com.wiris.system.ui.JsButton"] = function(button,resourceLoader) {
	com.wiris.system.ui.JsRippleComponent.call(this,button);
	this.button = button;
	this.resourceLoader = resourceLoader;
	this.button.addChangeListener(this);
};
com.wiris.system.ui.JsButton.__name__ = ["com","wiris","system","ui","JsButton"];
com.wiris.system.ui.JsButton.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsButton.__super__ = com.wiris.system.ui.JsRippleComponent;
com.wiris.system.ui.JsButton.prototype = $extend(com.wiris.system.ui.JsRippleComponent.prototype,{
	getInputElements: function() {
		var elements = new Array();
		elements.push(this.getElement());
		return elements;
	}
	,updateContent: function() {
		var element = this.getElement();
		if(js.Boot.__instanceof(this.button,com.wiris.util.ui.component.SignInButton)) return;
		while(element.firstChild.nextSibling != null) element.removeChild(element.firstChild.nextSibling);
		if(js.Boot.__instanceof(this.button,com.wiris.util.ui.component.HyperlinkButton)) {
			element.setAttribute("href",(js.Boot.__cast(this.button , com.wiris.util.ui.component.HyperlinkButton)).getUrl());
			element.setAttribute("target",(js.Boot.__cast(this.button , com.wiris.util.ui.component.HyperlinkButton)).isNewWindowLink()?"_blank":"_self");
		}
		if(this.button.getIcon() != null) element.appendChild(com.wiris.system.ui.JsIcon.createIconElement(this.button.getIcon(),this.resourceLoader));
		if(this.button.getText() != null) {
			var textNode = this.createElement("span");
			textNode.className = "wrsUI_aux_button_value";
			if(this.button.isTextIsHtml()) textNode.innerHTML = this.button.getText(); else textNode.appendChild(js.Lib.document.createTextNode(this.button.getText()));
			element.appendChild(textNode);
		}
		if(this.button.getTooltip() != null) element.setAttribute("title",this.button.getTooltip());
		this.element.wrsUI_updateGUI();
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsRippleComponent.prototype.removeListeners.call(this);
		this.button.removeChangeListener(this);
	}
	,buildElement: function() {
		var element;
		if(js.Boot.__instanceof(this.button,com.wiris.util.ui.component.HyperlinkButton)) {
			element = this.createElement("a");
			element.setAttribute("type","button");
			element.setAttribute("href",(js.Boot.__cast(this.button , com.wiris.util.ui.component.HyperlinkButton)).getUrl());
			element.setAttribute("target",(js.Boot.__cast(this.button , com.wiris.util.ui.component.HyperlinkButton)).isNewWindowLink()?"_blank":"_self");
		} else {
			element = this.createElement("button");
			element.setAttribute("type","button");
		}
		this.setElement(element);
		com.wiris.system.ui.JsRippleComponent.prototype.buildElement.call(this);
		this.updateContent();
	}
	,resourceLoader: null
	,button: null
	,__class__: com.wiris.system.ui.JsButton
});
com.wiris.system.ui.JsButtonPanel = $hxClasses["com.wiris.system.ui.JsButtonPanel"] = function(buttonPanel) {
	com.wiris.system.ui.JsRippleComponent.call(this,buttonPanel);
	this.buttonPanel = buttonPanel;
	this.buttonPanel.addChangeListener(this);
	this.buttonPanel.addComponentTreeListener(this);
	this.components = new Array();
};
com.wiris.system.ui.JsButtonPanel.__name__ = ["com","wiris","system","ui","JsButtonPanel"];
com.wiris.system.ui.JsButtonPanel.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener,com.wiris.util.ui.interaction.ComponentTreeListener];
com.wiris.system.ui.JsButtonPanel.__super__ = com.wiris.system.ui.JsRippleComponent;
com.wiris.system.ui.JsButtonPanel.prototype = $extend(com.wiris.system.ui.JsRippleComponent.prototype,{
	updateStyles: function() {
		com.wiris.system.ui.JsRippleComponent.prototype.updateStyles.call(this);
		var element = this.getOriginalElement();
		var direction = this.buttonPanel.getDirection();
		if(direction == com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM) {
			var style = this.buttonPanel.getStyle();
			var horizontalAlignment = style.getHorizontalAlignment();
			var verticalAlignment = style.getVerticalAlignment();
			element.style.alignItems = com.wiris.system.ui.JsComponent.ALIGN_ITEMS_VALUES[horizontalAlignment];
			element.style.justifyContent = com.wiris.system.ui.JsComponent.ALIGN_ITEMS_VALUES[verticalAlignment];
		}
	}
	,childRemoved: function(e) {
		var element = this.getOriginalElement();
		var child = element.childNodes[e.getChildPosition()];
		child.wrsUI_detachEventListeners();
		element.removeChild(child);
		this.components.splice(e.getChildPosition(),1);
	}
	,childMoved: function(e) {
		var element = this.getOriginalElement();
		var child = e.getChild().getElement();
		element.insertBefore(child,element.childNodes[e.getChildDestination()]);
		this.components.splice(e.getChildDestination(),0,this.components.splice(e.getChildPosition(),1)[0]);
	}
	,childAdded: function(e) {
		var child = this.buildAndInsertChild(e.getChild(),e.getChildPosition());
		child.wrsUI_updateGUI();
		child.wrsUI_attachEventListeners();
	}
	,getInputElements: function() {
		var elements = new Array();
		elements.push(this.getOriginalElement());
		return elements;
	}
	,getOriginalElement: function() {
		return this.originalElement;
	}
	,setOriginalElement: function(element) {
		this.originalElement = element;
	}
	,updateContent: function() {
		var element = this.getElement();
		if(this.buttonPanel.getTooltip() != null) element.setAttribute("title",this.buttonPanel.getTooltip());
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,buildAndInsertChild: function(component,index) {
		var element = this.getOriginalElement();
		var child = this.buttonPanel.getComponentBuilder().buildComponent(component,this);
		var childElement = child.getElement();
		if(index < element.childNodes.length) element.insertBefore(childElement,element.childNodes[index]); else element.appendChild(childElement);
		this.components.push(child);
		return childElement;
	}
	,buildChildren: function() {
		var i = HxOverrides.iter(this.buttonPanel.getComponents());
		while(i.hasNext()) {
			var child = i.next();
			this.buildAndInsertChild(child,child.getChildIndex());
		}
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsRippleComponent.prototype.removeListeners.call(this);
		this.buttonPanel.removeChangeListener(this);
		this.buttonPanel.removeComponentTreeListener(this);
	}
	,buildElement: function() {
		var element = this.createElement("div");
		element.tabIndex = "0";
		element.setAttribute("type","button");
		com.wiris.system.JsDOMUtils.addEventListener(element,"keydown",function(e) {
			if(e.keyCode == 13) {
				element.dispatchEvent(new Event("click"));
			} else if(e.keyCode == 32) {
				element.dispatchEvent(new Event("mousedown"));
			}
		});
		com.wiris.system.JsDOMUtils.addEventListener(element,"keyup",function(e) {
			if(e.keyCode == 32) {
				element.dispatchEvent(new Event("mouseup"));
				element.dispatchEvent(new Event("click"));
			}
		});
		this.setElement(element);
		this.setOriginalElement(element);
		this.buildChildren();
		com.wiris.system.ui.JsRippleComponent.prototype.buildElement.call(this);
		this.updateContent();
	}
	,components: null
	,originalElement: null
	,buttonPanel: null
	,__class__: com.wiris.system.ui.JsButtonPanel
});
com.wiris.system.ui.JsCheckBox = $hxClasses["com.wiris.system.ui.JsCheckBox"] = function(checkBox) {
	com.wiris.system.ui.JsPanel.call(this,checkBox);
	this.checkBox = checkBox;
	this.activated = 0;
};
com.wiris.system.ui.JsCheckBox.__name__ = ["com","wiris","system","ui","JsCheckBox"];
com.wiris.system.ui.JsCheckBox.__super__ = com.wiris.system.ui.JsPanel;
com.wiris.system.ui.JsCheckBox.prototype = $extend(com.wiris.system.ui.JsPanel.prototype,{
	getInputElements: function() {
		var elements = new Array();
		elements.push(this.getElement());
		return elements;
	}
	,updateRipplingClass: function() {
		var element = this.getElement();
		if(this.activated++ >= 2) {
			com.wiris.system.JsDOMUtils.removeClass(element,"wrsUI_aux_checkBox_active");
			this.activated = 0;
		}
	}
	,onElementKeyUp: function(e) {
		var element = this.getElement();
		if(e.key == "Enter" || e.key == " ") this.updateRipplingClass();
	}
	,onElementKeyDown: function(e) {
		var element = this.getElement();
		if(e.key == "Enter" || e.key == " ") {
			if(this.activated == 0) {
				com.wiris.system.JsDOMUtils.addClass(element,"wrsUI_aux_checkBox_active");
				this.activated = 1;
				var self = this;
				setTimeout(function() {
					self.updateRipplingClass();
				},com.wiris.system.ui.JsCheckBox.RIPPLE_ANIMATION_DURATION);
			}
		}
	}
	,buildChildren: function() {
		com.wiris.system.ui.JsPanel.prototype.buildChildren.call(this);
		var element = this.getOriginalElement();
		element.tabIndex = "0";
		this.button = this.createElement("div");
		this.button.className = "wrsUI_aux_checkBox";
		this.ripple = this.createElement("div");
		this.ripple.className = "wrsUI_aux_checkBox_ripple";
		this.button.appendChild(this.ripple);
		element.firstChild.insertBefore(this.button,element.firstChild.firstChild);
		com.wiris.system.JsDOMUtils.addEventListener(element,"keydown",$bind(this,this.onElementKeyDown));
		com.wiris.system.JsDOMUtils.addEventListener(element,"keyup",$bind(this,this.onElementKeyUp));
	}
	,activated: null
	,ripple: null
	,button: null
	,checkBox: null
	,__class__: com.wiris.system.ui.JsCheckBox
});
com.wiris.system.ui.JsChip = $hxClasses["com.wiris.system.ui.JsChip"] = function(chip,resourceLoader) {
	com.wiris.system.ui.JsRippleComponent.call(this,chip);
	this.chip = chip;
	this.resourceLoader = resourceLoader;
};
com.wiris.system.ui.JsChip.__name__ = ["com","wiris","system","ui","JsChip"];
com.wiris.system.ui.JsChip.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsChip.__super__ = com.wiris.system.ui.JsRippleComponent;
com.wiris.system.ui.JsChip.prototype = $extend(com.wiris.system.ui.JsRippleComponent.prototype,{
	getInputElements: function() {
		var elements = new Array();
		elements.push(this.getElement());
		return elements;
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsRippleComponent.prototype.removeListeners.call(this);
		this.chip.removeChangeListener(this);
	}
	,updateContent: function() {
		var element = this.getElement();
		while(element.firstChild.nextSibling != null) element.removeChild(element.firstChild.nextSibling);
		if(this.chip.getIcon() != null) element.appendChild(com.wiris.system.ui.JsIcon.createIconElement(this.chip.getIcon(),this.resourceLoader));
		if(this.chip.getText() != null) {
			var textNode = this.createElement("span");
			textNode.appendChild(js.Lib.document.createTextNode(this.chip.getText()));
			element.appendChild(textNode);
		}
		if(this.chip.getTooltip() != null) element.setAttribute("title",this.chip.getTooltip());
		this.element.wrsUI_updateGUI();
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,buildElement: function() {
		var element;
		element = this.createElement("button");
		element.setAttribute("type","button");
		this.setElement(element);
		com.wiris.system.ui.JsRippleComponent.prototype.buildElement.call(this);
		this.updateContent();
		this.chip.addChangeListener(this);
	}
	,resourceLoader: null
	,chip: null
	,__class__: com.wiris.system.ui.JsChip
});
com.wiris.system.ui.JsLabel = $hxClasses["com.wiris.system.ui.JsLabel"] = function(label) {
	com.wiris.system.ui.JsComponent.call(this,label);
	this.label = label;
};
com.wiris.system.ui.JsLabel.__name__ = ["com","wiris","system","ui","JsLabel"];
com.wiris.system.ui.JsLabel.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsLabel.__super__ = com.wiris.system.ui.JsComponent;
com.wiris.system.ui.JsLabel.prototype = $extend(com.wiris.system.ui.JsComponent.prototype,{
	getInputElements: function() {
		var elements = new Array();
		if(js.Boot.__instanceof(this.label,com.wiris.util.ui.component.ActionLabel) || js.Boot.__instanceof(this.label,com.wiris.util.ui.component.HyperlinkLabel)) elements.push(this.getElement());
		return elements;
	}
	,updateContent: function() {
		var element = this.getElement();
		com.wiris.system.JsDOMUtils.removeChildren(element);
		if(js.Boot.__instanceof(this.label,com.wiris.util.ui.component.HyperlinkLabel)) {
			element.setAttribute("href",(js.Boot.__cast(this.label , com.wiris.util.ui.component.HyperlinkLabel)).getUrl());
			if((js.Boot.__cast(this.label , com.wiris.util.ui.component.HyperlinkLabel)).isNewWindowLink()) {
				element.setAttribute("target","_blank");
				element.setAttribute("rel","noopener noreferrer");
			} else element.setAttribute("target","_self");
		}
		var text = this.label.getText();
		if(text != null) element.appendChild(js.Lib.document.createTextNode(text));
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsComponent.prototype.removeListeners.call(this);
		this.label.removeChangeListener(this);
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,buildElement: function() {
		var element;
		if(js.Boot.__instanceof(this.label,com.wiris.util.ui.component.HyperlinkLabel)) {
			element = this.createElement("a");
			element.setAttribute("href",(js.Boot.__cast(this.label , com.wiris.util.ui.component.HyperlinkLabel)).getUrl());
			element.setAttribute("tabindex","0");
			if((js.Boot.__cast(this.label , com.wiris.util.ui.component.HyperlinkLabel)).isNewWindowLink()) {
				element.setAttribute("target","_blank");
				element.setAttribute("rel","noopener noreferrer");
			} else element.setAttribute("target","_self");
		} else element = this.createElement("span");
		if(js.Boot.__instanceof(this.label,com.wiris.util.ui.component.ActionLabel)) element.setAttribute("tabindex","0");
		this.setElement(element);
		this.updateContent();
		this.label.addChangeListener(this);
	}
	,label: null
	,__class__: com.wiris.system.ui.JsLabel
});
com.wiris.system.ui.JsCompositeLabel = $hxClasses["com.wiris.system.ui.JsCompositeLabel"] = function(compositeLabel) {
	com.wiris.system.ui.JsLabel.call(this,compositeLabel);
	this.compositeLabel = compositeLabel;
	this.compositeLabel.addComponentTreeListener(this);
	this.labels = new Array();
};
com.wiris.system.ui.JsCompositeLabel.__name__ = ["com","wiris","system","ui","JsCompositeLabel"];
com.wiris.system.ui.JsCompositeLabel.__interfaces__ = [com.wiris.util.ui.interaction.ComponentTreeListener];
com.wiris.system.ui.JsCompositeLabel.__super__ = com.wiris.system.ui.JsLabel;
com.wiris.system.ui.JsCompositeLabel.prototype = $extend(com.wiris.system.ui.JsLabel.prototype,{
	removeListeners: function() {
		com.wiris.system.ui.JsLabel.prototype.removeListeners.call(this);
		this.compositeLabel.removeComponentTreeListener(this);
		var i = HxOverrides.iter(this.labels);
		while(i.hasNext()) i.next().removeListeners();
	}
	,childRemoved: function(e) {
		var element = this.getOriginalElement();
		var child = element.childNodes[e.getChildPosition()];
		child.wrsUI_detachEventListeners();
		element.removeChild(child);
		var jsComponent = this.labels.splice(e.getChildPosition(),1)[0];
		jsComponent.removeListeners();
	}
	,childMoved: function(e) {
		var element = this.getOriginalElement();
		var child = e.getChild().getElement();
		element.insertBefore(child,element.childNodes[e.getChildDestination()]);
		this.labels.splice(e.getChildDestination(),0,this.labels.splice(e.getChildPosition(),1)[0]);
	}
	,childAdded: function(e) {
		var child = this.buildAndInsertChild(js.Boot.__cast(e.getChild() , com.wiris.util.ui.component.Label),e.getChildPosition());
		child.wrsUI_updateGUI();
		child.wrsUI_attachEventListeners();
	}
	,getOriginalElement: function() {
		return this.originalElement;
	}
	,setOriginalElement: function(element) {
		this.originalElement = element;
	}
	,getLabels: function() {
		return this.labels;
	}
	,buildAndInsertChild: function(label,index) {
		var element = this.getOriginalElement();
		var child = this.compositeLabel.getComponentBuilder().buildComponent(label,this);
		var childElement = child.getElement();
		if(index < element.childNodes.length) element.insertBefore(childElement,element.childNodes[index]); else element.appendChild(childElement);
		this.labels.push(child);
		return childElement;
	}
	,buildChildren: function() {
		var i = HxOverrides.iter(this.compositeLabel.getLabels());
		while(i.hasNext()) {
			var child = i.next();
			this.buildAndInsertChild(child,child.getChildIndex());
		}
	}
	,buildElement: function() {
		var element = this.createElement("span");
		this.setElement(element);
		this.setOriginalElement(element);
		this.buildChildren();
	}
	,labels: null
	,originalElement: null
	,compositeLabel: null
	,__class__: com.wiris.system.ui.JsCompositeLabel
});
com.wiris.system.ui.JsContextMenuProvider = $hxClasses["com.wiris.system.ui.JsContextMenuProvider"] = function(container) {
	this.container = container;
	this.element = js.Lib.document.createElement("div");
	this.element.className = "wrsUI_aux_contextPanelWrapper wrsUI_hidden";
	this.mouse = [0,0];
	this.useClamp = true;
	this.anchor = 0;
	this.parentAnchor = 0;
	this.animationMode = 0;
	this.lastCustomClass = null;
	this.observer = null;
	this.onCloseCallbackFunction = null;
	this.hidden = true;
	com.wiris.system.JsDOMUtils.addEventListener(js.Lib.document,"mousemove",$bind(this,this.onDocumentMouseMove));
};
com.wiris.system.ui.JsContextMenuProvider.__name__ = ["com","wiris","system","ui","JsContextMenuProvider"];
com.wiris.system.ui.JsContextMenuProvider.createPositionProvider = function(element,parent,padding,followMouse) {
	if(followMouse == null) followMouse = false;
	return function(mouse) {
		if(followMouse) return [mouse[0] + padding[0],mouse[1] + padding[1]]; else {
			var x = com.wiris.system.JsDOMUtils.getRelativeLeft(element,parent) + padding[0];
			var y = com.wiris.system.JsDOMUtils.getRelativeTop(element,parent) + padding[1];
			return [x,y];
		}
	};
}
com.wiris.system.ui.JsContextMenuProvider.prototype = {
	getElement: function() {
		return this.element;
	}
	,getParent: function() {
		return this.container;
	}
	,clamp: function(x,w,min,max) {
		if(x < min) return min;
		if(x + w > max) {
			if(max - w < min) return min;
			return max - w;
		}
		return x;
	}
	,updateSize: function() {
		if(!this.hidden) {
			var coordinates = this.positionProvider(this.mouse);
			var scroll = this.element.firstChild.scrollTop;
			this.element.firstChild.style.position = "absolute";
			this.menuWidth = this.element.firstChild.scrollWidth;
			this.menuHeight = this.element.firstChild.scrollHeight;
			this.parentWidth = this.parent.offsetWidth;
			this.parentHeight = this.parent.offsetHeight;
			this.element.firstChild.style.position = "";
			this.element.firstChild.scrollTop = scroll;
			this.containerWidth = this.element.parentNode.scrollWidth;
			this.containerHeight = this.element.parentNode.scrollHeight;
			if(this.animationMode != 0) {
				this.element.style.width = this.menuWidth + "px";
				this.element.style.height = this.menuHeight + "px";
			}
		}
	}
	,updatePosition: function() {
		if(!this.hidden) {
			var coordinates = this.positionProvider(this.mouse);
			if((this.anchor & com.wiris.util.ui.component.ContextPanel.ANCHOR_LEFT) == 0 && (this.anchor & com.wiris.util.ui.component.ContextPanel.ANCHOR_RIGHT) == 0) coordinates[0] -= Math.floor(this.menuWidth / 2); else if((this.anchor & com.wiris.util.ui.component.ContextPanel.ANCHOR_RIGHT) != 0) coordinates[0] -= this.menuWidth;
			if((this.anchor & com.wiris.util.ui.component.ContextPanel.ANCHOR_TOP) == 0 && (this.anchor & com.wiris.util.ui.component.ContextPanel.ANCHOR_BOTTOM) == 0) coordinates[1] -= Math.floor(this.menuHeight / 2); else if((this.anchor & com.wiris.util.ui.component.ContextPanel.ANCHOR_BOTTOM) != 0) coordinates[1] -= this.menuHeight;
			if((this.parentAnchor & com.wiris.util.ui.component.ContextPanel.ANCHOR_LEFT) == 0 && (this.parentAnchor & com.wiris.util.ui.component.ContextPanel.ANCHOR_RIGHT) == 0) coordinates[0] += Math.floor(this.parentWidth / 2); else if((this.parentAnchor & com.wiris.util.ui.component.ContextPanel.ANCHOR_RIGHT) != 0) coordinates[0] += this.parentWidth;
			if((this.parentAnchor & com.wiris.util.ui.component.ContextPanel.ANCHOR_TOP) == 0 && (this.parentAnchor & com.wiris.util.ui.component.ContextPanel.ANCHOR_BOTTOM) == 0) coordinates[1] += Math.floor(this.parentHeight / 2); else if((this.parentAnchor & com.wiris.util.ui.component.ContextPanel.ANCHOR_BOTTOM) != 0) coordinates[1] += this.parentHeight;
			if(this.useClamp) {
				coordinates[0] = this.clamp(coordinates[0],this.menuWidth,0,this.containerWidth);
				coordinates[1] = this.clamp(coordinates[1],this.menuHeight,0,this.containerHeight);
			}
			if((this.animationMode & com.wiris.util.ui.component.ContextPanel.ANIMATION_MODE_RIGHT_TO_LEFT) != 0) this.element.style.right = this.containerWidth - (coordinates[0] + this.menuWidth) + "px"; else this.element.style.left = coordinates[0] + "px";
			if((this.animationMode & com.wiris.util.ui.component.ContextPanel.ANIMATION_MODE_BOTTOM_TO_TOP) != 0) this.element.style.bottom = this.containerHeight - (coordinates[1] + this.menuHeight) + "px"; else this.element.style.top = coordinates[1] + "px";
		}
	}
	,hideContextPanel: function(cleanup) {
		if(cleanup == null) cleanup = false;
		if(!this.hidden) {
			this.hidden = true;
			com.wiris.system.JsDOMUtils.addClass(this.element,"wrsUI_hidden");
			com.wiris.system.JsDOMUtils.removeEventListener(this.onDocumentKeyDownDescriptor);
			if(this.trapFocusDescriptor != null) com.wiris.system.JsDOMUtils.untrapFocus(this.trapFocusDescriptor);
			if(this.onCloseCallbackFunction != null && !cleanup) {
				this.onCloseCallbackFunction();
				this.onCloseCallbackFunction = null;
			}
			clearInterval(this.updatePositionInterval);
			if(this.element.parentNode != null) this.element.parentNode.removeChild(this.element);
		}
		if(this.observer != null) {
			var self = this;
			self.observer.disconnect();
			self.observer = null;;
		}
	}
	,showContextPanel: function(positionProvider,content,parent,onCloseCallbackFunction,animationMode,anchor,parentAnchor,trapFocus,useClamp,followMouse,customClass) {
		if(followMouse == null) followMouse = false;
		if(useClamp == null) useClamp = true;
		if(trapFocus == null) trapFocus = true;
		if(parentAnchor == null) parentAnchor = 0;
		if(anchor == null) anchor = 0;
		if(animationMode == null) animationMode = 0;
		var _g = this;
		this.hideContextPanel(true);
		this.container.appendChild(this.element);
		com.wiris.system.JsDOMUtils.removeChildren(this.element);
		this.element.appendChild(content);
		this.element.style.transition = "initial";
		this.element.style.opacity = "0";
		this.element.style.width = "";
		this.element.style.height = "";
		com.wiris.system.JsDOMUtils.removeClass(this.element,"wrsUI_hidden");
		if(this.lastCustomClass != null) com.wiris.system.JsDOMUtils.removeClass(this.element,this.lastCustomClass);
		if(customClass != null) com.wiris.system.JsDOMUtils.addClass(this.element,customClass);
		this.lastCustomClass = customClass;
		this.positionProvider = positionProvider;
		var coordinates = this.positionProvider(this.mouse);
		this.parent = parent;
		this.anchor = anchor;
		this.parentAnchor = parentAnchor;
		this.animationMode = animationMode;
		this.useClamp = useClamp;
		if((animationMode & com.wiris.util.ui.component.ContextPanel.ANIMATION_MODE_LEFT_TO_RIGHT) != 0) {
			this.element.style.left = coordinates[0] + "px";
			this.element.style.width = "0";
		} else if((animationMode & com.wiris.util.ui.component.ContextPanel.ANIMATION_MODE_RIGHT_TO_LEFT) != 0) {
			this.element.style.right = this.element.parentNode.scrollWidth - (coordinates[0] + this.element.firstChild.scrollWidth) + "px";
			this.element.style.width = "0";
		} else this.element.style.width = this.element.firstChild.scrollWidth + "px";
		if((animationMode & com.wiris.util.ui.component.ContextPanel.ANIMATION_MODE_TOP_TO_BOTTOM) != 0) {
			this.element.style.top = coordinates[1] + "px";
			this.element.style.height = "0";
		} else if((animationMode & com.wiris.util.ui.component.ContextPanel.ANIMATION_MODE_BOTTOM_TO_TOP) != 0) {
			this.element.style.bottom = this.element.parentNode.scrollHeight - (coordinates[1] + this.element.firstChild.scrollHeight) + "px";
			this.element.style.height = "0";
		} else this.element.style.height = this.element.firstChild.scrollHeight + "px";
		if(followMouse) this.element.style.setProperty("position","fixed","important"); else this.element.style.position = "";
		var initialize = function() {
			var self = _g;
			self.element.style.transition = "";
			self.element.style.opacity = "";
			self.updateSize();
			self.updatePosition();
			self.updatePositionInterval = setInterval($bind(self,self.updatePosition),10);
			
	        self.observer = new ResizeObserver(function() {
	            self.updateSize();
	        });

	        self.observer.observe(self.element.firstChild, { childList : true, subtree: true });;
		};
		if(animationMode == 0) initialize(); else setTimeout(initialize,1);
		this.onCloseCallbackFunction = onCloseCallbackFunction;
		this.hidden = false;
		this.onDocumentKeyDownDescriptor = com.wiris.system.JsDOMUtils.addEventListenerImpl(js.Lib.document,"keydown",$bind(this,this.onDocumentKeyDown),true);
		if(trapFocus) this.trapFocusDescriptor = com.wiris.system.JsDOMUtils.trapFocus(js.Lib.document.body,this.element); else this.trapFocusDescriptor = null;
	}
	,onDocumentKeyDown: function(e) {
		if(e.keyCode == 27 && !this.hidden) {
			this.hideContextPanel();
			e.stopPropagation();
		}
	}
	,onDocumentMouseMove: function(e) {
		this.mouse[0] = e.clientX;
		this.mouse[1] = e.clientY;
	}
	,trapFocusDescriptor: null
	,lastCustomClass: null
	,animationMode: null
	,parentAnchor: null
	,anchor: null
	,observer: null
	,onDocumentKeyDownDescriptor: null
	,positionProvider: null
	,updatePositionInterval: null
	,containerHeight: null
	,containerWidth: null
	,parentHeight: null
	,parentWidth: null
	,menuHeight: null
	,menuWidth: null
	,useClamp: null
	,mouse: null
	,hidden: null
	,container: null
	,element: null
	,parent: null
	,onCloseCallbackFunction: null
	,__class__: com.wiris.system.ui.JsContextMenuProvider
}
com.wiris.system.ui.JsContextPanel = $hxClasses["com.wiris.system.ui.JsContextPanel"] = function(contextPanel) {
	com.wiris.system.ui.JsPanel.call(this,contextPanel);
	this.contextPanel = contextPanel;
	this.originalPanel = contextPanel.getPanel();
	this.useClamp = true;
	this.trapFocus = false;
	this.followMouse = false;
	this.padding = [0,0];
	this.trapFocusDescriptor = null;
	this.originalPanel.addComponentTreeListener(this);
};
com.wiris.system.ui.JsContextPanel.__name__ = ["com","wiris","system","ui","JsContextPanel"];
com.wiris.system.ui.JsContextPanel.__super__ = com.wiris.system.ui.JsPanel;
com.wiris.system.ui.JsContextPanel.prototype = $extend(com.wiris.system.ui.JsPanel.prototype,{
	onDocumentMouseDown: function(e) {
		var target = com.wiris.system.JsDOMUtils.getEventTarget(e);
		var targetComponent = e.wrsUI_targetComponent;
		var isDescendant = com.wiris.system.JsDOMUtils.isDescendant(this.contextPanel.getElement(),target) || targetComponent != null && this.contextPanel.isChild(targetComponent);
		if(!isDescendant) this.getContextMenu().hideContextPanel();
	}
	,visibilityChanged: function(e) {
		var self = this;
		if(this.contextPanel.isVisible()) {
			this.onDocumentMouseDownDescriptor = com.wiris.system.JsDOMUtils.addEventListener(js.Lib.document,"mousedown",$bind(this,this.onDocumentMouseDown));
			this.positionProvider = com.wiris.system.ui.JsContextMenuProvider.createPositionProvider(this.contextPanel.getParent().getElement(),this.getContextMenu().getParent(),this.getPadding(),this.followMouse);
			this.getContextMenu().showContextPanel(this.positionProvider,this.contextPanel.getElement(),this.getParent().getElement(),function() {
				self.contextPanel.setVisible(false);
			},this.contextPanel.getOpenAnimationMode(),this.contextPanel.getAnchor(),this.contextPanel.getParentAnchor(),false,this.useClamp,this.followMouse,this.contextPanel.getApplicationClass() != null?"wrsUI_aux_" + this.contextPanel.getApplicationClass() + "ContextPanel":null);
			if(this.trapFocus) this.trapFocusDescriptor = com.wiris.system.ui.JsComponent.trapFocus(js.Lib.document.body,this.contextPanel.getElement());
			this.updateStyles();
			this.getElement().wrsUI_updateGUI();
		} else {
			com.wiris.system.JsDOMUtils.removeEventListener(this.onDocumentMouseDownDescriptor);
			this.contextPanel.getElement().style.setProperty("opacity","unset");
			this.contextPanel.getElement().style.setProperty("visibility","unset");
			this.contextPanel.getElement().style.setProperty("display","unset","important");
			if(self.getContextMenu().element.firstChild == self.getElement()) self.getContextMenu().hideContextPanel();
			if(self.trapFocusDescriptor != null) com.wiris.system.ui.JsComponent.untrapFocus();
			self.clearRipple();
			self.contextPanel.getElement().style.setProperty("display","");
			self.contextPanel.getElement().style.setProperty("opacity","");
			self.contextPanel.getElement().style.setProperty("visibility","");
		}
	}
	,getContextMenu: function() {
		if(this.contextPanel.isNested()) {
			if(this.contextMenu == null) {
				var parentProvider = com.wiris.system.ui.JsPanel.prototype.getContextMenu.call(this);
				this.contextMenu = new com.wiris.system.ui.JsContextMenuProvider(parentProvider.getParent());
			}
			return this.contextMenu;
		}
		return com.wiris.system.ui.JsPanel.prototype.getContextMenu.call(this);
	}
	,setPadding: function(xPadding,yPadding) {
		this.padding = [xPadding,yPadding];
	}
	,getPadding: function() {
		var padding = this.contextPanel.getStyle().getPadding();
		if(padding[3] != com.wiris.util.ui.Style.SIZE_AUTO || padding[0] != com.wiris.util.ui.Style.SIZE_AUTO) {
			if(padding[3] == com.wiris.util.ui.Style.SIZE_AUTO) return [this.padding[0],-padding[0] + this.padding[1]]; else if(padding[0] == com.wiris.util.ui.Style.SIZE_AUTO) return [-padding[3] + this.padding[0],this.padding[1]];
			return [-padding[3] + this.padding[0],-padding[0] + this.padding[1]];
		}
		return this.padding;
	}
	,isFollowMouse: function() {
		return this.followMouse;
	}
	,setFollowMouse: function(followMouse) {
		this.followMouse = followMouse;
	}
	,isUseClamp: function() {
		return this.useClamp;
	}
	,setUseClamp: function(useClamp) {
		this.useClamp = useClamp;
	}
	,isTrapFocus: function() {
		return this.trapFocus;
	}
	,setTrapFocus: function(trapFocus) {
		this.trapFocus = trapFocus;
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsPanel.prototype.removeListeners.call(this);
		this.originalPanel.removeComponentTreeListener(this);
	}
	,buildChildren: function() {
		var i = HxOverrides.iter(this.originalPanel.getComponents());
		while(i.hasNext()) {
			var child = i.next();
			this.buildAndInsertChild(child,child.getChildIndex());
		}
	}
	,positionProvider: null
	,onDocumentMouseDownDescriptor: null
	,trapFocusDescriptor: null
	,padding: null
	,followMouse: null
	,trapFocus: null
	,useClamp: null
	,contextPanel: null
	,originalPanel: null
	,__class__: com.wiris.system.ui.JsContextPanel
});
com.wiris.system.ui.JsContextPanelButton = $hxClasses["com.wiris.system.ui.JsContextPanelButton"] = function(contextPanelButton,resourceLoader) {
	com.wiris.system.ui.JsButton.call(this,contextPanelButton,resourceLoader);
	this.contextPanelButton = contextPanelButton;
};
com.wiris.system.ui.JsContextPanelButton.__name__ = ["com","wiris","system","ui","JsContextPanelButton"];
com.wiris.system.ui.JsContextPanelButton.__super__ = com.wiris.system.ui.JsButton;
com.wiris.system.ui.JsContextPanelButton.prototype = $extend(com.wiris.system.ui.JsButton.prototype,{
	getContextPanel: function() {
		return this.contextPanel;
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsButton.prototype.removeListeners.call(this);
		this.contextPanel.removeListeners();
	}
	,buildElement: function() {
		com.wiris.system.ui.JsButton.prototype.buildElement.call(this);
		this.contextPanel = this.contextPanelButton.getComponentBuilder().buildComponent(this.contextPanelButton.getContextPanel(),this);
		if(js.Boot.__instanceof(this.contextPanelButton,com.wiris.util.ui.component.ColorPicker)) this.contextPanel.setTrapFocus(true);
	}
	,contextPanelButton: null
	,contextPanel: null
	,__class__: com.wiris.system.ui.JsContextPanelButton
});
com.wiris.system.ui.JsWindow = $hxClasses["com.wiris.system.ui.JsWindow"] = function(window) {
	com.wiris.system.ui.JsPanel.call(this,window);
	this.window = window;
	this.container = null;
	this.trapFocusDescriptor = null;
	this.moving = false;
	this.resizing = false;
	this.pos1 = 0;
	this.pos2 = 0;
	this.pos3 = 0;
	this.pos4 = 0;
	this.posX = 0;
	this.posY = 0;
	this.resizeDataObjectX = 0;
	this.resizeDataObjectY = 0;
	this.initialWidth = 0;
	this.initialHeight = 0;
};
com.wiris.system.ui.JsWindow.__name__ = ["com","wiris","system","ui","JsWindow"];
com.wiris.system.ui.JsWindow.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsWindow.__super__ = com.wiris.system.ui.JsPanel;
com.wiris.system.ui.JsWindow.prototype = $extend(com.wiris.system.ui.JsPanel.prototype,{
	getClassNameElement: function() {
		return this.getElement();
	}
	,getStyleElement: function() {
		return this.getOriginalElement();
	}
	,updateContent: function() {
		var self = this;
		if(self.titleBarElement.innerText != this.window.getTitle()) {
			com.wiris.system.JsDOMUtils.removeChildren(this.titleBarElement);
			if(this.window.getTitle() != null) {
				var textSpan = js.Lib.document.createElement("span");
				textSpan.appendChild(js.Lib.document.createTextNode(this.window.getTitle()));
				this.titleBarElement.appendChild(textSpan);
				this.titleBarElement.appendChild(this.titleBarButtonsElement);
				var titleBarButtons = HxOverrides.iter(this.window.getTitleBarButtons());
				while( titleBarButtons.hasNext() ) {
					var button = titleBarButtons.next();
					var buttonElement = this.window.getComponentBuilder().buildComponent(button,this).getElement();
					this.titleBarButtonsElement.appendChild(buttonElement);
				}
			}
			if(this.window.isMovable()) com.wiris.system.JsDOMUtils.addClass(this.content,"wrsUI_movable"); else com.wiris.system.JsDOMUtils.removeClass(this.content,"wrsUI_movable");
			if(this.window.isResizable()) com.wiris.system.JsDOMUtils.addClass(this.content,"wrsUI_resizable"); else com.wiris.system.JsDOMUtils.removeClass(this.content,"wrsUI_resizable");
		}
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,visibilityChanged: function(e) {
		var _g = this;
		var self = this;
		if(this.window.isVisible()) {
			this.container.style.setProperty("display","none","important");
			this.container.style.opacity = "0";
			this.container.childNodes[1].style.transform = "scale(0.85)";
			if(!com.wiris.system.ui.JsComponent.isFocusTrapped()) {
				js.Lib.document.body.style.overflow = "hidden";
				js.Lib.document.body.style.overflow = "fixed";
			}
			haxe.Timer.delay(function() {
				self.container.style.setProperty("display","");
				_g.titleBarElement.focus();
				var parent;
				if(_g.window.isRelative() && !com.wiris.system.ui.JsComponent.isFocusTrapped()) parent = _g.window.getParent().getElement(); else parent = js.Lib.document.body;
				_g.trapFocusDescriptor = _g.window.isModal()?com.wiris.system.ui.JsComponent.trapFocus(parent,_g.container.lastChild):null;
				haxe.Timer.delay(function() {
					self.container.style.opacity = "";
					self.container.childNodes[1].style.transform = "";
				},1);
			},1);
		} else {
			this.container.style.setProperty("display","flex","important");
			this.container.style.opacity = "1";
			this.container.childNodes[1].style.transform = "scale(1)";
			if(this.trapFocusDescriptor != null) {
				com.wiris.system.ui.JsComponent.untrapFocus();
				this.trapFocusDescriptor = null;
			}
			if(!com.wiris.system.ui.JsComponent.isFocusTrapped()) {
				js.Lib.document.body.style.overflow = "";
				js.Lib.document.body.style.overflow = "";
			}
			haxe.Timer.delay(function() {
				self.container.style.opacity = "";
				self.container.childNodes[1].style.transform = "";
			},1);
			this.clearRipple();
			this.eventListener = com.wiris.system.JsDOMUtils.addEventListener(this.container,"transitionend",function(event) {
				if(com.wiris.system.JsDOMUtils.getEventTarget(event) == self.container) {
					self.container.style.setProperty("display","");
					com.wiris.system.JsDOMUtils.removeEventListener(_g.eventListener);
				}
			});
		}
		com.wiris.system.ui.JsPanel.prototype.visibilityChanged.call(this,e);
	}
	,recalculatePosition: function() {
		this.content.style.left = Math.min(Std.parseInt(this.content.style.left),js.Lib.window.innerHeight - this.content.offsetHeight) + "px";
		this.content.style.top = Math.min(Std.parseInt(this.content.style.top),js.Lib.window.innerHeight - this.content.offsetHeight) + "px";
		this.getLimitWindow();
	}
	,getLimitWindow: function() {
		if(Std.parseInt(this.content.style.top) < 0) this.content.style.top = "0px";
		if(Std.parseInt(this.content.style.left) < 0) this.content.style.left = "0px";
		if(Std.parseInt(this.content.style.left) + this.content.offsetWidth > js.Lib.window.innerWidth) this.content.style.left = js.Lib.window.innerWidth - this.content.offsetWidth + "px";
		if(Std.parseInt(this.content.style.top) + this.content.offsetHeight > js.Lib.window.innerHeight) this.content.style.top = js.Lib.window.innerHeight - this.content.offsetHeight + "px";
	}
	,changeResizeProperties: function(e) {
		if(!this.resizing) return;
		this.getLimitWindow();
		if(e.type == "mousemove") {
			this.posX = e.clientX;
			this.posY = e.clientY;
		}
		if(e.type == "touchmove") {
			this.posX = e.touches[0].pageX;
			this.posY = e.touches[0].pageY;
		}
		this.content.style.width = this.initialWidth + this.posX - this.resizeDataObjectX + "px";
		this.content.style.height = this.initialHeight + this.posY - this.resizeDataObjectY + "px";
		if(Std.parseInt(this.content.style.width) < 466) this.content.style.width = "466px";
		if(Std.parseInt(this.content.style.height) < 320) this.content.style.height = "320px";
	}
	,closeResizableElement: function(e) {
		this.resizing = false;
	}
	,initializeResizeProperties: function(e) {
		this.resizing = true;
		if(e.type == "mousedown") {
			this.resizeDataObjectX = e.clientX;
			this.resizeDataObjectY = e.clientY;
		}
		if(e.type == "touchstart") {
			this.resizeDataObjectX = e.touches[0].pageX;
			this.resizeDataObjectY = e.touches[0].pageY;
		}
		this.initialWidth = this.content.offsetWidth;
		this.initialHeight = this.content.offsetHeight;
	}
	,createResizeButtons: function() {
		this.buttonResizeBar = this.createElement("div");
		this.buttonResizeBar.className = "wrsUI_button_resize_bar";
		this.resizerBR = this.createElement("div");
		this.resizerBR.className = "wrsUI_bottom_right_resizer";
		this.resizerBR.innerHTML = "◢";
		this.buttonResizeBar.appendChild(this.resizerBR);
		this.content.appendChild(this.buttonResizeBar);
	}
	,getContextMenu: function() {
		if(this.contextMenu == null) this.contextMenu = new com.wiris.system.ui.JsContextMenuProvider(this.container);
		return this.contextMenu;
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsPanel.prototype.removeListeners.call(this);
		this.window.removeChangeListener(this);
	}
	,closeDragElement: function(e) {
		this.moving = false;
	}
	,elementDrag: function(e) {
		if(!this.moving) return;
		if(e.type == "mousemove") {
			this.pos1 = this.pos3 - e.clientX;
			this.pos2 = this.pos4 - e.clientY;
			this.pos3 = e.clientX;
			this.pos4 = e.clientY;
		}
		if(e.type == "touchmove") {
			this.pos1 = this.pos3 - e.touches[0].pageX;
			this.pos2 = this.pos4 - e.touches[0].pageY;
			this.pos3 = e.touches[0].pageX;
			this.pos4 = e.touches[0].pageY;
		}
		this.content.style.top = this.content.offsetTop - this.pos2 + "px";
		this.content.style.left = this.content.offsetLeft - this.pos1 + "px";
		this.getLimitWindow();
		if(Std.parseInt(this.content.style.width) < 466) this.content.style.width = "466px";
		if(Std.parseInt(this.content.style.height) < 320) this.content.style.height = "320px";
	}
	,dragMouseDown: function(e) {
		this.moving = true;
		if(e.type == "mousedown") {
			this.pos3 = e.clientX;
			this.pos4 = e.clientY;
		}
		if(e.type == "touchstart") {
			this.pos3 = e.touches[0].pageX;
			this.pos4 = e.touches[0].pageY;
		}
	}
	,addMultiEventListener: function(element,eventNames,listener) {
		var events = eventNames.split(" ");
		var i = 0;
		while(i < events.length) {
			com.wiris.system.JsDOMUtils.addEventListener(element,events[i],listener);
			++i;
		}
	}
	,buildElement: function() {
		var _g = this;
		this.container = this.createElement("div");
		this.container.className = "wrsUI_aux_window";
		var background = this.createElement("div");
		background.className = "wrsUI_aux_darkLayer";
		com.wiris.system.JsDOMUtils.addEventListener(background,"click",function(e) {
			_g.window.easyModalClose();
		});
		this.container.appendChild(background);
		this.content = this.createElement("div");
		this.content.className = "wrsUI_aux_windowContent";
		com.wiris.system.ui.JsPanel.prototype.buildElement.call(this);
		var element = this.getElement();
		this.titleBarElement = this.createElement("div");
		this.titleBarElement.className = "wrsUI_aux_titleBar";
		this.titleBarElement.setAttribute("tabindex","0");
		this.titleBarButtonsElement = this.createElement("div");
		this.titleBarButtonsElement.className = "wrsUI_aux_titleBar_buttons";
		this.titleBarElement.appendChild(this.titleBarButtonsElement);
		this.content.appendChild(this.titleBarElement);
		this.content.appendChild(element);
		this.container.appendChild(this.content);
		this.setElement(this.container);
		element.className = "wrsUI_aux_windowBody";
		com.wiris.system.JsDOMUtils.addEventListener(this.content,"transitionend",function(e) {
			if(e.target == _g.content) element.wrsUI_updateGUI();
		});
		if(this.window.isMovable()) {
			this.addMultiEventListener(this.titleBarElement,"mousedown touchstart",function(e) {
				_g.dragMouseDown(e);
			});
			this.addMultiEventListener(this.container,"mousemove touchmove",function(e) {
				_g.elementDrag(e);
			});
			com.wiris.system.JsDOMUtils.addEventListener(js.Lib.window,"mouseup",function(e) {
				_g.closeDragElement(e);
			});
			com.wiris.system.JsDOMUtils.addEventListener(js.Lib.window,"touchend",function(e) {
				_g.closeDragElement(e);
			});
		}
		if(this.window.isResizable()) {
			this.createResizeButtons();
			this.addMultiEventListener(this.resizerBR,"mousedown touchstart",function(e) {
				if(_g.content.style.left == "") _g.content.style.left = _g.content.offsetLeft + "px";
				if(_g.content.style.top == "") _g.content.style.top = _g.content.offsetTop + "px";
				_g.initializeResizeProperties(e);
			});
			this.addMultiEventListener(this.container,"mousemove touchmove",function(e) {
				_g.changeResizeProperties(e);
			});
			com.wiris.system.JsDOMUtils.addEventListener(js.Lib.window,"mouseup",function(e) {
				_g.closeResizableElement(e);
			});
			com.wiris.system.JsDOMUtils.addEventListener(js.Lib.window,"touchend",function(e) {
				_g.closeResizableElement(e);
			});
		}
		if(this.window.isMovable() || this.window.isResizable()) com.wiris.system.JsDOMUtils.addEventListener(js.Lib.window,"resize",function(e) {
			if(_g.content.style.left == "") _g.content.style.left = _g.content.offsetLeft + "px";
			if(_g.content.style.top == "") _g.content.style.top = _g.content.offsetTop + "px";
			_g.recalculatePosition();
		});
		this.updateContent();
		this.window.addChangeListener(this);
	}
	,limitWindow: null
	,initialHeight: null
	,initialWidth: null
	,resizeDataObjectY: null
	,resizeDataObjectX: null
	,posY: null
	,posX: null
	,pos4: null
	,pos3: null
	,pos2: null
	,pos1: null
	,resizing: null
	,moving: null
	,eventListener: null
	,originalAppZIndex: null
	,trapFocusDescriptor: null
	,resizerBR: null
	,buttonResizeBar: null
	,titleBarButtonsElement: null
	,titleBarElement: null
	,content: null
	,container: null
	,window: null
	,__class__: com.wiris.system.ui.JsWindow
});
com.wiris.system.ui.JsDialogStack = $hxClasses["com.wiris.system.ui.JsDialogStack"] = function(dialogStack) {
	com.wiris.system.ui.JsWindow.call(this,dialogStack);
	this.dialogStack = dialogStack;
	this.dialogStack.addActionListener(this);
};
com.wiris.system.ui.JsDialogStack.__name__ = ["com","wiris","system","ui","JsDialogStack"];
com.wiris.system.ui.JsDialogStack.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener,com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsDialogStack.__super__ = com.wiris.system.ui.JsWindow;
com.wiris.system.ui.JsDialogStack.prototype = $extend(com.wiris.system.ui.JsWindow.prototype,{
	actionPerformed: function(e) {
		var command = e.getAction().getCommand();
		this.clearRippleEffects();
		if(command == "dialogPushed") {
			var content;
			var topDialogModel = this.dialogStack.topDialog();
			if(topDialogModel.getElement() != null) content = topDialogModel.getElement().firstChild.nextSibling; else {
				var jsDialog = this.dialogStack.getComponentBuilder().buildComponent(topDialogModel,this);
				this.components.push(jsDialog);
				content = jsDialog.getElement().firstChild.nextSibling;
			}
			content.firstChild.style.opacity = "0";
			content.lastChild.style.opacity = "0";
			var originalWidth = this.container.lastChild.offsetWidth;
			var originalHeight = this.container.lastChild.offsetHeight;
			com.wiris.system.JsDOMUtils.addClass(this.getElement().lastChild,"wrsUI_hidden");
			this.getElement().appendChild(content);
			var newWidth = this.container.lastChild.offsetWidth;
			var newHeight = this.container.lastChild.offsetHeight;
			this.getElement().removeChild(content);
			this.getElement().appendChild(content);
			var self = this;
			self.container.lastChild.style.transform = "scale(" + originalWidth / newWidth + ", " + originalHeight / newHeight + ")";
			haxe.Timer.delay(function() {
				content.style.transform = "scale(1)";
				content.firstChild.style.opacity = "1";
				content.lastChild.style.opacity = "1";
			},1);
		} else if(command == "dialogPopped") {
			var dialogPopped = e.getAction().getParameter("dialog");
			var self = this;
			this.container.lastChild.firstChild.style.opacity = "0";
			this.container.lastChild.lastChild.style.opacity = "0";
			this.container.children[this.container.children.length - 2].firstChild.style.opacity = "0";
			this.container.children[this.container.children.length - 2].lastChild.style.opacity = "0";
			var originalWidth = this.container.lastChild.offsetWidth;
			var originalHeight = this.container.lastChild.offsetHeight;
			com.wiris.system.JsDOMUtils.addClass(this.container.lastChild,"wrsUI_hidden");
			com.wiris.system.JsDOMUtils.removeClass(this.container.children[this.container.children.length - 2],"wrsUI_hidden");
			var newWidth = this.container.children[this.container.children.length - 2].offsetWidth;
			var newHeight = this.container.children[this.container.children.length - 2].offsetHeight;
			com.wiris.system.JsDOMUtils.addClass(this.container.children[this.container.children.length - 2],"wrsUI_hidden");
			com.wiris.system.JsDOMUtils.removeClass(this.container.lastChild,"wrsUI_hidden");
			dialogPopped.getElement().appendChild(this.container.lastChild);
			com.wiris.system.JsDOMUtils.removeClass(this.container.lastChild,"wrsUI_hidden");
			self.container.lastChild.style.transform = "scale(" + originalWidth / newWidth + ", " + originalHeight / newHeight + ")";
			haxe.Timer.delay(function() {
				self.container.lastChild.firstChild.style.opacity = "1";
				self.container.lastChild.lastChild.style.opacity = "1";
				self.container.lastChild.style.transform = "scale(1)";
			},1);
		}
		if(this.dialogStack.empty()) this.window = this.dialogStack; else this.window = this.dialogStack.topDialog();
	}
	,buildElement: function() {
		var dialog = this.dialogStack.topDialog();
		if(dialog != null) this.window = dialog; else this.window = this.dialogStack;
		com.wiris.system.ui.JsWindow.prototype.buildElement.call(this);
	}
	,dialogStack: null
	,__class__: com.wiris.system.ui.JsDialogStack
});
com.wiris.util.ui.interaction.DragAndDropListener = $hxClasses["com.wiris.util.ui.interaction.DragAndDropListener"] = function() { }
com.wiris.util.ui.interaction.DragAndDropListener.__name__ = ["com","wiris","util","ui","interaction","DragAndDropListener"];
com.wiris.util.ui.interaction.DragAndDropListener.prototype = {
	drop: null
	,dragEnter: null
	,dragEnd: null
	,dragOver: null
	,drag: null
	,dragStart: null
	,__class__: com.wiris.util.ui.interaction.DragAndDropListener
}
com.wiris.system.ui.JsDragAndDropListener = $hxClasses["com.wiris.system.ui.JsDragAndDropListener"] = function(component) {
	this.component = component;
	this.element = component.getElement();
	this.dragX = null;
	this.dragY = null;
	this.originalX = null;
	this.originalY = null;
	this.originalLeft = null;
	this.originalTop = null;
	this.eventListener = null;
};
com.wiris.system.ui.JsDragAndDropListener.__name__ = ["com","wiris","system","ui","JsDragAndDropListener"];
com.wiris.system.ui.JsDragAndDropListener.__interfaces__ = [com.wiris.util.ui.interaction.ComponentTreeListener,com.wiris.util.ui.interaction.DragAndDropListener];
com.wiris.system.ui.JsDragAndDropListener.prototype = {
	childAdded: function(e) {
	}
	,childMoved: function(e) {
		if(this.originalLeft == null || this.originalTop == null || this.originalX == null || this.originalY == null) return;
		var left = this.element.style.left.slice(0,-2);
		var top = this.element.style.top.slice(0,-2);
		if(this.element.offsetLeft - left != this.originalLeft) {
			this.originalX = this.originalX + (this.element.offsetLeft - left - this.originalLeft);
			this.originalLeft = this.element.offsetLeft - left;
		}
		if(this.element.offsetTop - top != this.originalTop) {
			this.originalY = this.originalY + (this.element.offsetTop - top - this.originalTop);
			this.originalTop = this.element.offsetTop - top;
		}
		if(com.wiris.system.JsDOMUtils.hasClass(this.element,"wrsUI_dragHorizontal")) this.element.style.left = left - this.originalX + "px";
		if(com.wiris.system.JsDOMUtils.hasClass(this.element,"wrsUI_dragVertical")) this.element.style.top = top - this.originalY + "px";
	}
	,childRemoved: function(e) {
		this.cleanUp();
	}
	,drop: function(e) {
	}
	,dragOver: function(e) {
	}
	,dragEnter: function(e) {
	}
	,dragEnd: function(e) {
		this.cleanUp();
	}
	,drag: function(e) {
		if(com.wiris.system.JsDOMUtils.hasClass(this.element,"wrsUI_dragHorizontal")) this.element.style.left = this.dragX - this.originalX + "px";
		if(com.wiris.system.JsDOMUtils.hasClass(this.element,"wrsUI_dragVertical")) this.element.style.top = this.dragY - this.originalY + "px";
		this.element.style.zIndex = 999;
	}
	,dragStart: function(e) {
		var _g = this;
		this.originalX = e.getClientX();
		this.originalY = e.getClientY();
		this.originalLeft = this.element.offsetLeft;
		this.originalTop = this.element.offsetTop;
		this.element.style.opacity = 1.0;
		com.wiris.system.JsDOMUtils.addClass(this.element,"wrsUI_aux_dragging");
		var callbackFunction = function(e1) {
			_g.dragX = e1.clientX;
			_g.dragY = e1.clientY;
		};
		this.eventListener = com.wiris.system.JsDOMUtils.addEventListener(js.Lib.document,"dragover",callbackFunction);
	}
	,cleanUp: function() {
		this.element.style.left = null;
		this.element.style.top = null;
		this.element.style.zIndex = null;
		this.element.style.opacity = null;
		com.wiris.system.JsDOMUtils.removeClass(this.element,"wrsUI_aux_dragging");
		this.originalLeft = null;
		this.originalTop = null;
		this.originalX = null;
		this.originalY = null;
		this.dragX = null;
		this.dragY = null;
		if(this.eventListener != null) {
			com.wiris.system.JsDOMUtils.removeEventListener(this.eventListener);
			this.eventListener = null;
		}
	}
	,eventListener: null
	,originalTop: null
	,originalLeft: null
	,originalY: null
	,originalX: null
	,dragY: null
	,dragX: null
	,element: null
	,component: null
	,__class__: com.wiris.system.ui.JsDragAndDropListener
}
com.wiris.system.ui.JsDrawerPanel = $hxClasses["com.wiris.system.ui.JsDrawerPanel"] = function(drawerPanel) {
	com.wiris.system.ui.JsPanel.call(this,drawerPanel);
	this.drawerPanel = drawerPanel;
};
com.wiris.system.ui.JsDrawerPanel.__name__ = ["com","wiris","system","ui","JsDrawerPanel"];
com.wiris.system.ui.JsDrawerPanel.__super__ = com.wiris.system.ui.JsPanel;
com.wiris.system.ui.JsDrawerPanel.prototype = $extend(com.wiris.system.ui.JsPanel.prototype,{
	visibilityChanged: function(e) {
		var element = this.getElement();
		var drawerPanel = this.drawerPanel;
		if(drawerPanel.isVisible()) {
			element.style.display = "none";
			element.firstChild.style.opacity = "0";
			element.lastChild.style.boxShadow = "none";
			if(drawerPanel.hasClass(com.wiris.util.ui.component.DrawerPanel.CLASS_DRAWER_PANEL_RIGHT_DRAWER)) element.lastChild.style.transform = "translateX(100%)"; else if(drawerPanel.hasClass(com.wiris.util.ui.component.DrawerPanel.CLASS_DRAWER_PANEL_BOTTOM_DRAWER)) element.lastChild.style.transform = "translateY(100%)"; else element.lastChild.style.transform = "translateX(-100%)";
			haxe.Timer.delay(function() {
				element.lastChild.scrollTop = 0;
				element.style.display = null;
				requestAnimationFrame(function() {
					element.firstChild.style.opacity = "";
					element.lastChild.style.transform = "";
					element.lastChild.style.boxShadow = "";
					haxe.Timer.delay(function() {
						if(!drawerPanel.hasClass(com.wiris.util.ui.component.DrawerPanel.CLASS_DRAWER_PANEL_PERSISTENT_DRAWER_PANEL)) com.wiris.system.ui.JsComponent.trapFocus(drawerPanel.getParent().getElement(),element.lastChild);
					},225);
				});
			},1);
		} else {
			element.style.setProperty("display","block","important");
			if(!drawerPanel.hasClass(com.wiris.util.ui.component.DrawerPanel.CLASS_DRAWER_PANEL_PERSISTENT_DRAWER_PANEL)) com.wiris.system.ui.JsComponent.untrapFocus();
			requestAnimationFrame(function() {
				element.firstChild.style.opacity = "0";
				element.lastChild.style.boxShadow = "none";
				if(drawerPanel.hasClass(com.wiris.util.ui.component.DrawerPanel.CLASS_DRAWER_PANEL_RIGHT_DRAWER)) element.lastChild.style.transform = "translateX(100%)"; else if(drawerPanel.hasClass(com.wiris.util.ui.component.DrawerPanel.CLASS_DRAWER_PANEL_BOTTOM_DRAWER)) element.lastChild.style.transform = "translateY(100%)"; else element.lastChild.style.transform = "translateX(-100%)";
				element.lastChild.addEventListener("transitionend",function(e1) {
					element.lastChild.removeEventListener("transitionend",arguments.callee);
					element.style.display = null;
					element.firstChild.style.opacity = "";
					element.lastChild.style.transform = "";
					element.lastChild.style.boxShadow = "";
				});
			});
		}
		com.wiris.system.ui.JsPanel.prototype.visibilityChanged.call(this,e);
	}
	,buildElement: function() {
		var _g = this;
		com.wiris.system.ui.JsPanel.prototype.buildElement.call(this);
		var element = this.getElement();
		element.className = "wrsUI_aux_drawerContent";
		element.setAttribute("tabindex","0");
		var background = this.createElement("div");
		background.className = "wrsUI_aux_darkLayer";
		com.wiris.system.JsDOMUtils.addEventListener(background,"click",function(e) {
			_g.drawerPanel.close();
		});
		var container = this.createElement("div");
		container.appendChild(background);
		container.appendChild(element);
		this.setElement(container);
		this.setOriginalElement(element);
	}
	,drawerPanel: null
	,__class__: com.wiris.system.ui.JsDrawerPanel
});
com.wiris.system.ui.JsDrawingPanel = $hxClasses["com.wiris.system.ui.JsDrawingPanel"] = function(drawingPanel) {
	com.wiris.system.ui.JsPanel.call(this,drawingPanel);
	this.drawingPanel = drawingPanel;
};
com.wiris.system.ui.JsDrawingPanel.__name__ = ["com","wiris","system","ui","JsDrawingPanel"];
com.wiris.system.ui.JsDrawingPanel.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsDrawingPanel.__super__ = com.wiris.system.ui.JsPanel;
com.wiris.system.ui.JsDrawingPanel.prototype = $extend(com.wiris.system.ui.JsPanel.prototype,{
	updateGUI: function() {
		var element = this.getElement();
		if(element.offsetWidth != this.drawingPanel.getCanvasWidth() || element.offsetHeight != this.drawingPanel.getCanvasHeight()) {
			if(element.offsetWidth > 0 && element.offsetHeight > 0) {
				this.drawingPanel.setCanvasSize(element.offsetWidth,element.offsetHeight);
				this.canvas.setAttribute("width",element.offsetWidth + "");
				this.canvas.setAttribute("height",element.offsetHeight + "");
				this.repaint();
			}
		}
	}
	,tY: function(y) {
		return this.drawingPanel.virtualToRealPointY(y);
	}
	,tX: function(x) {
		return this.drawingPanel.virtualToRealPointX(x);
	}
	,paintStroke: function(stroke,color,width,fill) {
		if(fill == null) fill = false;
		this.context.lineWidth = width;
		this.context.strokeStyle = color;
		this.context.lineJoin = "round";
		this.context.lineCap = "round";
		if(stroke.length > 0) {
			this.context.beginPath();
			this.context.moveTo(this.tX(stroke[0][0]),this.tY(stroke[0][1]));
			var i = 1;
			while(i < stroke.length - 1) {
				var cX = (stroke[i][0] + stroke[i + 1][0]) / 2;
				var cY = (stroke[i][1] + stroke[i + 1][1]) / 2;
				this.context.quadraticCurveTo(this.tX(stroke[i][0]),this.tY(stroke[i][1]),this.tX(cX),this.tY(cY));
				++i;
			}
			if(i == stroke.length) i = 0;
			var originX = this.tX(stroke[(i - 1) % stroke.length][0]);
			var destinationX = this.tX(stroke[i][0]);
			if(Math.abs(destinationX - originX) < com.wiris.system.ui.JsDrawingPanel.MIN_POINT_DISTANCE) {
				if(destinationX < originX) destinationX = originX - com.wiris.system.ui.JsDrawingPanel.MIN_POINT_DISTANCE; else destinationX = originX + com.wiris.system.ui.JsDrawingPanel.MIN_POINT_DISTANCE;
			}
			this.context.lineTo(destinationX,this.tY(stroke[i][1]));
			if(fill) {
				this.context.fillStyle = color;
				this.context.fill();
			}
			this.context.stroke();
		}
	}
	,repaint: function() {
		this.context.clearRect(0,0,this.drawingPanel.getCanvasWidth(),this.drawingPanel.getCanvasHeight());
		var strokes = this.drawingPanel.getStrokes();
		if(strokes.length == 0) return;
		var n = strokes.length;
		var deletionPolygon = this.drawingPanel.getDeletionPolygon();
		if(deletionPolygon != null) {
			--n;
			if(com.wiris.system.ui.JsDrawingPanel.DEBUG) this.paintStroke(deletionPolygon,"#ffff00",0,true);
		}
		var lineWidth = this.drawingPanel.getLineWidth();
		var lineColor = this.drawingPanel.getLineColor().toCSSHex();
		var deletedStrokeColor = this.drawingPanel.getDeletedStrokeColor().toCSSHex();
		var i = 0;
		while(i < n) {
			if(deletionPolygon != null && this.drawingPanel.strokeWillBeDeleted(strokes[i])) this.paintStroke(strokes[i],deletedStrokeColor,lineWidth); else this.paintStroke(strokes[i],lineColor,lineWidth);
			++i;
		}
		if(deletionPolygon != null) this.paintStroke(strokes[strokes.length - 1],this.drawingPanel.getDeletionLineColor().toCSSHex(),lineWidth);
	}
	,stateChanged: function(e) {
		this.repaint();
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsPanel.prototype.removeListeners.call(this);
		this.drawingPanel.removeChangeListener(this);
	}
	,buildElement: function() {
		com.wiris.system.ui.JsPanel.prototype.buildElement.call(this);
		var element = this.getElement();
		var canvasContainer = this.createElement("div");
		canvasContainer.className = "wrsUI_aux_canvasContainer";
		element.appendChild(canvasContainer);
		this.canvas = this.createElement("canvas");
		this.context = this.canvas.getContext("2d");
		canvasContainer.appendChild(this.canvas);
		this.drawingPanel.addChangeListener(this);
		var timer = new haxe.Timer(100);
		timer.run = $bind(this,this.updateGUI);
	}
	,context: null
	,canvas: null
	,canvasContainer: null
	,drawingPanel: null
	,__class__: com.wiris.system.ui.JsDrawingPanel
});
com.wiris.system.ui.JsDropdown = $hxClasses["com.wiris.system.ui.JsDropdown"] = function(dropdown,resourceLoader) {
	com.wiris.system.ui.JsContextPanelButton.call(this,dropdown,resourceLoader);
	this.dropdown = dropdown;
};
com.wiris.system.ui.JsDropdown.__name__ = ["com","wiris","system","ui","JsDropdown"];
com.wiris.system.ui.JsDropdown.__super__ = com.wiris.system.ui.JsContextPanelButton;
com.wiris.system.ui.JsDropdown.prototype = $extend(com.wiris.system.ui.JsContextPanelButton.prototype,{
	updateContent: function() {
		if(this.element.className.indexOf("wrsUI_aux_dropdown_container") < 0) return;
		var element = this.getElement();
		if(element.firstChild.nextSibling != null) element.removeChild(element.firstChild.nextSibling);
		element = element.firstChild;
		while(element.firstChild.nextSibling != null) element.removeChild(element.firstChild.nextSibling);
		var title = this.dropdown.getTitle();
		if(title != null) {
			var titleElement = this.createElement("span");
			titleElement.className = "wrsUI_aux_dropdown_title";
			titleElement.appendChild(js.Lib.document.createTextNode(title));
			element.appendChild(titleElement);
			var br = this.createElement("br");
			element.appendChild(br);
		}
		var text = this.dropdown.getText();
		if(text != null) {
			var textElement = this.createElement("span");
			textElement.className = "wrsUI_aux_dropdown_value";
			textElement.appendChild(js.Lib.document.createTextNode(text));
			element.appendChild(textElement);
		}
		var helperText = this.dropdown.getHelperText();
		if(helperText != null) {
			var helperTextElement = this.createElement("span");
			helperTextElement.className = "wrsUI_aux_dropdown_helperText";
			helperTextElement.appendChild(js.Lib.document.createTextNode(helperText));
			element.parentNode.appendChild(helperTextElement);
		}
		if(this.dropdown.getIcon() != null) element.appendChild(com.wiris.system.ui.JsIcon.createIconElement(this.dropdown.getIcon(),this.resourceLoader));
		if(this.dropdown.getTooltip() != null) element.setAttribute("title",this.dropdown.getTooltip());
		if(this.dropdown.isVisible()) this.container.className = "wrsUI_aux_dropdown_container"; else this.container.className = "wrsUI_aux_dropdown_container wrsUI_hidden";
		this.element.wrsUI_updateGUI();
	}
	,visibilityChanged: function(e) {
		if(this.dropdown.isVisible()) this.container.className = "wrsUI_aux_dropdown_container"; else this.container.className = "wrsUI_aux_dropdown_container wrsUI_hidden";
		com.wiris.system.ui.JsContextPanelButton.prototype.visibilityChanged.call(this,e);
	}
	,getInputElements: function() {
		var elements = new Array();
		elements.push(this.getStyleElement());
		return elements;
	}
	,getStyleElement: function() {
		return this.element.firstChild;
	}
	,buildElement: function() {
		com.wiris.system.ui.JsContextPanelButton.prototype.buildElement.call(this);
		this.container = this.createElement("div");
		this.container.className = "wrsUI_aux_dropdown_container";
		this.container.appendChild(this.getElement());
		this.setElement(this.container);
		this.updateContent();
	}
	,container: null
	,dropdown: null
	,__class__: com.wiris.system.ui.JsDropdown
});
com.wiris.system.ui.JsTextComponent = $hxClasses["com.wiris.system.ui.JsTextComponent"] = function(textComponent) {
	com.wiris.system.ui.JsComponent.call(this,textComponent);
	this.textComponent = textComponent;
};
com.wiris.system.ui.JsTextComponent.__name__ = ["com","wiris","system","ui","JsTextComponent"];
com.wiris.system.ui.JsTextComponent.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsTextComponent.__super__ = com.wiris.system.ui.JsComponent;
com.wiris.system.ui.JsTextComponent.prototype = $extend(com.wiris.system.ui.JsComponent.prototype,{
	updateEnabled: function() {
		com.wiris.system.ui.JsComponent.prototype.updateEnabled.call(this);
		if(this.component.isEnabled()) this.textInput.removeAttribute("disabled"); else this.textInput.setAttribute("disabled","true");
	}
	,onTextInputMouseDown: function(e) {
		var element = this.getElement();
		var mousePosition = com.wiris.system.JsDOMUtils.getMousePosition(element,e);
		if(!this.textComponent.hasClass("textComponentOutlined")) {
			this.focusLine.style.left = mousePosition[0] + "px";
			this.focusLine.style.right = element.offsetWidth - mousePosition[0] + "px";
			this.onTextInputFocus(null);
		}
	}
	,onTextInputBlur: function(e) {
		if(!this.textComponent.hasClass("textComponentOutlined")) {
			this.focusLine.style.left = "50%";
			this.focusLine.style.right = "50%";
		}
	}
	,onTextInputFocus: function(e) {
		var self = this;
		if(!this.textComponent.hasClass("textComponentOutlined")) setTimeout(function() {
			self.focusLine.style.left = "0";
			self.focusLine.style.right = "0";
		},1);
	}
	,onTextInputInput: function(e) {
		var self = this;
		if(js.Boot.__instanceof(this.textComponent,com.wiris.util.ui.component.TextField)) (js.Boot.__cast(this.textComponent , com.wiris.util.ui.component.TextField)).setValid(self.textInput.validity.valid);
		this.textComponent.setValue(self.textInput.value);
	}
	,getInputElements: function() {
		var elements = new Array();
		elements.push(this.textInput);
		return elements;
	}
	,updateContent: function() {
		var self = this;
		if(self.textInput.value != this.textComponent.getValue()) self.textInput.value = this.textComponent.getValue();
		if(self.textInput.placeholder != this.textComponent.getPlaceholder()) self.textInput.placeholder = this.textComponent.getPlaceholder();
		if(self.textLabel.innerText != this.textComponent.getLabel()) {
			com.wiris.system.JsDOMUtils.removeChildren(this.textLabel);
			this.textLabel.appendChild(js.Lib.document.createTextNode(this.textComponent.getLabel()));
		}
		if(self.textInput.readOnly != this.textComponent.isReadOnly()) self.textInput.readOnly = this.textComponent.isReadOnly();
		if(self.prefix.innerText != this.textComponent.getPrefix()) self.prefix.innerText = this.textComponent.getPrefix();
		if(self.suffix.innerText != this.textComponent.getSuffix()) self.suffix.innerText = this.textComponent.getSuffix();
		if(js.Boot.__instanceof(this.textComponent,com.wiris.util.ui.component.TextField)) {
			var helperText = "";
			var textField = this.textComponent;
			if(self.textInput.required != textField.isRequired()) self.textInput.required = textField.isRequired();
			if(textField.getStatus() == com.wiris.util.ui.component.InputComponent.STATUS_ERROR) helperText = textField.getErrorText(); else helperText = textField.getHelperText();
			var sizeOrMinusOne = self.textInput.hasAttribute("size")?self.textInput.size:com.wiris.util.ui.component.TextField.NO_SIZE;
			if(sizeOrMinusOne != textField.getSize()) {
				if(textField.getSize() == com.wiris.util.ui.component.TextField.NO_SIZE) self.textInput.removeAttribute("size"); else self.textInput.size = "" + textField.getSize();
			}
			if(self.helperText.innerText != helperText) {
				self.helperText.style.display = "block";
				self.helperText.innerText = helperText;
			}
		}
		if(js.Boot.__instanceof(this.textComponent,com.wiris.util.ui.component.NumberTextField)) {
			var numberTextField = this.textComponent;
			if(self.textInput.min != this.textComponent.getMinimum()) self.textInput.min = this.textComponent.getMinimum();
			if(self.textInput.max != this.textComponent.getMaximum()) self.textInput.max = this.textComponent.getMaximum();
			if(self.textInput.step != this.textComponent.getStep()) self.textInput.step = this.textComponent.getStep();
			if(!numberTextField.usesMinimum()) self.textInput.removeAttribute("min");
			if(!numberTextField.usesMaximum()) self.textInput.removeAttribute("max");
			if(numberTextField.getStep() == 0) self.textInput.removeAttribute("step");
		}
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsComponent.prototype.removeListeners.call(this);
		this.textComponent.removeChangeListener(this);
	}
	,buildTextInput: function() {
		var self = this;
		var input = null;
		if(js.Boot.__instanceof(this.textComponent,com.wiris.util.ui.component.TextField)) {
			input = this.createElement("input");
			if(js.Boot.__instanceof(this.textComponent,com.wiris.util.ui.component.NumberTextField)) {
				input.type = "number";
				if(this.textComponent.usesMinimum()) input.min = self.textComponent.getMinimum();
				if(this.textComponent.usesMaximum()) input.max = self.textComponent.getMaximum();
				input.step = self.textComponent.getStep();
			} else if(js.Boot.__instanceof(this.textComponent,com.wiris.util.ui.component.PasswordTextField)) input.type = "password"; else input.type = "text";
			var textField = this.textComponent;
			if(textField.usesSize()) input.size = "" + textField.getSize();
		} else if(js.Boot.__instanceof(this.textComponent,com.wiris.util.ui.component.TextArea)) input = this.createElement("textarea");
		return input;
	}
	,buildElement: function() {
		var self = this;
		var element = this.createElement("div");
		this.setElement(element);
		this.textLabel = this.createElement("label");
		this.textInput = null;
		this.focusLine = this.createElement("hr");
		this.prefix = this.createElement("span");
		this.suffix = this.createElement("span");
		this.helperText = this.createElement("p");
		this.prefix.className = "wrsUI_aux_textComponentPrefix";
		this.suffix.className = "wrsUI_aux_textComponentSuffix";
		this.helperText.className = "wrsUI_aux_textComponentHelperText";
		self.helperText.style.display = "none";
		this.textInput = this.buildTextInput();
		com.wiris.system.JsDOMUtils.addEventListener(this.textInput,"input",$bind(this,this.onTextInputInput));
		com.wiris.system.JsDOMUtils.addEventListener(this.textInput,"focus",$bind(this,this.onTextInputFocus));
		com.wiris.system.JsDOMUtils.addEventListener(this.textInput,"blur",$bind(this,this.onTextInputBlur));
		com.wiris.system.JsDOMUtils.addEventListener(this.textInput,"mousedown",$bind(this,this.onTextInputMouseDown));
		this.element.appendChild(this.textLabel);
		this.element.appendChild(this.prefix);
		this.element.appendChild(this.textInput);
		this.element.appendChild(this.suffix);
		this.element.appendChild(this.focusLine);
		this.element.appendChild(this.helperText);
		this.updateContent();
		this.textComponent.addChangeListener(this);
	}
	,suffix: null
	,prefix: null
	,helperText: null
	,focusLine: null
	,textLabel: null
	,textInput: null
	,textComponent: null
	,__class__: com.wiris.system.ui.JsTextComponent
});
com.wiris.system.ui.JsDropdownTextField = $hxClasses["com.wiris.system.ui.JsDropdownTextField"] = function(dropdownTextField) {
	com.wiris.system.ui.JsTextComponent.call(this,dropdownTextField);
	this.dropdownTextField = dropdownTextField;
};
com.wiris.system.ui.JsDropdownTextField.__name__ = ["com","wiris","system","ui","JsDropdownTextField"];
com.wiris.system.ui.JsDropdownTextField.__super__ = com.wiris.system.ui.JsTextComponent;
com.wiris.system.ui.JsDropdownTextField.prototype = $extend(com.wiris.system.ui.JsTextComponent.prototype,{
	updateContent: function() {
		com.wiris.system.ui.JsTextComponent.prototype.updateContent.call(this);
		var self = this;
		if(js.Boot.__instanceof(this.textComponent,com.wiris.util.ui.component.NumberDropdownTextField)) {
			if(self.textInput.min != this.textComponent.getMinimum()) self.textInput.min = this.textComponent.getMinimum();
			if(self.textInput.max != this.textComponent.getMaximum()) self.textInput.max = this.textComponent.getMaximum();
			if(self.textInput.step != this.textComponent.getStep()) self.textInput.step = this.textComponent.getStep();
		}
	}
	,getContextPanel: function() {
		return this.contextPanel;
	}
	,buildTextInput: function() {
		var self = this;
		var input = com.wiris.system.ui.JsTextComponent.prototype.buildTextInput.call(this);
		if(js.Boot.__instanceof(this.dropdownTextField,com.wiris.util.ui.component.NumberDropdownTextField)) {
			input.type = "number";
			input.min = self.dropdownTextField.getMinimum();
			input.max = self.dropdownTextField.getMaximum();
			input.step = self.dropdownTextField.getStep();
		}
		return input;
	}
	,buildElement: function() {
		com.wiris.system.ui.JsTextComponent.prototype.buildElement.call(this);
		this.contextPanel = this.dropdownTextField.getComponentBuilder().buildComponent(this.dropdownTextField.getContextMenu(),this);
		this.contextPanel.setUseClamp(false);
	}
	,dropdownTextField: null
	,contextPanel: null
	,__class__: com.wiris.system.ui.JsDropdownTextField
});
com.wiris.util.ui.interaction.Event = $hxClasses["com.wiris.util.ui.interaction.Event"] = function() { }
com.wiris.util.ui.interaction.Event.__name__ = ["com","wiris","util","ui","interaction","Event"];
com.wiris.util.ui.interaction.Event.prototype = {
	getEventType: null
	,getTarget: null
	,getSource: null
	,defaultIsPrevented: null
	,isPropagating: null
	,preventDefault: null
	,stopPropagation: null
	,__class__: com.wiris.util.ui.interaction.Event
}
com.wiris.util.ui.interaction.TouchEvent = $hxClasses["com.wiris.util.ui.interaction.TouchEvent"] = function() { }
com.wiris.util.ui.interaction.TouchEvent.__name__ = ["com","wiris","util","ui","interaction","TouchEvent"];
com.wiris.util.ui.interaction.TouchEvent.__interfaces__ = [com.wiris.util.ui.interaction.Event];
com.wiris.util.ui.interaction.TouchEvent.prototype = {
	getTouchEventType: null
	,getChangedTouches: null
	,getTargetTouches: null
	,getTouches: null
	,__class__: com.wiris.util.ui.interaction.TouchEvent
}
com.wiris.util.ui.interaction.MouseMotionEvent = $hxClasses["com.wiris.util.ui.interaction.MouseMotionEvent"] = function() { }
com.wiris.util.ui.interaction.MouseMotionEvent.__name__ = ["com","wiris","util","ui","interaction","MouseMotionEvent"];
com.wiris.util.ui.interaction.MouseMotionEvent.__interfaces__ = [com.wiris.util.ui.interaction.Event];
com.wiris.util.ui.interaction.MouseMotionEvent.prototype = {
	getMouseMotionEventType: null
	,getPageY: null
	,getPageX: null
	,getY: null
	,getX: null
	,__class__: com.wiris.util.ui.interaction.MouseMotionEvent
}
com.wiris.util.ui.interaction.MouseEvent = $hxClasses["com.wiris.util.ui.interaction.MouseEvent"] = function() { }
com.wiris.util.ui.interaction.MouseEvent.__name__ = ["com","wiris","util","ui","interaction","MouseEvent"];
com.wiris.util.ui.interaction.MouseEvent.__interfaces__ = [com.wiris.util.ui.interaction.Event];
com.wiris.util.ui.interaction.MouseEvent.prototype = {
	getMouseEventType: null
	,getButton: null
	,getPageY: null
	,getPageX: null
	,getY: null
	,getX: null
	,__class__: com.wiris.util.ui.interaction.MouseEvent
}
com.wiris.util.ui.interaction.KeyEvent = $hxClasses["com.wiris.util.ui.interaction.KeyEvent"] = function() { }
com.wiris.util.ui.interaction.KeyEvent.__name__ = ["com","wiris","util","ui","interaction","KeyEvent"];
com.wiris.util.ui.interaction.KeyEvent.__interfaces__ = [com.wiris.util.ui.interaction.Event];
com.wiris.util.ui.interaction.KeyEvent.prototype = {
	getKeyEventType: null
	,isCtrlLikeModifierPressed: null
	,isMetaPressed: null
	,isAltPressed: null
	,isCtrlPressed: null
	,isShiftPressed: null
	,getCharCode: null
	,getKeyCode: null
	,__class__: com.wiris.util.ui.interaction.KeyEvent
}
com.wiris.util.ui.interaction.FocusEvent = $hxClasses["com.wiris.util.ui.interaction.FocusEvent"] = function() { }
com.wiris.util.ui.interaction.FocusEvent.__name__ = ["com","wiris","util","ui","interaction","FocusEvent"];
com.wiris.util.ui.interaction.FocusEvent.__interfaces__ = [com.wiris.util.ui.interaction.Event];
com.wiris.util.ui.interaction.FocusEvent.prototype = {
	getFocusEventType: null
	,__class__: com.wiris.util.ui.interaction.FocusEvent
}
com.wiris.util.ui.interaction.DragAndDropEvent = $hxClasses["com.wiris.util.ui.interaction.DragAndDropEvent"] = function() { }
com.wiris.util.ui.interaction.DragAndDropEvent.__name__ = ["com","wiris","util","ui","interaction","DragAndDropEvent"];
com.wiris.util.ui.interaction.DragAndDropEvent.__interfaces__ = [com.wiris.util.ui.interaction.Event];
com.wiris.util.ui.interaction.DragAndDropEvent.prototype = {
	getDragAndDropEventType: null
	,getDraggedComponent: null
	,getClientY: null
	,getClientX: null
	,getY: null
	,getX: null
	,__class__: com.wiris.util.ui.interaction.DragAndDropEvent
}
com.wiris.util.ui.interaction.ComponentEvent = $hxClasses["com.wiris.util.ui.interaction.ComponentEvent"] = function() { }
com.wiris.util.ui.interaction.ComponentEvent.__name__ = ["com","wiris","util","ui","interaction","ComponentEvent"];
com.wiris.util.ui.interaction.ComponentEvent.__interfaces__ = [com.wiris.util.ui.interaction.Event];
com.wiris.util.ui.interaction.ComponentEvent.prototype = {
	getComponentEventType: null
	,__class__: com.wiris.util.ui.interaction.ComponentEvent
}
com.wiris.util.ui.interaction.ChangeEvent = $hxClasses["com.wiris.util.ui.interaction.ChangeEvent"] = function() { }
com.wiris.util.ui.interaction.ChangeEvent.__name__ = ["com","wiris","util","ui","interaction","ChangeEvent"];
com.wiris.util.ui.interaction.ChangeEvent.__interfaces__ = [com.wiris.util.ui.interaction.Event];
com.wiris.util.ui.interaction.ChangeEvent.prototype = {
	getChangeEventType: null
	,__class__: com.wiris.util.ui.interaction.ChangeEvent
}
com.wiris.system.ui.JsEvent = $hxClasses["com.wiris.system.ui.JsEvent"] = function(source,component,e) {
	if(e.wrsUI_targetComponent == null) e.wrsUI_targetComponent = component;
	this.target = e.wrsUI_targetComponent;
	this.source = component;
	this.propagating = true;
	this.defaultPrevented = false;
	this.jsEvent = e;
	if(e.type == "click") {
		this.eventType = com.wiris.util.ui.interaction.EventType.MOUSE_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.MOUSE_EVENT_CLICK;
	} else if(e.type == "mousedown") {
		this.eventType = com.wiris.util.ui.interaction.EventType.MOUSE_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.MOUSE_EVENT_PRESS;
	} else if(e.type == "mouseup") {
		this.eventType = com.wiris.util.ui.interaction.EventType.MOUSE_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.MOUSE_EVENT_RELEASE;
	} else if(e.type == "mouseenter") {
		this.eventType = com.wiris.util.ui.interaction.EventType.MOUSE_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.MOUSE_EVENT_ENTER;
	} else if(e.type == "mouseleave") {
		this.eventType = com.wiris.util.ui.interaction.EventType.MOUSE_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.MOUSE_EVENT_EXIT;
	} else if(e.type == "mousemove") {
		this.eventType = com.wiris.util.ui.interaction.EventType.MOUSE_MOTION_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.MOUSE_MOTION_EVENT_MOVE;
	} else if(e.type == "focus") {
		this.eventType = com.wiris.util.ui.interaction.EventType.FOCUS_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.FOCUS_EVENT_FOCUS_GAINED;
	} else if(e.type == "blur") {
		this.eventType = com.wiris.util.ui.interaction.EventType.FOCUS_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.FOCUS_EVENT_FOCUS_LOST;
	} else if(e.type == "input") {
		this.eventType = com.wiris.util.ui.interaction.EventType.CHANGE_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.CHANGE_EVENT_STATE_CHANGED;
	} else if(e.type == "touchstart") {
		this.eventType = com.wiris.util.ui.interaction.EventType.TOUCH_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.TOUCH_EVENT_PRESS;
	} else if(e.type == "touchend") {
		this.eventType = com.wiris.util.ui.interaction.EventType.TOUCH_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.TOUCH_EVENT_RELEASE;
	} else if(e.type == "touchmove") {
		this.eventType = com.wiris.util.ui.interaction.EventType.TOUCH_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.TOUCH_EVENT_MOVE;
	} else if(e.type == "keydown") {
		this.eventType = com.wiris.util.ui.interaction.EventType.KEY_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.KEY_EVENT_KEY_PRESS;
	} else if(e.type == "keyup") {
		this.eventType = com.wiris.util.ui.interaction.EventType.KEY_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.KEY_EVENT_KEY_RELEASE;
	} else if(e.type == "keypress") {
		this.eventType = com.wiris.util.ui.interaction.EventType.KEY_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.KEY_EVENT_KEY_TYPE;
	} else if(e.type == "dragstart") {
		e.dataTransfer.setData("application/node type",this);
		this.eventType = com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT_START;
	} else if(e.type == "drag") {
		this.eventType = com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT_DRAG;
	} else if(e.type == "dragover") {
		this.eventType = com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT_OVER;
	} else if(e.type == "dragenter") {
		this.eventType = com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT_ENTER;
	} else if(e.type == "drop") {
		this.eventType = com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT_DROP;
	} else if(e.type == "dragend") {
		this.eventType = com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT;
		this.eventSubtype = com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT_END;
	} else js.Lib.alert("Unexpected event type " + e.type + " in com.wiris.system.ui.JsEvent");
	var element = source.getElement();
	if(js.Boot.__instanceof(source,com.wiris.system.ui.JsPanel)) element = (js.Boot.__cast(source , com.wiris.system.ui.JsPanel)).getOriginalElement();
	this.mousePosition = com.wiris.system.JsDOMUtils.getMousePosition(element,e);
	this.mousePagePosition = com.wiris.system.JsDOMUtils.getMousePagePosition(element,e);
	this.touches = this.generateTouchArray(element,e.touches);
	this.targetTouches = this.generateTouchArray(element,e.targetTouches);
	this.changedTouches = this.generateTouchArray(element,e.changedTouches);
	this.keyCode = this.standardKeyCode(e.keyCode || e.which);
	this.charCode = e.charCode;
	this.shiftPressed = e.shiftKey;
	this.ctrlPressed = e.ctrlKey;
	this.altPressed = e.altKey;
	this.metaPressed = e.metaKey;
};
com.wiris.system.ui.JsEvent.__name__ = ["com","wiris","system","ui","JsEvent"];
com.wiris.system.ui.JsEvent.__interfaces__ = [com.wiris.util.ui.interaction.TouchEvent,com.wiris.util.ui.interaction.MouseMotionEvent,com.wiris.util.ui.interaction.MouseEvent,com.wiris.util.ui.interaction.KeyEvent,com.wiris.util.ui.interaction.FocusEvent,com.wiris.util.ui.interaction.DragAndDropEvent,com.wiris.util.ui.interaction.ComponentEvent,com.wiris.util.ui.interaction.ChangeEvent,com.wiris.util.ui.interaction.Event];
com.wiris.system.ui.JsEvent.prototype = {
	getStandardKeyCodes: function() {
		if(com.wiris.system.ui.JsEvent.standardKeyCodes == null) {
			com.wiris.system.ui.JsEvent.standardKeyCodes = new IntHash();
			com.wiris.system.ui.JsEvent.standardKeyCodes.set(190,46);
			com.wiris.system.ui.JsEvent.standardKeyCodes.set(46,127);
			com.wiris.system.ui.JsEvent.standardKeyCodes.set(13,10);
			com.wiris.system.ui.JsEvent.standardKeyCodes.set(188,44);
			com.wiris.system.ui.JsEvent.standardKeyCodes.set(189,45);
		}
		return com.wiris.system.ui.JsEvent.standardKeyCodes;
	}
	,standardKeyCode: function(k) {
		var codes = this.getStandardKeyCodes();
		return codes.exists(k)?codes.get(k):k;
	}
	,getChangedTouches: function() {
		return this.changedTouches;
	}
	,getTargetTouches: function() {
		return this.targetTouches;
	}
	,getTouches: function() {
		return this.touches;
	}
	,getTouchEventType: function() {
		return this.eventSubtype;
	}
	,getMouseMotionEventType: function() {
		return this.eventSubtype;
	}
	,getMouseEventType: function() {
		return this.eventSubtype;
	}
	,getComponentEventType: function() {
		return this.eventSubtype;
	}
	,getButton: function() {
		return com.wiris.system.JsDOMUtils.getStandardButton(this.jsEvent);
	}
	,getKeyEventType: function() {
		return this.eventSubtype;
	}
	,isCtrlLikeModifierPressed: function() {
		return com.wiris.system.JsDOMUtils.browser.getOS() == "Mac"?this.metaPressed:this.ctrlPressed;
	}
	,isMetaPressed: function() {
		return this.metaPressed;
	}
	,isAltPressed: function() {
		return this.altPressed;
	}
	,isCtrlPressed: function() {
		return this.ctrlPressed;
	}
	,isShiftPressed: function() {
		return this.shiftPressed;
	}
	,getCharCode: function() {
		return this.charCode;
	}
	,getKeyCode: function() {
		return this.keyCode;
	}
	,getFocusEventType: function() {
		return this.eventSubtype;
	}
	,getDragAndDropEventType: function() {
		return this.eventSubtype;
	}
	,getChangeEventType: function() {
		return this.eventSubtype;
	}
	,getDraggedComponent: function() {
		return this.getSource();
	}
	,getPageY: function() {
		return this.mousePagePosition[1] | 0;
	}
	,getPageX: function() {
		return this.mousePagePosition[0] | 0;
	}
	,getY: function() {
		return this.mousePosition[1] | 0;
	}
	,getX: function() {
		return this.mousePosition[0] | 0;
	}
	,getClientY: function() {
		return this.jsEvent.clientY;
	}
	,getClientX: function() {
		return this.jsEvent.clientX;
	}
	,getEventType: function() {
		return this.eventType;
	}
	,getTarget: function() {
		return this.target;
	}
	,getSource: function() {
		return this.source;
	}
	,defaultIsPrevented: function() {
		return this.defaultPrevented;
	}
	,isPropagating: function() {
		return this.propagating;
	}
	,preventDefault: function() {
		this.defaultPrevented = true;
		this.jsEvent.preventDefault();
	}
	,stopPropagation: function() {
		this.propagating = false;
		this.jsEvent.stopPropagation();
	}
	,generateTouchArray: function(element,jsTouches) {
		if(jsTouches == null) return null;
		var touches = new Array();
		var i = 0;
		while(i < jsTouches.length) {
			var position = com.wiris.system.JsDOMUtils.getTouchPosition(element,jsTouches[i]);
			touches.push(new com.wiris.util.ui.interaction.Touch(position[0] | 0,position[1] | 0));
			++i;
		}
		return touches;
	}
	,metaPressed: null
	,altPressed: null
	,ctrlPressed: null
	,shiftPressed: null
	,charCode: null
	,keyCode: null
	,changedTouches: null
	,targetTouches: null
	,touches: null
	,mousePagePosition: null
	,mousePosition: null
	,jsEvent: null
	,defaultPrevented: null
	,propagating: null
	,eventSubtype: null
	,eventType: null
	,source: null
	,target: null
	,__class__: com.wiris.system.ui.JsEvent
}
com.wiris.system.ui.JsExpansionPanel = $hxClasses["com.wiris.system.ui.JsExpansionPanel"] = function(expansionPanel) {
	com.wiris.system.ui.JsPanel.call(this,expansionPanel);
	this.expansionPanel = expansionPanel;
};
com.wiris.system.ui.JsExpansionPanel.__name__ = ["com","wiris","system","ui","JsExpansionPanel"];
com.wiris.system.ui.JsExpansionPanel.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsExpansionPanel.__super__ = com.wiris.system.ui.JsPanel;
com.wiris.system.ui.JsExpansionPanel.prototype = $extend(com.wiris.system.ui.JsPanel.prototype,{
	getSectionHeight: function() {
		var display = this.content.style.display;
		this.content.style.display = null;
		var sectionHeight = this.content.scrollHeight + "px";
		this.content.style.display = display;
		return sectionHeight;
	}
	,getInputElements: function() {
		var elements = new Array();
		elements.push(this.getElement());
		return elements;
	}
	,updateContent: function() {
		var element = this.content;
		var sectionHeight = this.getSectionHeight();
		var expansionPanel = this.expansionPanel;
		if(expansionPanel.isExpanded()) {
			element.style.display = null;
			element.style.height = sectionHeight;
			element.addEventListener("transitionend",function(e) {
				element.removeEventListener("transitionend",arguments.callee);
				if(expansionPanel.isExpanded()) element.style.height = null;
			});
		} else {
			var elementTransition = element.style.transition;
			element.style.transition = "";
			requestAnimationFrame(function() {
				element.style.height = sectionHeight;
				element.style.transition = elementTransition;
				requestAnimationFrame(function() {
					element.style.height = 0 + "px";
					element.addEventListener("transitionend",function(e) {
						element.removeEventListener("transitionend",arguments.callee);
						if(!expansionPanel.isExpanded()) element.style.display = "none";
					});
				});
			});
		}
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsPanel.prototype.removeListeners.call(this);
		this.expansionPanel.removeChangeListener(this);
	}
	,buildElement: function() {
		var builder = this.expansionPanel.getComponentBuilder();
		this.content = this.createElement("div");
		this.content.className += "wrsUI_aux_expansionPanelContent";
		this.content.appendChild(builder.buildComponent(this.expansionPanel.getContent(),this).getElement());
		var transition = this.content.style.transition;
		this.content.style.transition = "";
		this.content.style.height = "0";
		this.content.style.display = "none";
		this.content.style.transition = transition;
		this.summary = builder.buildComponent(this.expansionPanel.getSummary(),this).getElement();
		this.element = this.createElement("div");
		this.element.appendChild(this.summary);
		this.element.appendChild(this.content);
		this.setElement(this.element);
		this.setOriginalElement(this.element);
		this.expansionPanel.addChangeListener(this);
	}
	,content: null
	,summary: null
	,expansionPanel: null
	,__class__: com.wiris.system.ui.JsExpansionPanel
});
com.wiris.system.ui.JsFloatingPanel = $hxClasses["com.wiris.system.ui.JsFloatingPanel"] = function(floatingPanel) {
	com.wiris.system.ui.JsPanel.call(this,floatingPanel);
	this.floatingPanel = floatingPanel;
};
com.wiris.system.ui.JsFloatingPanel.__name__ = ["com","wiris","system","ui","JsFloatingPanel"];
com.wiris.system.ui.JsFloatingPanel.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsFloatingPanel.__super__ = com.wiris.system.ui.JsPanel;
com.wiris.system.ui.JsFloatingPanel.prototype = $extend(com.wiris.system.ui.JsPanel.prototype,{
	updateContent: function() {
		var element = this.getElement();
		element.style.left = this.floatingPanel.getX() + "px";
		element.style.top = this.floatingPanel.getY() + "px";
		this.element.wrsUI_updateGUI();
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsPanel.prototype.removeListeners.call(this);
		this.floatingPanel.removeChangeListener(this);
	}
	,buildElement: function() {
		com.wiris.system.ui.JsPanel.prototype.buildElement.call(this);
		this.floatingPanel.addChangeListener(this);
		this.updateContent();
	}
	,floatingPanel: null
	,__class__: com.wiris.system.ui.JsFloatingPanel
});
com.wiris.system.ui.JsFormulaViewer = $hxClasses["com.wiris.system.ui.JsFormulaViewer"] = function(formulaViewer) {
	com.wiris.system.ui.JsComponent.call(this,formulaViewer);
	this.formulaViewer = formulaViewer;
};
com.wiris.system.ui.JsFormulaViewer.__name__ = ["com","wiris","system","ui","JsFormulaViewer"];
com.wiris.system.ui.JsFormulaViewer.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsFormulaViewer.__super__ = com.wiris.system.ui.JsComponent;
com.wiris.system.ui.JsFormulaViewer.prototype = $extend(com.wiris.system.ui.JsComponent.prototype,{
	updateContent: function() {
		var mathML = this.formulaViewer.getMathML();
		if(mathML != null && mathML != "") {
			var encodedMML = StringTools.urlEncode(mathML);
			var encodedZoom = StringTools.urlEncode("1.5");
			var encodedApp = StringTools.urlEncode("hand-4.5-prototype");
			var url = "http://localhost:8080/editor/render?mml=" + encodedMML + "&zoom=" + encodedZoom + "&stats-app=" + encodedApp + "&centerbaseline=false";
			this.imageElement.src = url;
			this.imageElement.style.visibility = "visible";
		} else this.imageElement.style.visibility = "hidden";
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsComponent.prototype.removeListeners.call(this);
		this.formulaViewer.removeChangeListener(this);
	}
	,buildElement: function() {
		var element = this.createElement("div");
		this.imageElement = this.createElement("img");
		element.appendChild(this.imageElement);
		this.setElement(element);
		this.formulaViewer.addChangeListener(this);
		this.updateContent();
	}
	,imageElement: null
	,formulaViewer: null
	,__class__: com.wiris.system.ui.JsFormulaViewer
});
com.wiris.system.ui.JsIcon = $hxClasses["com.wiris.system.ui.JsIcon"] = function() { }
com.wiris.system.ui.JsIcon.__name__ = ["com","wiris","system","ui","JsIcon"];
com.wiris.system.ui.JsIcon.createIconElement = function(icon,resourceLoader) {
	if(icon == null) return null;
	if(js.Boot.__instanceof(icon,com.wiris.util.ui.ImageIcon)) return com.wiris.system.ui.JsIcon.createImageIconElement(icon,resourceLoader);
	if(js.Boot.__instanceof(icon,com.wiris.util.ui.MaterialIcon)) return com.wiris.system.ui.JsIcon.createMaterialIconElement(icon);
	if(js.Boot.__instanceof(icon,com.wiris.util.ui.SVGIcon)) return com.wiris.system.ui.JsIcon.createSVGIconElement(icon,resourceLoader);
	throw "Not implemented yet";
}
com.wiris.system.ui.JsIcon.createSVGIconElement = function(icon,resourceLoader) {
	var svgIcon = js.Boot.__cast(icon , com.wiris.util.ui.SVGIcon);
	if(!com.wiris.system.ui.JsIcon.svgSpriteLoaded && !svgIcon.isExternal()) {
		var request = new haxe.Http(resourceLoader.getPath("svg-defs.svg"));
		request.onData = function(data) {
			var div = js.Lib.document.createElement("div");
			div.setAttribute("style","display: none");
			div.innerHTML = data;
			js.Lib.document.body.appendChild(div);
		};
		request.request(false);
		com.wiris.system.ui.JsIcon.svgSpriteLoaded = true;
	}
	var svg = js.Lib.document.createElementNS("http://www.w3.org/2000/svg","svg");
	svg.setAttribute("class","wrsUI_aux_SVGIcon wrsUI_aux_icon");
	var $use = js.Lib.document.createElementNS("http://www.w3.org/2000/svg","use");
	$use.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href","#" + svgIcon.getIconName());
	svg.appendChild($use);
	return svg;
}
com.wiris.system.ui.JsIcon.createMaterialIconElement = function(icon) {
	var materialIcon = js.Boot.__cast(icon , com.wiris.util.ui.MaterialIcon);
	var span = js.Lib.document.createElement("span");
	span.setAttribute("class","wrsUI_aux_materialIcon wrsUI_aux_icon");
	span.appendChild(js.Lib.document.createTextNode(materialIcon.getIconName()));
	return span;
}
com.wiris.system.ui.JsIcon.createImageIconElement = function(icon,resourceLoader) {
	var imageIcon = js.Boot.__cast(icon , com.wiris.util.ui.ImageIcon);
	var image = js.Lib.document.createElement("img");
	if(imageIcon.hasData()) image.setAttribute("src","data:image/png;base64," + imageIcon.getBase64Data()); else image.setAttribute("src",resourceLoader.getPath(imageIcon.getFilePath()));
	image.setAttribute("class","wrsUI_aux_imageIcon wrsUI_aux_icon");
	var area = imageIcon.getCropBounds();
	if(area != null) {
		var panel = js.Lib.document.createElement("div");
		image.style.marginLeft = -area.getX() + "px";
		image.style.marginTop = -area.getY() + "px";
		panel.appendChild(image);
		panel.style.overflow = "hidden";
		panel.style.width = area.getWidth() + "px";
		panel.style.height = area.getHeight() + "px";
		return panel;
	}
	return image;
}
com.wiris.system.ui.JsIconBox = $hxClasses["com.wiris.system.ui.JsIconBox"] = function(iconBox,resourceLoader) {
	com.wiris.system.ui.JsComponent.call(this,iconBox);
	this.iconBox = iconBox;
	this.resourceLoader = resourceLoader;
};
com.wiris.system.ui.JsIconBox.__name__ = ["com","wiris","system","ui","JsIconBox"];
com.wiris.system.ui.JsIconBox.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsIconBox.__super__ = com.wiris.system.ui.JsComponent;
com.wiris.system.ui.JsIconBox.prototype = $extend(com.wiris.system.ui.JsComponent.prototype,{
	updateContent: function() {
		var element = this.getElement();
		com.wiris.system.JsDOMUtils.removeChildren(element);
		if(this.iconBox.getIcon() != null) element.appendChild(com.wiris.system.ui.JsIcon.createIconElement(this.iconBox.getIcon(),this.resourceLoader));
		if(this.iconBox.getStyle().getForegroundColor() != null) element.firstChild.style.color = this.iconBox.getStyle().getForegroundColor().toCSSHex();
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsComponent.prototype.removeListeners.call(this);
		this.iconBox.removeChangeListener(this);
	}
	,buildElement: function() {
		var element = this.createElement("span");
		this.setElement(element);
		this.updateContent();
		this.iconBox.addChangeListener(this);
	}
	,resourceLoader: null
	,iconBox: null
	,__class__: com.wiris.system.ui.JsIconBox
});
com.wiris.system.ui.JsImageContainer = $hxClasses["com.wiris.system.ui.JsImageContainer"] = function(imageContainer) {
	com.wiris.system.ui.JsComponent.call(this,imageContainer);
	this.imageContainer = imageContainer;
};
com.wiris.system.ui.JsImageContainer.__name__ = ["com","wiris","system","ui","JsImageContainer"];
com.wiris.system.ui.JsImageContainer.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsImageContainer.__super__ = com.wiris.system.ui.JsComponent;
com.wiris.system.ui.JsImageContainer.prototype = $extend(com.wiris.system.ui.JsComponent.prototype,{
	updateContent: function() {
		var element = this.getElement();
		if(this.imageContainer.getSource() != null) element.src = this.imageContainer.getSource();
		if(this.imageContainer.getTooltip() != null) element.alt = this.imageContainer.getTooltip();
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsComponent.prototype.removeListeners.call(this);
		this.imageContainer.removeChangeListener(this);
	}
	,buildElement: function() {
		var element = this.createElement("img");
		this.setElement(element);
		this.updateContent();
		this.imageContainer.addChangeListener(this);
	}
	,imageContainer: null
	,__class__: com.wiris.system.ui.JsImageContainer
});
com.wiris.system.ui.JsOpenFileDialog = $hxClasses["com.wiris.system.ui.JsOpenFileDialog"] = function(openFileDialog) {
	com.wiris.system.ui.JsPanel.call(this,openFileDialog);
	this.openFileDialog = openFileDialog;
	this.openFileDialog.addComponentListener(this);
};
com.wiris.system.ui.JsOpenFileDialog.__name__ = ["com","wiris","system","ui","JsOpenFileDialog"];
com.wiris.system.ui.JsOpenFileDialog.__interfaces__ = [com.wiris.util.ui.interaction.ComponentListener];
com.wiris.system.ui.JsOpenFileDialog.__super__ = com.wiris.system.ui.JsPanel;
com.wiris.system.ui.JsOpenFileDialog.prototype = $extend(com.wiris.system.ui.JsPanel.prototype,{
	styleChanged: function(e) {
	}
	,blurRequested: function(e) {
	}
	,focusRequested: function(e) {
	}
	,draggableChanged: function(e) {
	}
	,enabledChanged: function(e) {
	}
	,visibilityChanged: function(e) {
		if(this.openFileDialog.isVisible()) {
			this.fileInput = this.createElement("input");
			this.fileInput.setAttribute("type","file");
			this.fileInput.setAttribute("accept",this.openFileDialog.getAcceptFilter());
			com.wiris.system.JsDOMUtils.addEventListener(this.fileInput,"change",$bind(this,this.onFileInputChange));
			this.fileInput.click();
			this.openFileDialog.setVisible(false);
		}
	}
	,onFileInputChange: function(e) {
		var self = this;
		var file = this.fileInput.files[0];
		if(file) {
			var reader = new FileReader();
			reader.onload = function(ev) {
				ev.target.result;
				self.openFileDialog.setFileContent(haxe.io.Bytes.ofData(new Uint8Array(ev.target.result)));
			};
			reader.onerror = function() {
				alert("Cannot read the file.");
			};
			reader.readAsArrayBuffer(file);
		}
	}
	,buildChildren: function() {
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsPanel.prototype.removeListeners.call(this);
		this.openFileDialog.removeComponentListener(this);
	}
	,fileInput: null
	,openFileDialog: null
	,__class__: com.wiris.system.ui.JsOpenFileDialog
});
com.wiris.system.ui.JsOpenIdSignInPanel = $hxClasses["com.wiris.system.ui.JsOpenIdSignInPanel"] = function(signInPanel,resourceLoader) {
	com.wiris.system.ui.JsPanel.call(this,signInPanel);
	this.signInPanel = signInPanel;
	this.resourceLoader = resourceLoader;
	this.signInPanel.addActionListener(this);
};
com.wiris.system.ui.JsOpenIdSignInPanel.__name__ = ["com","wiris","system","ui","JsOpenIdSignInPanel"];
com.wiris.system.ui.JsOpenIdSignInPanel.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.system.ui.JsOpenIdSignInPanel.__super__ = com.wiris.system.ui.JsPanel;
com.wiris.system.ui.JsOpenIdSignInPanel.prototype = $extend(com.wiris.system.ui.JsPanel.prototype,{
	actionPerformed: function(e) {
		var id = e.getAction().getId();
		var command = e.getAction().getCommand();
		if(command == "haxeSignOut") {
			var auth2 = gapi.auth2.getAuthInstance();
			auth2.signOut().then(function() {
				console.log("User signed out.");
			});
		} else if(command == "renderGoogleSignInButton") this.renderGoogleButton();
	}
	,signedInGoogle: function(googleUser) {
		var jwt = googleUser.getAuthResponse().id_token;
		var photoURL = googleUser.getBasicProfile().getImageUrl();
		this.signInPanel.providerSignInFlowCompleted(jwt,photoURL);
		gapi.auth2.getAuthInstance().signOut();
	}
	,renderGoogleButton: function() {
		var self = this;
		gapi.signin2.render("signInGoogle",{ scope : "profile email openid", width : 215, height : 40, longtitle : true, theme : "dark", onsuccess : $bind(this,this.signedInGoogle), onfailure : function(e) {
			console.warn("Google Sign-In failure: " + e.error);
			self.signInPanel.providerSignInFlowCancelled();
		}});
	}
	,signInStarted: function(event) {
		this.signInPanel.providerSignInFlowStarted();
	}
	,buildElement: function() {
		com.wiris.system.ui.JsPanel.prototype.buildElement.call(this);
		var element = this.getElement();
		var loadingDiv = this.createElement("div");
		com.wiris.system.JsDOMUtils.addClass(loadingDiv,"loadingDiv");
		element.appendChild(loadingDiv);
		if(this.signInPanel.getSignInGoogle()) {
			var googleMetaClientId = this.createElement("meta");
			googleMetaClientId.setAttribute("name","google-signin-client_id");
			googleMetaClientId.setAttribute("content",this.signInPanel.getGoogleClientId());
			document.head.appendChild(googleMetaClientId);
			var googleElement = this.createElement("div");
			googleElement.className = "wrsUI_aux_signin_google";
			googleElement.setAttribute("tabindex","0");
			googleElement.id = "signInGoogle";
			googleElement.onclick = $bind(this,this.signInStarted);
			element.appendChild(googleElement);
			setTimeout($bind(this,this.renderGoogleButton),1);
		}
		this.setElement(element);
	}
	,msalInstance: null
	,resourceLoader: null
	,signInPanel: null
	,__class__: com.wiris.system.ui.JsOpenIdSignInPanel
});
com.wiris.system.ui.JsPlotterPanel = $hxClasses["com.wiris.system.ui.JsPlotterPanel"] = function(plotterPanel,resourceLoader) {
	com.wiris.system.ui.JsPanel.call(this,plotterPanel);
	this.resourceLoader = resourceLoader;
	this.plotterPanel = plotterPanel;
};
com.wiris.system.ui.JsPlotterPanel.__name__ = ["com","wiris","system","ui","JsPlotterPanel"];
com.wiris.system.ui.JsPlotterPanel.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsPlotterPanel.__super__ = com.wiris.system.ui.JsPanel;
com.wiris.system.ui.JsPlotterPanel.prototype = $extend(com.wiris.system.ui.JsPanel.prototype,{
	getMasterElement: function() {
		return js.Lib.document;
	}
	,updateGUI: function() {
		var element = this.getElement();
		if(element.offsetWidth != this.lastWidth || element.offsetHeight != this.lastHeight) {
			if(element.offsetWidth > 0 && element.offsetHeight > 0) {
				this.plotterPanel.getDisplay().invalidate();
				this.graphics.updateSize();
				this.repaint();
			}
			this.lastWidth = element.offsetWidth;
			this.lastHeight = element.offsetHeight;
		}
	}
	,repaintImpl: function(time) {
		var interval = time - this.lastRepaintTime;
		this.lastRepaintTime = time;
		this.plotterPanel.getDisplay().animateFrame(interval);
		this.plotterPanel.getDisplay().update(this.graphics,this.lastWidth,this.lastHeight,this.plotterPanel.getPadding());
		this.graphics.finish();
		if(this.plotterPanel.isAnimated()) this.requestAnimationFrameId = requestAnimationFrame($bind(this,this.repaintImpl)); else this.requestAnimationFrameId = null;
	}
	,repaint: function() {
		if(this.requestAnimationFrameId != null) cancelAnimationFrame(this.requestAnimationFrameId);
		this.requestAnimationFrameId = requestAnimationFrame($bind(this,this.repaintImpl));
	}
	,stateChanged: function(e) {
		this.repaint();
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsPanel.prototype.removeListeners.call(this);
		this.plotterPanel.removeChangeListener(this);
	}
	,buildElement: function() {
		com.wiris.system.ui.JsPanel.prototype.buildElement.call(this);
		var element = this.getElement();
		var canvasContainer = this.createElement("div");
		canvasContainer.className = "wrsUI_aux_canvasContainer";
		this.getElement().appendChild(canvasContainer);
		this.plotterPanel.addChangeListener(this);
		this.graphics = new com.wiris.system.graphics.JsClientGraphicsContext2D(canvasContainer,this.resourceLoader);
		this.plotterPanel.setClientGraphicsContext(this.graphics);
		this.lastWidth = -1;
		this.lastHeight = -1;
		var timer = new haxe.Timer(100);
		timer.run = $bind(this,this.updateGUI);
		var me = this;
		com.wiris.system.JsDOMUtils.addEventListener(js.Lib.window,"resize",function(e) {
			me.plotterPanel.getDisplay().invalidate();
			me.graphics.updateSize();
			me.repaint();
		});
	}
	,graphics: null
	,lastRepaintTime: null
	,requestAnimationFrameId: null
	,lastHeight: null
	,lastWidth: null
	,plotterPanel: null
	,resourceLoader: null
	,__class__: com.wiris.system.ui.JsPlotterPanel
});
com.wiris.system.ui.JsProgressBar = $hxClasses["com.wiris.system.ui.JsProgressBar"] = function(progressBar) {
	com.wiris.system.ui.JsComponent.call(this,progressBar);
	this.progressBar = progressBar;
};
com.wiris.system.ui.JsProgressBar.__name__ = ["com","wiris","system","ui","JsProgressBar"];
com.wiris.system.ui.JsProgressBar.__super__ = com.wiris.system.ui.JsComponent;
com.wiris.system.ui.JsProgressBar.prototype = $extend(com.wiris.system.ui.JsComponent.prototype,{
	buildElement: function() {
		this.setElement(this.createElement("div"));
	}
	,progressBar: null
	,__class__: com.wiris.system.ui.JsProgressBar
});
com.wiris.system.ui.JsProgressCircle = $hxClasses["com.wiris.system.ui.JsProgressCircle"] = function(loadingCircle) {
	com.wiris.system.ui.JsComponent.call(this,loadingCircle);
	this.loadingCircle = loadingCircle;
};
com.wiris.system.ui.JsProgressCircle.__name__ = ["com","wiris","system","ui","JsProgressCircle"];
com.wiris.system.ui.JsProgressCircle.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsProgressCircle.__super__ = com.wiris.system.ui.JsComponent;
com.wiris.system.ui.JsProgressCircle.prototype = $extend(com.wiris.system.ui.JsComponent.prototype,{
	updateContent: function() {
		var element = this.getElement();
		if(!this.loadingCircle.isIndeterminate()) this.svgCircle.style.strokeDashoffset = 282.743 * (1 - this.loadingCircle.getProgress() / 100) + "px"; else this.svgCircle.style.strokeDashoffset = "";
		this.element.wrsUI_updateGUI();
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsComponent.prototype.removeListeners.call(this);
		this.loadingCircle.removeChangeListener(this);
	}
	,buildElement: function() {
		var element;
		element = this.createElement("div");
		var svg;
		svg = this.createElement("svg","http://www.w3.org/2000/svg");
		svg.setAttribute("focusable","false");
		svg.setAttribute("preserveAspectRatio","xMidYMid meet");
		svg.setAttribute("viewBox","0 0 100 100");
		svg.innerHTML = "<!---->";
		this.svgCircle = this.createElement("circle","http://www.w3.org/2000/svg");
		this.svgCircle.setAttribute("cx","50%");
		this.svgCircle.setAttribute("cy","50%");
		this.svgCircle.setAttribute("r","45");
		svg.appendChild(this.svgCircle);
		element.appendChild(svg);
		this.setElement(element);
		this.updateContent();
		this.loadingCircle.addChangeListener(this);
	}
	,svgCircle: null
	,loadingCircle: null
	,__class__: com.wiris.system.ui.JsProgressCircle
});
com.wiris.system.ui.JsRadioButton = $hxClasses["com.wiris.system.ui.JsRadioButton"] = function(radioButton) {
	com.wiris.system.ui.JsPanel.call(this,radioButton);
	this.radioButton = radioButton;
	this.activated = 0;
};
com.wiris.system.ui.JsRadioButton.__name__ = ["com","wiris","system","ui","JsRadioButton"];
com.wiris.system.ui.JsRadioButton.__super__ = com.wiris.system.ui.JsPanel;
com.wiris.system.ui.JsRadioButton.prototype = $extend(com.wiris.system.ui.JsPanel.prototype,{
	getInputElements: function() {
		var elements = new Array();
		elements.push(this.getElement());
		return elements;
	}
	,updateRipplingClass: function() {
		var element = this.getElement();
		if(this.activated++ >= 2) {
			com.wiris.system.JsDOMUtils.removeClass(element,"wrsUI_aux_radioButton_active");
			this.activated = 0;
		}
	}
	,onElementKeyUp: function(e) {
		var element = this.getElement();
		if(e.key == "Enter" || e.key == " ") this.updateRipplingClass();
	}
	,onElementKeyDown: function(e) {
		var element = this.getElement();
		if(e.key == "Enter" || e.key == " ") {
			if(this.activated == 0) {
				com.wiris.system.JsDOMUtils.addClass(element,"wrsUI_aux_radioButton_active");
				this.activated = 1;
				var self = this;
				setTimeout(function() {
					self.updateRipplingClass();
				},com.wiris.system.ui.JsRadioButton.RIPPLE_ANIMATION_DURATION);
			}
		}
	}
	,buildChildren: function() {
		com.wiris.system.ui.JsPanel.prototype.buildChildren.call(this);
		var element = this.getOriginalElement();
		element.tabIndex = "0";
		this.button = this.createElement("div");
		this.button.className = "wrsUI_aux_radioButton";
		this.ripple = this.createElement("div");
		this.ripple.className = "wrsUI_aux_radioButton_ripple";
		this.button.appendChild(this.ripple);
		element.firstChild.insertBefore(this.button,element.firstChild.firstChild);
		com.wiris.system.JsDOMUtils.addEventListener(element,"keydown",$bind(this,this.onElementKeyDown));
		com.wiris.system.JsDOMUtils.addEventListener(element,"keyup",$bind(this,this.onElementKeyUp));
	}
	,activated: null
	,ripple: null
	,button: null
	,radioButton: null
	,__class__: com.wiris.system.ui.JsRadioButton
});
com.wiris.system.ui.JsResponsiveToolbar = $hxClasses["com.wiris.system.ui.JsResponsiveToolbar"] = function(responsiveToolbar) {
	com.wiris.system.ui.JsPanel.call(this,responsiveToolbar);
	this.responsiveToolbar = responsiveToolbar;
};
com.wiris.system.ui.JsResponsiveToolbar.__name__ = ["com","wiris","system","ui","JsResponsiveToolbar"];
com.wiris.system.ui.JsResponsiveToolbar.__super__ = com.wiris.system.ui.JsPanel;
com.wiris.system.ui.JsResponsiveToolbar.prototype = $extend(com.wiris.system.ui.JsPanel.prototype,{
	buildElement: function() {
		com.wiris.system.ui.JsPanel.prototype.buildElement.call(this);
		var contextPanelButton = this.responsiveToolbar.getComponentBuilder().buildComponent(this.responsiveToolbar.getContextPanelButton(),this);
		this.responsiveToolbar.getResponsiveSection().getElement().appendChild(contextPanelButton.getElement());
		setInterval(($_=this.responsiveToolbar,$bind($_,$_.updateGUI)),100);
	}
	,responsiveToolbar: null
	,__class__: com.wiris.system.ui.JsResponsiveToolbar
});
com.wiris.system.ui.JsSignInButton = $hxClasses["com.wiris.system.ui.JsSignInButton"] = function(signInButton,resourceLoader) {
	com.wiris.system.ui.JsContextPanelButton.call(this,signInButton,resourceLoader);
	this.signInButton = signInButton;
	this.signInButton.addActionListener(this);
};
com.wiris.system.ui.JsSignInButton.__name__ = ["com","wiris","system","ui","JsSignInButton"];
com.wiris.system.ui.JsSignInButton.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.system.ui.JsSignInButton.__super__ = com.wiris.system.ui.JsContextPanelButton;
com.wiris.system.ui.JsSignInButton.prototype = $extend(com.wiris.system.ui.JsContextPanelButton.prototype,{
	actionPerformed: function(e) {
		var id = e.getAction().getId();
		var command = e.getAction().getCommand();
		if(command == "profilePhotoChanged") this.updatePhoto();
	}
	,updatePhoto: function() {
		var element = this.getElement();
		while(element.firstChild.nextSibling != null) element.removeChild(element.firstChild.nextSibling);
		if(this.button.getIcon() != null) element.appendChild(com.wiris.system.ui.JsIcon.createIconElement(this.button.getIcon(),this.resourceLoader));
	}
	,buildElement: function() {
		com.wiris.system.ui.JsContextPanelButton.prototype.buildElement.call(this);
		this.updatePhoto();
	}
	,signInButton: null
	,__class__: com.wiris.system.ui.JsSignInButton
});
com.wiris.system.ui.JsSlider = $hxClasses["com.wiris.system.ui.JsSlider"] = function(slider) {
	com.wiris.system.ui.JsComponent.call(this,slider);
	this.slider = slider;
	if(this.slider.getStyle().getWidth() != com.wiris.util.ui.Style.SIZE_AUTO && this.slider.getStyle().getWidthUnit() != com.wiris.util.ui.Style.SIZE_UNIT_PERCENT) this.width = this.slider.getStyle().getWidth(); else this.width = 200;
	this.slider.getStyle().setCSSVariable("--slider-width",this.width + "px");
	this.slider.addChangeListener(this);
};
com.wiris.system.ui.JsSlider.__name__ = ["com","wiris","system","ui","JsSlider"];
com.wiris.system.ui.JsSlider.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsSlider.__super__ = com.wiris.system.ui.JsComponent;
com.wiris.system.ui.JsSlider.prototype = $extend(com.wiris.system.ui.JsComponent.prototype,{
	getInputElements: function() {
		var elements = new Array();
		elements.push(this.sliderHandle);
		return elements;
	}
	,onDocumentMouseMove: function(e) {
		if(this.dragging) {
			var boundingRect = this.sliderWrapper.getBoundingClientRect();
			var step = this.slider.getStep();
			var min = this.slider.getMin();
			var max = this.slider.getMax();
			this.deltaX += e.pageX - this.startPosition;
			this.startPosition = Math.round(Math.max(Math.min(e.pageX,boundingRect.right),boundingRect.left));
			var normalized = this.normalizeValue(this.deltaX);
			var value = Math.round(normalized / step) * step;
			this.deltaX = Math.round((normalized - value) / max * this.width);
			this.slider.setValue("" + normalized);
		}
	}
	,onDocumentMouseUp: function(e) {
		this.dragging = false;
	}
	,onHandleMouseDown: function(e) {
		if(this.slider.isEnabled()) {
			this.dragging = true;
			this.startPosition = e.pageX;
		}
	}
	,onWrapperMouseDown: function(e) {
		if(this.slider.isEnabled() && e.target != this.sliderHandle) {
			var deltaX = e.offsetX - this.width / this.slider.getMax() * (this.slider.getValue() - this.slider.getMin());
			this.slider.setValue("" + this.normalizeValue(deltaX));
		}
	}
	,updateContent: function() {
		var element = this.getElement();
		if(this.slider.isEnabled()) {
			element.style.opacity = "1";
			this.sliderHandle.tabIndex = 0;
		} else {
			element.style.opacity = "0.54";
			this.sliderHandle.tabIndex = null;
		}
		this.element.wrsUI_updateGUI();
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,normalizeValue: function(deltaValue) {
		var value = Std.parseFloat(this.slider.getValue());
		var min = this.slider.getMin();
		var max = this.slider.getMax();
		return value + deltaValue / this.width * (max - min);
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsComponent.prototype.removeListeners.call(this);
		this.slider.removeChangeListener(this);
	}
	,updateGUI: function() {
		var garbage = this.element.offsetWidth;
		if(this.sliderWrapper.offsetParent != null) {
			this.width = this.element.offsetWidth - (this.label.offsetWidth + this.textField.offsetWidth + 32);
			this.slider.getStyle().setCSSVariable("--slider-width",this.width + "px");
		}
		var child = this.element.firstChild;
		while(child != null) {
			if(child.wrsUI_updateGUI != null) child.wrsUI_updateGUI();
			child = child.nextSibling;
		}
	}
	,buildElement: function() {
		var element = this.createElement("div");
		this.label = this.slider.getComponentBuilder().buildComponent(this.slider.getLabel(),this).getElement();
		this.textField = this.slider.getComponentBuilder().buildComponent(this.slider.getTextField(),this).getElement();
		this.sliderWrapper = this.createElement("div");
		this.sliderWrapper.className = "wrsUI_aux_sliderWrapper";
		this.sliderRange = this.createElement("div");
		this.sliderRange.className = "wrsUI_aux_sliderRange";
		this.sliderHandle = this.createElement("div");
		this.sliderHandle.className = "wrsUI_aux_sliderHandle";
		this.sliderHandle.tabIndex = 0;
		com.wiris.system.JsDOMUtils.addEventListener(this.sliderWrapper,"mousedown",$bind(this,this.onWrapperMouseDown));
		com.wiris.system.JsDOMUtils.addEventListener(this.sliderHandle,"mousedown",$bind(this,this.onHandleMouseDown));
		com.wiris.system.JsDOMUtils.addEventListener(js.Lib.document,"mouseup",$bind(this,this.onDocumentMouseUp));
		com.wiris.system.JsDOMUtils.addEventListener(js.Lib.document,"mousemove",$bind(this,this.onDocumentMouseMove));
		this.sliderWrapper.appendChild(this.sliderRange);
		this.sliderWrapper.appendChild(this.sliderHandle);
		element.appendChild(this.label);
		element.appendChild(this.sliderWrapper);
		element.appendChild(this.textField);
		var timer = new haxe.Timer(100);
		timer.run = $bind(this,this.updateGUI);
		this.setElement(element);
		this.updateContent();
	}
	,startPosition: null
	,dragging: null
	,deltaX: null
	,width: null
	,sliderHandle: null
	,sliderRange: null
	,sliderWrapper: null
	,textField: null
	,label: null
	,slider: null
	,__class__: com.wiris.system.ui.JsSlider
});
com.wiris.system.ui.JsSwitch = $hxClasses["com.wiris.system.ui.JsSwitch"] = function(sw) {
	com.wiris.system.ui.JsComponent.call(this,sw);
	this.sw = sw;
};
com.wiris.system.ui.JsSwitch.__name__ = ["com","wiris","system","ui","JsSwitch"];
com.wiris.system.ui.JsSwitch.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsSwitch.__super__ = com.wiris.system.ui.JsComponent;
com.wiris.system.ui.JsSwitch.prototype = $extend(com.wiris.system.ui.JsComponent.prototype,{
	getInputElements: function() {
		var elements = new Array();
		elements.push(this.getElement());
		return elements;
	}
	,updateContent: function() {
		var element = this.getElement();
		com.wiris.system.JsDOMUtils.removeChildren(element);
		if(this.sw.getTooltip() != null) element.setAttribute("title",this.sw.getTooltip());
		this.element.wrsUI_updateGUI();
	}
	,stateChanged: function(e) {
		this.updateContent();
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsComponent.prototype.removeListeners.call(this);
		this.sw.removeChangeListener(this);
	}
	,buildElement: function() {
		var element;
		element = this.createElement("div");
		element.setAttribute("tabindex","0");
		this.setElement(element);
		this.updateContent();
		this.sw.addChangeListener(this);
	}
	,sw: null
	,__class__: com.wiris.system.ui.JsSwitch
});
com.wiris.system.ui.JsTabbedPanel = $hxClasses["com.wiris.system.ui.JsTabbedPanel"] = function(tabbedPanel,resourceLoader) {
	com.wiris.system.ui.JsPanel.call(this,tabbedPanel);
	this.tabbedPanel = tabbedPanel;
	this.resourceLoader = resourceLoader;
	this.currentPanel = null;
	var self = this;
	this.monitorInsertion(js.Lib.document.body,function(insertedNode,observer) {
		if(insertedNode == self.getElement() || com.wiris.system.JsDOMUtils.isDescendant(insertedNode,self.getElement())) haxe.Timer.delay(function() {
			self.getElement().wrsUI_updateGUI();
			if(observer != null) observer.disconnect();
		},1);
	});
	this.panels = new Array();
};
com.wiris.system.ui.JsTabbedPanel.__name__ = ["com","wiris","system","ui","JsTabbedPanel"];
com.wiris.system.ui.JsTabbedPanel.__interfaces__ = [com.wiris.util.ui.interaction.ChangeListener];
com.wiris.system.ui.JsTabbedPanel.__super__ = com.wiris.system.ui.JsPanel;
com.wiris.system.ui.JsTabbedPanel.prototype = $extend(com.wiris.system.ui.JsPanel.prototype,{
	update: function() {
		var _g = this;
		var selectedTab = this.tabbedPanel.getSelectedTab();
		var navBar = this.tabbedPanel.hasClass(com.wiris.util.ui.component.NavigationBar.CLASS_NAVIGATION_BAR);
		var oldPanel = this.currentPanel;
		var newPanel = js.Boot.__cast(this.tabbedPanel.getComponents()[selectedTab] , com.wiris.util.ui.component.Panel);
		var element = this.getElement();
		var oldPanelElement = oldPanel.getElement();
		var newPanelElement = newPanel.getElement();
		var oldPanelTab = element.firstChild.childNodes[oldPanel.getChildIndex()];
		var newPanelTab = element.firstChild.childNodes[newPanel.getChildIndex()];
		this.currentPanel = newPanel;
		if(newPanel != oldPanel) {
			if(this.eventListener) {
				com.wiris.system.JsDOMUtils.removeClass(this.eventListener.element,"wrsUI_aux_tabbedPanelBeforeSelected");
				com.wiris.system.JsDOMUtils.removeClass(this.eventListener.element,"wrsUI_aux_tabbedPanelAfterSelected");
				com.wiris.system.JsDOMUtils.removeClass(this.eventListener.element,"wrsUI_aux_tabbedPanelAnimated");
				this.eventListener.component.setVisible(false);
				com.wiris.system.JsDOMUtils.removeEventListener(this.eventListener);
			}
			com.wiris.system.JsDOMUtils.addClass(newPanelTab,"wrsUI_aux_selected");
			com.wiris.system.JsDOMUtils.removeClass(oldPanelTab,"wrsUI_aux_selected");
			if(navBar) {
				newPanelElement.style.opacity = "1";
				newPanelElement.style.zIndex = 1;
				oldPanelElement.style.opacity = "0";
				oldPanelElement.style.zIndex = 0;
			}
			var newClass = newPanel.getChildIndex() - oldPanel.getChildIndex() > 0?"wrsUI_aux_tabbedPanelAfterSelected":"wrsUI_aux_tabbedPanelBeforeSelected";
			var oldClass = newPanel.getChildIndex() - oldPanel.getChildIndex() > 0?"wrsUI_aux_tabbedPanelBeforeSelected":"wrsUI_aux_tabbedPanelAfterSelected";
			com.wiris.system.JsDOMUtils.addClass(newPanelElement,newClass);
			newPanel.setVisible(true);
			haxe.Timer.delay(function() {
				com.wiris.system.JsDOMUtils.addClass(oldPanelElement,"wrsUI_aux_tabbedPanelAnimated");
				com.wiris.system.JsDOMUtils.addClass(oldPanelElement,oldClass);
				com.wiris.system.JsDOMUtils.addClass(newPanelElement,"wrsUI_aux_tabbedPanelAnimated");
				com.wiris.system.JsDOMUtils.addClass(newPanelElement,"wrsUI_aux_tabbedPanelSelected");
				com.wiris.system.JsDOMUtils.removeClass(newPanelElement,newClass);
			},1);
			this.eventListener = com.wiris.system.JsDOMUtils.addEventListener(oldPanelElement,"transitionend",function(event) {
				if(com.wiris.system.JsDOMUtils.getEventTarget(event) == oldPanelElement) {
					com.wiris.system.JsDOMUtils.removeClass(oldPanelElement,oldClass);
					com.wiris.system.JsDOMUtils.removeClass(oldPanelElement,"wrsUI_aux_tabbedPanelAnimated");
					oldPanel.setVisible(false);
					com.wiris.system.JsDOMUtils.removeClass(newPanelElement,"wrsUI_aux_tabbedPanelAnimated");
					com.wiris.system.JsDOMUtils.removeEventListener(_g.eventListener);
				}
			});
			this.eventListener.component = oldPanel;
		}
		if(!navBar) {
			this.indicator.style.transform = "translateX(" + com.wiris.system.JsDOMUtils.getRelativeLeft(newPanelTab,element) + "px)";
			this.indicator.style.width = newPanelTab.offsetWidth + "px";
		}
	}
	,clearRipple: function() {
		var i = HxOverrides.iter(this.panels);
		while(i.hasNext()) i.next().clearRipple();
	}
	,stateChanged: function(e) {
		this.element.wrsUI_updateGUI();
	}
	,removeListeners: function() {
		com.wiris.system.ui.JsPanel.prototype.removeListeners.call(this);
		this.tabbedPanel.removeChangeListener(this);
	}
	,buildChildren: function() {
		var tabsContainer = this.createElement("div");
		tabsContainer.className = "wrsUI_aux_tabbedPanelTabContainer";
		var i = HxOverrides.iter(this.tabbedPanel.getTabs());
		while(i.hasNext()) {
			var child = this.tabbedPanel.getComponentBuilder().buildComponent(i.next(),this);
			tabsContainer.appendChild(child.getElement());
		}
		this.indicator = this.createElement("div");
		this.indicator.className = "wrsUI_aux_indicator";
		var panelsContainer = this.createElement("div");
		panelsContainer.className = "wrsUI_aux_tabbedPanelContainer";
		var j = HxOverrides.iter(this.tabbedPanel.getComponents());
		while(j.hasNext()) {
			var component = j.next();
			if(js.Boot.__instanceof(component,com.wiris.util.ui.component.Panel)) {
				var panel = js.Boot.__cast(component , com.wiris.util.ui.component.Panel);
				var child = this.tabbedPanel.getComponentBuilder().buildComponent(panel,this);
				this.panels.push(child);
				if(panel.getChildIndex() != this.tabbedPanel.getSelectedTab()) panel.setVisible(false); else {
					this.currentPanel = panel;
					panel.setVisible(true);
				}
				panelsContainer.appendChild(child.getElement());
			}
		}
		var element = this.getElement();
		element.appendChild(tabsContainer);
		element.appendChild(this.indicator);
		element.appendChild(panelsContainer);
		var self = this;
		element.wrsUI_updateGUI = function() {
			panelsContainer.wrsUI_updateGUI();
			panelsContainer.style.width = "";
			panelsContainer.style.height = "";
			var maxWidth = 0;
			var maxHeight = 0;
			var child = panelsContainer.firstChild;
			while(child != null) {
				child.style.position = "static";
				child.style.setProperty("display","flex","important");
				var childWidth = child.offsetWidth;
				var childHeight = child.offsetHeight;
				child.style.position = "";
				child.style.display = "";
				if(maxWidth < childWidth) maxWidth = childWidth;
				if(maxHeight < childHeight) maxHeight = childHeight;
				child = child.nextSibling;
			}
			panelsContainer.style.width = maxWidth + "px";
			panelsContainer.style.height = maxHeight + "px";
			self.update();
		};
		this.tabbedPanel.addChangeListener(this);
		this.update();
	}
	,panels: null
	,eventListener: null
	,indicator: null
	,resourceLoader: null
	,tabbedPanel: null
	,currentPanel: null
	,__class__: com.wiris.system.ui.JsTabbedPanel
});
if(!com.wiris.util.css) com.wiris.util.css = {}
com.wiris.util.css.CSSColorInfo = $hxClasses["com.wiris.util.css.CSSColorInfo"] = function(name,rgb,standard) {
	this.name = name;
	this.rgb = rgb;
	this.standard = standard;
};
com.wiris.util.css.CSSColorInfo.__name__ = ["com","wiris","util","css","CSSColorInfo"];
com.wiris.util.css.CSSColorInfo.prototype = {
	getStandardVersion: function() {
		return this.standard;
	}
	,getColorAsRgbHex: function() {
		return "#" + com.wiris.common.WInteger.toHex(this.rgb,6).toLowerCase();
	}
	,getColor: function() {
		return this.rgb;
	}
	,getName: function() {
		return this.name;
	}
	,standard: null
	,rgb: null
	,name: null
	,__class__: com.wiris.util.css.CSSColorInfo
}
com.wiris.util.css.CSSUtils = $hxClasses["com.wiris.util.css.CSSUtils"] = function() { }
com.wiris.util.css.CSSUtils.__name__ = ["com","wiris","util","css","CSSUtils"];
com.wiris.util.css.CSSUtils.COLOR_DATA = null;
com.wiris.util.css.CSSUtils.colorToInt = function(color) {
	if(color == null) return 0;
	color = StringTools.trim(color);
	var colorLength = color.length;
	if(colorLength == 0) return 0;
	if(color.charAt(0) != "#") {
		color = com.wiris.util.css.CSSUtils.nameToColor(color);
		colorLength = color.length;
	}
	if(colorLength == 4) color = "" + color.charAt(1) + color.charAt(1) + color.charAt(2) + color.charAt(2) + color.charAt(3) + color.charAt(3); else if(colorLength == 7) color = HxOverrides.substr(color,1,6); else return 0;
	return com.wiris.common.WInteger.parseHex(color);
}
com.wiris.util.css.CSSUtils.intToColor = function(color) {
	return "#" + com.wiris.common.WInteger.toHex(color,6);
}
com.wiris.util.css.CSSUtils.pixelsToInt = function(pixels) {
	if(pixels == null) return 0;
	pixels = StringTools.trim(pixels);
	if(StringTools.endsWith(pixels,"px")) return Std.parseInt(HxOverrides.substr(pixels,0,pixels.length - 2));
	if(StringTools.endsWith(pixels,"pt")) return com.wiris.util.css.CSSUtils.PT_TO_PX * Std.parseInt(HxOverrides.substr(pixels,0,pixels.length - 2)) | 0;
	var parsedPixels = Std.parseInt(pixels);
	if(pixels == "" + parsedPixels) return parsedPixels;
	return 0;
}
com.wiris.util.css.CSSUtils.percentageToFloat = function(percentage) {
	if(percentage == null) return 0;
	percentage = StringTools.trim(percentage);
	if(StringTools.endsWith(percentage,"%")) return Std.parseFloat(HxOverrides.substr(percentage,0,percentage.length - 1));
	return 0;
}
com.wiris.util.css.CSSUtils.hashToCss = function(p0) {
	if(p0 == null) return "";
	var sb = new StringBuf();
	var keys = p0.keys();
	var skeys = new Array();
	while(keys.hasNext()) skeys.push(keys.next());
	com.wiris.util.css.CSSUtils.sort(skeys);
	var i;
	var _g1 = 0, _g = skeys.length;
	while(_g1 < _g) {
		var i1 = _g1++;
		var key = skeys[i1];
		if(i1 > 0) sb.b += Std.string(";");
		sb.b += Std.string(com.wiris.util.css.CSSUtils.camelCaseToHyphenDelimited(key));
		sb.b += Std.string(":");
		var value = p0.get(key);
		if(key == "fontFamily" && value.indexOf(" ") != -1) value = "'" + value + "'";
		sb.b += Std.string(value);
	}
	return sb.b;
}
com.wiris.util.css.CSSUtils.cssToHash = function(p0) {
	var ss = p0.split(";");
	var h = new Hash();
	var i;
	var _g1 = 0, _g = ss.length;
	while(_g1 < _g) {
		var i1 = _g1++;
		var kv = ss[i1].split(":");
		if(kv.length >= 2) {
			var input = kv[1];
			kv[0] = com.wiris.util.css.CSSUtils.hyphenDelimitedToCamelCase(StringTools.trim(kv[0]));
			kv[1] = StringTools.trim(kv[1]);
			if(kv[0] == "fontFamily" && com.wiris.util.css.CSSUtils.isMultipleWordValue(kv[1])) kv[1] = HxOverrides.substr(kv[1],1,kv[1].length - 2);
			h.set(kv[0],kv[1]);
		}
	}
	return h;
}
com.wiris.util.css.CSSUtils.isMultipleWordValue = function(value) {
	if(StringTools.startsWith(value,"\"") && StringTools.endsWith(value,"\"")) return true;
	return StringTools.startsWith(value,"'") && StringTools.endsWith(value,"'");
}
com.wiris.util.css.CSSUtils.camelCaseToHyphenDelimited = function(camel) {
	var upperACode = HxOverrides.cca("A",0);
	var upperZCode = HxOverrides.cca("Z",0);
	var i = 0;
	var hyphen = "";
	while(i < camel.length) {
		var code = HxOverrides.cca(camel,i);
		var character = HxOverrides.substr(camel,i,1);
		if(upperACode <= code && code <= upperZCode) hyphen += "-" + character.toLowerCase(); else hyphen += character;
		++i;
	}
	return hyphen;
}
com.wiris.util.css.CSSUtils.hyphenDelimitedToCamelCase = function(hyphen) {
	var i = HxOverrides.iter(hyphen.split("-"));
	if(!i.hasNext()) return "";
	var camel = i.next();
	while(i.hasNext()) {
		var word = i.next();
		if(word.length > 0) camel += HxOverrides.substr(word,0,1).toUpperCase() + HxOverrides.substr(word,1,null).toLowerCase();
	}
	return camel;
}
com.wiris.util.css.CSSUtils.sort = function(a) {
	var i;
	var j;
	var n = a.length;
	var _g = 0;
	while(_g < n) {
		var i1 = _g++;
		var _g1 = i1 + 1;
		while(_g1 < n) {
			var j1 = _g1++;
			var s1 = a[i1];
			var s2 = a[j1];
			if(com.wiris.system.StringEx.compareTo(s1,s2) > 0) {
				a[i1] = s2;
				a[j1] = s1;
			}
		}
	}
}
com.wiris.util.css.CSSUtils.colorToName = function(color) {
	com.wiris.util.css.CSSUtils.ensureInitialized();
	var it = com.wiris.util.css.CSSUtils.COLOR_DATA.keys();
	while(it.hasNext()) {
		var colorName = it.next();
		var colorInfo = com.wiris.util.css.CSSUtils.COLOR_DATA.get(colorName);
		if(colorInfo.getColorAsRgbHex() == color) return colorName;
	}
	return color;
}
com.wiris.util.css.CSSUtils.nameToColor = function(name) {
	com.wiris.util.css.CSSUtils.ensureInitialized();
	return com.wiris.util.css.CSSUtils.COLOR_DATA.exists(name)?com.wiris.util.css.CSSUtils.COLOR_DATA.get(name).getColorAsRgbHex():"#000";
}
com.wiris.util.css.CSSUtils.nameToColorInfo = function(name) {
	com.wiris.util.css.CSSUtils.ensureInitialized();
	if(name == null) return null;
	name = name.toLowerCase();
	return com.wiris.util.css.CSSUtils.COLOR_DATA.exists(name)?com.wiris.util.css.CSSUtils.COLOR_DATA.get(name):null;
}
com.wiris.util.css.CSSUtils.rgbToColorInfo = function(rgb) {
	com.wiris.util.css.CSSUtils.ensureInitialized();
	var it = com.wiris.util.css.CSSUtils.COLOR_DATA.keys();
	while(it.hasNext()) {
		var colorName = it.next();
		var colorInfo = com.wiris.util.css.CSSUtils.COLOR_DATA.get(colorName);
		if(rgb == colorInfo.getColor()) return colorInfo;
	}
	return null;
}
com.wiris.util.css.CSSUtils.cssColorToRgb = function(colorValue) {
	var potentialCssColor = com.wiris.util.css.CSSUtils.nameToColorInfo(colorValue);
	if(potentialCssColor != null) return potentialCssColor.getColor();
	if(com.wiris.util.css.CSSUtils.SUPPORTED_CSS_HEX_VALUES_REGEX.match(colorValue)) {
		var hexValue = com.wiris.util.type.StringUtils.slice(colorValue,1,colorValue.length);
		var intValue = Std.parseInt("0x" + hexValue);
		if(hexValue.length == 3) intValue = 17 * ((intValue & 3840) << 8 | (intValue & 240) << 4 | intValue & 15);
		return intValue;
	}
	return -1;
}
com.wiris.util.css.CSSUtils.ensureInitialized = function() {
	if(com.wiris.util.css.CSSUtils.COLOR_DATA != null) return;
	com.wiris.util.css.CSSUtils.COLOR_DATA = new Hash();
	com.wiris.util.css.CSSUtils.makeColor("black",0,com.wiris.util.css.CSSColorInfo.CSS_LEVEL_1);
	com.wiris.util.css.CSSUtils.makeColor("silver",12632256,com.wiris.util.css.CSSColorInfo.CSS_LEVEL_1);
	com.wiris.util.css.CSSUtils.makeColor("gray",8421504,com.wiris.util.css.CSSColorInfo.CSS_LEVEL_1);
	com.wiris.util.css.CSSUtils.makeColor("white",16777215,com.wiris.util.css.CSSColorInfo.CSS_LEVEL_1);
	com.wiris.util.css.CSSUtils.makeColor("maroon",8388608,com.wiris.util.css.CSSColorInfo.CSS_LEVEL_1);
	com.wiris.util.css.CSSUtils.makeColor("red",16711680,com.wiris.util.css.CSSColorInfo.CSS_LEVEL_1);
	com.wiris.util.css.CSSUtils.makeColor("purple",8388736,com.wiris.util.css.CSSColorInfo.CSS_LEVEL_1);
	com.wiris.util.css.CSSUtils.makeColor("fuchsia",16711935,com.wiris.util.css.CSSColorInfo.CSS_LEVEL_1);
	com.wiris.util.css.CSSUtils.makeColor("green",32768,com.wiris.util.css.CSSColorInfo.CSS_LEVEL_1);
	com.wiris.util.css.CSSUtils.makeColor("lime",65280,com.wiris.util.css.CSSColorInfo.CSS_LEVEL_1);
	com.wiris.util.css.CSSUtils.makeColor("olive",8421376,com.wiris.util.css.CSSColorInfo.CSS_LEVEL_1);
	com.wiris.util.css.CSSUtils.makeColor("yellow",16776960,com.wiris.util.css.CSSColorInfo.CSS_LEVEL_1);
	com.wiris.util.css.CSSUtils.makeColor("navy",128,com.wiris.util.css.CSSColorInfo.CSS_LEVEL_1);
	com.wiris.util.css.CSSUtils.makeColor("blue",255,com.wiris.util.css.CSSColorInfo.CSS_LEVEL_1);
	com.wiris.util.css.CSSUtils.makeColor("teal",32896,com.wiris.util.css.CSSColorInfo.CSS_LEVEL_1);
	com.wiris.util.css.CSSUtils.makeColor("aqua",65535,com.wiris.util.css.CSSColorInfo.CSS_LEVEL_1);
	com.wiris.util.css.CSSUtils.makeColor("orange",16753920,com.wiris.util.css.CSSColorInfo.CSS_LEVEL_2_1);
	com.wiris.util.css.CSSUtils.makeColor("aliceblue",15792383,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("antiquewhite",16444375,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("aquamarine",8388564,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("azure",15794175,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("beige",16119260,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("bisque",16770244,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("blanchedalmond",16772045,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("blueviolet",9055202,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("brown",10824234,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("burlywood",14596231,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("cadetblue",6266528,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("chartreuse",8388352,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("chocolate",13789470,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("coral",16744272,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("cornflowerblue",6591981,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("cornsilk",16775388,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("crimson",14423100,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("cyan",65535,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darkblue",139,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darkcyan",35723,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darkgoldenrod",12092939,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darkgray",11119017,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darkgreen",25600,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darkgrey",11119017,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darkkhaki",12433259,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darkmagenta",9109643,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darkolivegreen",5597999,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darkorange",16747520,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darkorchid",10040012,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darkred",9109504,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darksalmon",15308410,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darkseagreen",9419919,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darkslateblue",4734347,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darkslategray",3100495,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darkslategrey",3100495,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darkturquoise",52945,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("darkviolet",9699539,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("deeppink",16716947,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("deepskyblue",49151,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("dimgray",6908265,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("dimgrey",6908265,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("dodgerblue",2003199,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("firebrick",11674146,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("floralwhite",16775920,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("forestgreen",2263842,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("gainsboro",14474460,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("ghostwhite",16316671,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("gold",16766720,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("goldenrod",14329120,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("greenyellow",11403055,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("grey",8421504,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("honeydew",15794160,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("hotpink",16738740,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("indianred",13458524,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("indigo",4915330,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("ivory",16777200,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("khaki",15787660,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lavender",15132410,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lavenderblush",16773365,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lawngreen",8190976,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lemonchiffon",16775885,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lightblue",11393254,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lightcoral",15761536,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lightcyan",14745599,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lightgoldenrodyellow",16448210,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lightgray",13882323,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lightgreen",9498256,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lightgrey",13882323,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lightpink",16758465,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lightsalmon",16752762,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lightseagreen",2142890,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lightskyblue",8900346,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lightslategray",7833753,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lightslategrey",7833753,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lightsteelblue",11584734,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("lightyellow",16777184,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("limegreen",3329330,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("linen",16445670,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("magenta",16711935,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("mediumaquamarine",6737322,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("mediumblue",205,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("mediumorchid",12211667,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("mediumpurple",9662683,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("mediumseagreen",3978097,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("mediumslateblue",8087790,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("mediumspringgreen",64154,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("mediumturquoise",4772300,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("mediumvioletred",13047173,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("midnightblue",1644912,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("mintcream",16121850,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("mistyrose",16770273,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("moccasin",16770229,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("navajowhite",16768685,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("oldlace",16643558,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("olivedrab",7048739,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("orangered",16729344,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("orchid",14315734,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("palegoldenrod",15657130,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("palegreen",10025880,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("paleturquoise",11529966,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("palevioletred",14381203,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("papayawhip",16773077,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("peachpuff",16767673,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("peru",13468991,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("pink",16761035,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("plum",14524637,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("powderblue",11591910,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("rosybrown",12357519,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("royalblue",4286945,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("saddlebrown",9127187,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("salmon",16416882,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("sandybrown",16032864,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("seagreen",3050327,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("seashell",16774638,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("sienna",10506797,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("skyblue",8900331,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("slateblue",6970061,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("slategray",7372944,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("slategrey",7372944,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("snow",16775930,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("springgreen",65407,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("steelblue",4620980,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("tan",13808780,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("thistle",14204888,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("tomato",16737095,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("turquoise",4251856,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("violet",15631086,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("wheat",16113331,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("whitesmoke",16119285,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("yellowgreen",10145074,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3);
	com.wiris.util.css.CSSUtils.makeColor("rebeccapurple",6697881,com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_4);
}
com.wiris.util.css.CSSUtils.makeColor = function(name,rgb,standard) {
	var colorInfo = new com.wiris.util.css.CSSColorInfo(name,rgb,standard);
	com.wiris.util.css.CSSUtils.COLOR_DATA.set(name,colorInfo);
}
if(!com.wiris.util.geometry) com.wiris.util.geometry = {}
com.wiris.util.geometry.GeometryConstraint = $hxClasses["com.wiris.util.geometry.GeometryConstraint"] = function(data) {
	this.data = data;
};
com.wiris.util.geometry.GeometryConstraint.__name__ = ["com","wiris","util","geometry","GeometryConstraint"];
com.wiris.util.geometry.GeometryConstraint.newGeometryConstraint = function() {
	return new com.wiris.util.geometry.GeometryConstraint(new Hash());
}
com.wiris.util.geometry.GeometryConstraint.prototype = {
	setInput: function(input) {
		var a = new Array();
		var i;
		var _g1 = 0, _g = input.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			a.push(input[i1]);
		}
		this.data.set(com.wiris.util.geometry.GeometryConstraint.INPUT,a);
	}
	,getInput: function() {
		var a = com.wiris.util.json.JSon.getArray(this.data.get(com.wiris.util.geometry.GeometryConstraint.INPUT));
		var inp = new Array();
		var i;
		var _g1 = 0, _g = a.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			inp[i1] = com.wiris.util.json.JSon.getString(a[i1]);
		}
		return inp;
	}
	,setOutput: function(output) {
		var a = new Array();
		var i;
		var _g1 = 0, _g = output.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			a.push(output[i1]);
		}
		this.data.set(com.wiris.util.geometry.GeometryConstraint.OUTPUT,a);
	}
	,getOutput: function() {
		var a = com.wiris.util.json.JSon.getArray(this.data.get(com.wiris.util.geometry.GeometryConstraint.OUTPUT));
		var ou = new Array();
		var i;
		var _g1 = 0, _g = a.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			ou[i1] = com.wiris.util.json.JSon.getString(a[i1]);
		}
		return ou;
	}
	,setType: function(type) {
		this.data.set(com.wiris.util.geometry.GeometryConstraint.TYPE,type);
	}
	,getType: function() {
		return com.wiris.util.json.JSon.getString(this.data.get(com.wiris.util.geometry.GeometryConstraint.TYPE));
	}
	,data: null
	,__class__: com.wiris.util.geometry.GeometryConstraint
}
com.wiris.util.geometry.GeometryDisplay = $hxClasses["com.wiris.util.geometry.GeometryDisplay"] = function(data) {
	this.data = data;
};
com.wiris.util.geometry.GeometryDisplay.__name__ = ["com","wiris","util","geometry","GeometryDisplay"];
com.wiris.util.geometry.GeometryDisplay.fromJSON = function(json) {
	return new com.wiris.util.geometry.GeometryDisplay(com.wiris.util.json.JSon.getHash(com.wiris.util.json.JSon.decode(json)));
}
com.wiris.util.geometry.GeometryDisplay.prototype = {
	isStatsPlotter: function() {
		var property = this.getProperty(com.wiris.util.geometry.GeometryDisplay.STATS_AXIS);
		return property != null && com.wiris.util.json.JSon.getBoolean(property);
	}
	,getElementStyleData: function(referer) {
		var elemStyles = this.data.get(com.wiris.util.geometry.GeometryDisplay.STYLES);
		var _g = 0;
		while(_g < elemStyles.length) {
			var elem = elemStyles[_g];
			++_g;
			var styleData = com.wiris.util.json.JSon.getHash(elem);
			if(referer == styleData.get(com.wiris.util.geometry.GeometryElementStyle.REFER)) return styleData;
		}
		return null;
	}
	,getElementNames: function() {
		var styles = this.data.get(com.wiris.util.geometry.GeometryDisplay.STYLES);
		if(styles == null) return new Array();
		var refs = new Array();
		var _g = 0;
		while(_g < styles.length) {
			var s = styles[_g];
			++_g;
			refs.push(s.get(com.wiris.util.geometry.GeometryElementStyle.REFER).toString());
		}
		return refs;
	}
	,setElementStyle: function(referer,style) {
		var h = style.data;
		h.set(com.wiris.util.geometry.GeometryElementStyle.REFER,referer);
		if(!this.data.exists(com.wiris.util.geometry.GeometryDisplay.STYLES)) this.data.set(com.wiris.util.geometry.GeometryDisplay.STYLES,new Array());
		this.data.get(com.wiris.util.geometry.GeometryDisplay.STYLES).push(h);
	}
	,deleteElement: function(elemName) {
		var index = 0;
		var styles = this.data.get(com.wiris.util.geometry.GeometryDisplay.STYLES);
		while(index < styles.length) {
			var elemData = styles[index];
			if(elemData.get(com.wiris.util.geometry.GeometryElementStyle.REFER).toString() == elemName) break; else ++index;
		}
		this.data.get(com.wiris.util.geometry.GeometryDisplay.STYLES).splice(index,1);
	}
	,getElementStyle: function(referer) {
		return new com.wiris.util.geometry.GeometryElementStyle(this.getElementStyleData(referer));
	}
	,containsElement: function(elemName) {
		return com.wiris.system.ArrayEx.contains(this.getElementNames(),elemName);
	}
	,getProperty: function(key) {
		return this.data.get(key);
	}
	,setProperties: function(properties) {
		var keys = properties.keys();
		while(keys.hasNext()) {
			var key = keys.next();
			this.data.set(key,properties.get(key));
		}
	}
	,setProperty: function(key,value) {
		this.data.set(key,value);
	}
	,toJSON: function() {
		return com.wiris.util.json.JSon.encode(this.data);
	}
	,data: null
	,__class__: com.wiris.util.geometry.GeometryDisplay
}
com.wiris.util.geometry.GeometryElement = $hxClasses["com.wiris.util.geometry.GeometryElement"] = function(data) {
	this.data = data;
};
com.wiris.util.geometry.GeometryElement.__name__ = ["com","wiris","util","geometry","GeometryElement"];
com.wiris.util.geometry.GeometryElement.newGeometryElement = function() {
	return new com.wiris.util.geometry.GeometryElement(new Hash());
}
com.wiris.util.geometry.GeometryElement.prototype = {
	isStatsObject: function() {
		var type = this.getType();
		return com.wiris.util.geometry.GeometryElement.HISTOGRAM == type || com.wiris.util.geometry.GeometryElement.PIE_CHART == type || com.wiris.util.geometry.GeometryElement.BOX_PLOT == type || com.wiris.util.geometry.GeometryElement.BAR_CHART == type || com.wiris.util.geometry.GeometryElement.LINE_CHART == type;
	}
	,setProperty: function(key,value) {
		this.data.set(key,value);
	}
	,setBinLimits: function(b) {
		var c = new Array();
		var _g1 = 0, _g = b.length;
		while(_g1 < _g) {
			var i = _g1++;
			c.push(b[i]);
		}
		this.data.set(com.wiris.util.geometry.GeometryElement.BIN_LIMITS,c);
	}
	,setStatisticalData2D: function(d) {
		var c = new Array();
		var _g1 = 0, _g = d.length;
		while(_g1 < _g) {
			var i = _g1++;
			var cc = new Array();
			var _g3 = 0, _g2 = d[i].length;
			while(_g3 < _g2) {
				var j = _g3++;
				cc.push(d[i][j]);
			}
			c.push(cc);
		}
		this.data.set(com.wiris.util.geometry.GeometryElement.STATISTICAL_DATA,c);
	}
	,setStatisticalData1D: function(d) {
		var c = new Array();
		var _g1 = 0, _g = d.length;
		while(_g1 < _g) {
			var i = _g1++;
			c.push(d[i]);
		}
		this.data.set(com.wiris.util.geometry.GeometryElement.STATISTICAL_DATA,c);
	}
	,addCircuit: function(vertices,pieces,pieceReversed) {
		var circuits;
		if(this.data.exists(com.wiris.util.geometry.GeometryElement.CIRCUITS)) circuits = com.wiris.util.json.JSon.getArray(this.data.get(com.wiris.util.geometry.GeometryElement.CIRCUITS)); else {
			circuits = new Array();
			this.data.set(com.wiris.util.geometry.GeometryElement.CIRCUITS,circuits);
		}
		var circuit = new Hash();
		circuit.set(com.wiris.util.geometry.GeometryElement.VERTICES,vertices);
		circuit.set(com.wiris.util.geometry.GeometryElement.PIECE_REVERSED,pieceReversed);
		var piecesArray = new Array();
		var i = 0;
		var _g1 = 0, _g = pieces.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			piecesArray.push(pieces[i1].data);
		}
		circuit.set(com.wiris.util.geometry.GeometryElement.PIECES,piecesArray);
		circuits.push(circuit);
	}
	,setTextBoxMathML: function(text) {
		this.data.set(com.wiris.util.geometry.GeometryElement.TEXT,text);
	}
	,setWirisCasComputed: function(wirisCasComputed) {
		var b = wirisCasComputed?"true":"false";
		this.data.set(com.wiris.util.geometry.GeometryElement.FROM_CAS_KERNEL,b);
	}
	,setRayCoordinates: function(x,y,v0,v1) {
		var c = new Array();
		var p = new Array();
		var d = new Array();
		p.push(x);
		p.push(y);
		d.push(v0);
		d.push(v1);
		c.push(p);
		c.push(d);
		this.data.set(com.wiris.util.geometry.GeometryElement.COORDINATES,c);
	}
	,setLineCoordinates: function(coords) {
		this.setCoordinates(coords);
	}
	,setDefinition: function(definition) {
		this.data.set(com.wiris.util.geometry.GeometryElement.DEFINITION,definition);
	}
	,getValue: function() {
		return com.wiris.util.json.JSon.getString(this.data.get(com.wiris.util.geometry.GeometryElement.VALUE));
	}
	,setValue: function(value) {
		this.data.set(com.wiris.util.geometry.GeometryElement.VALUE,value);
	}
	,getElement: function(i) {
		return new com.wiris.util.geometry.GeometryElement(com.wiris.util.json.JSon.getHash(com.wiris.util.json.JSon.getArray(this.data.get(com.wiris.util.geometry.GeometryElement.ELEMENTS))[i]));
	}
	,getElementsLength: function() {
		return this.data.exists(com.wiris.util.geometry.GeometryElement.ELEMENTS)?com.wiris.util.json.JSon.getArray(this.data.get(com.wiris.util.geometry.GeometryElement.ELEMENTS)).length:0;
	}
	,addElement: function(e) {
		var elements = this.data.exists(com.wiris.util.geometry.GeometryElement.ELEMENTS)?com.wiris.util.json.JSon.getArray(this.data.get(com.wiris.util.geometry.GeometryElement.ELEMENTS)):new Array();
		elements.push(e.data);
		this.data.set(com.wiris.util.geometry.GeometryElement.ELEMENTS,elements);
	}
	,setPolygonalCoordinates: function(n,x,y) {
		var c = new Array();
		var i;
		var _g = 0;
		while(_g < n) {
			var i1 = _g++;
			var p = new Array();
			p.push(x[i1]);
			p.push(y[i1]);
			c.push(p);
		}
		this.data.set(com.wiris.util.geometry.GeometryElement.COORDINATES,c);
	}
	,setConicArcCoordinates: function(coords,start,end) {
		this.setCoordinates(coords);
		this.setInterval(start,end);
	}
	,setInterval: function(start,end) {
		var i = new Array();
		i.push(start);
		i.push(end);
		this.data.set(com.wiris.util.geometry.GeometryElement.INTERVAL,i);
	}
	,setArcCoordinates: function(x,y,r,start,end) {
		this.setCircumferenceCoordinates(x,y,r);
		this.setInterval(start,end);
	}
	,setCoordinates: function(coords) {
		var c = new Array();
		var i;
		var _g1 = 0, _g = coords.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			c.push(coords[i1]);
		}
		this.data.set(com.wiris.util.geometry.GeometryElement.COORDINATES,c);
	}
	,setConicCoordinates: function(coords) {
		this.setCoordinates(coords);
	}
	,setCircumferenceCoordinates: function(x,y,r) {
		var c = new Array();
		var p = new Array();
		p.push(x);
		p.push(y);
		c.push(p);
		c.push(r);
		this.data.set(com.wiris.util.geometry.GeometryElement.COORDINATES,c);
	}
	,setSegmentCoordinates: function(x1,y1,x2,y2) {
		var c = new Array();
		var p1 = new Array();
		p1.push(x1);
		p1.push(y1);
		c.push(p1);
		var p2 = new Array();
		p2.push(x2);
		p2.push(y2);
		c.push(p2);
		this.data.set(com.wiris.util.geometry.GeometryElement.COORDINATES,c);
	}
	,setPointCoordinates: function(x,y) {
		var c = new Array();
		c.push(x);
		c.push(y);
		this.data.set(com.wiris.util.geometry.GeometryElement.COORDINATES,c);
	}
	,getCoordinates: function() {
		return this.data.get(com.wiris.util.geometry.GeometryElement.COORDINATES);
	}
	,setId: function(id) {
		this.data.set(com.wiris.util.geometry.GeometryElement.ID,id);
	}
	,getId: function() {
		return com.wiris.util.json.JSon.getString(this.data.get(com.wiris.util.geometry.GeometryElement.ID));
	}
	,setType: function(type) {
		this.data.set(com.wiris.util.geometry.GeometryElement.TYPE,type);
	}
	,getType: function() {
		return com.wiris.util.json.JSon.getString(this.data.get(com.wiris.util.geometry.GeometryElement.TYPE));
	}
	,data: null
	,__class__: com.wiris.util.geometry.GeometryElement
}
com.wiris.util.geometry.GeometryElementStyle = $hxClasses["com.wiris.util.geometry.GeometryElementStyle"] = function(data) {
	this.data = data;
};
com.wiris.util.geometry.GeometryElementStyle.__name__ = ["com","wiris","util","geometry","GeometryElementStyle"];
com.wiris.util.geometry.GeometryElementStyle.readJSON = function(json) {
	return new com.wiris.util.geometry.GeometryElementStyle(com.wiris.util.json.JSon.getHash(com.wiris.util.json.JSon.decode(json)));
}
com.wiris.util.geometry.GeometryElementStyle.newGeometryElementStyle = function() {
	return new com.wiris.util.geometry.GeometryElementStyle(new Hash());
}
com.wiris.util.geometry.GeometryElementStyle.prototype = {
	getProperty: function(key) {
		return this.data.get(key);
	}
	,setProperty: function(key,value) {
		this.data.set(key,value);
	}
	,data: null
	,__class__: com.wiris.util.geometry.GeometryElementStyle
}
com.wiris.util.geometry.GeometryElementSummary = $hxClasses["com.wiris.util.geometry.GeometryElementSummary"] = function(id,type,definition,isStatsPart,label,value) {
	this.id = id;
	this.type = type;
	this.definition = definition;
	this.statsPart = isStatsPart;
	this.label = label;
	this.value = value;
};
com.wiris.util.geometry.GeometryElementSummary.__name__ = ["com","wiris","util","geometry","GeometryElementSummary"];
com.wiris.util.geometry.GeometryElementSummary.fromGeometryElement = function(geometryElement,definition) {
	var id = geometryElement.getId();
	var type = geometryElement.getType();
	var isStatsPart = com.wiris.util.type.StringUtils.contains(id,"$") && (com.wiris.util.geometry.GeometryElement.PIE_CHART == type || com.wiris.util.geometry.GeometryElement.BOX_PLOT == type || com.wiris.util.geometry.GeometryElement.BAR_CHART == type || com.wiris.util.geometry.GeometryElement.LINE_CHART == type || com.wiris.util.geometry.GeometryElement.HISTOGRAM == type);
	return new com.wiris.util.geometry.GeometryElementSummary(geometryElement.getId(),geometryElement.getType(),definition,isStatsPart,"","");
}
com.wiris.util.geometry.GeometryElementSummary.prototype = {
	getValue: function() {
		return this.value;
	}
	,getLabel: function() {
		return this.label;
	}
	,isStatsPart: function() {
		return this.statsPart;
	}
	,getDefinition: function() {
		return this.definition;
	}
	,getType: function() {
		return this.type;
	}
	,getId: function() {
		return this.id;
	}
	,value: null
	,label: null
	,statsPart: null
	,definition: null
	,type: null
	,id: null
	,__class__: com.wiris.util.geometry.GeometryElementSummary
}
com.wiris.util.geometry.GeometryFile = $hxClasses["com.wiris.util.geometry.GeometryFile"] = function(data) {
	this.data = data;
};
com.wiris.util.geometry.GeometryFile.__name__ = ["com","wiris","util","geometry","GeometryFile"];
com.wiris.util.geometry.GeometryFile.readJSON = function(json) {
	return new com.wiris.util.geometry.GeometryFile(com.wiris.util.json.JSon.getHash(com.wiris.util.json.JSon.decode(json)));
}
com.wiris.util.geometry.GeometryFile.newGeometryFile = function() {
	var data = new Hash();
	data.set(com.wiris.util.geometry.GeometryFile.ELEMENTS,new Array());
	data.set(com.wiris.util.geometry.GeometryFile.CONSTRAINTS,new Array());
	data.set(com.wiris.util.geometry.GeometryFile.DISPLAYS,new Array());
	data.set(com.wiris.util.geometry.GeometryFile.HANDWRITING_TRACES,new Array());
	return new com.wiris.util.geometry.GeometryFile(data);
}
com.wiris.util.geometry.GeometryFile.isGeometryFile = function(str) {
	try {
		if(com.wiris.util.json.JSon.isJson(str) && str.indexOf("{") != -1 && str.indexOf("}") != -1) {
			var hash = com.wiris.util.json.JSon.getHash(com.wiris.util.json.JSon.decode(str));
			if(hash == null || !com.wiris.system.TypeTools.isHash(hash)) return false;
			var geometryTags = [com.wiris.util.geometry.GeometryFile.ELEMENTS,com.wiris.util.geometry.GeometryFile.CONSTRAINTS,com.wiris.util.geometry.GeometryFile.DISPLAYS];
			var _g = 0;
			while(_g < geometryTags.length) {
				var geometryTag = geometryTags[_g];
				++_g;
				if(com.wiris.util.type.HashUtils.exists(hash,geometryTag)) return true;
			}
		}
	} catch( t ) {
		return false;
	}
	return false;
}
com.wiris.util.geometry.GeometryFile.prototype = {
	getGeometryHandwriting: function(i) {
		return new com.wiris.util.geometry.GeometryHandwriting(com.wiris.util.json.JSon.getHash(this.getHandwritingTraces()[i]));
	}
	,getHandwritingTracesLength: function() {
		var a = this.getHandwritingTraces();
		return a == null?0:a.length;
	}
	,getHandwritingTraces: function() {
		return com.wiris.util.json.JSon.getArray(this.data.get(com.wiris.util.geometry.GeometryFile.HANDWRITING_TRACES));
	}
	,addHandwriting: function(h) {
		this.getHandwritingTraces().push(h.data);
	}
	,deleteElement: function(i) {
		if(i < 0 || i >= this.getElementsLength()) return;
		this.getElements().splice(i,1);
	}
	,removeDisplay: function(i) {
		if(i < 0 || i >= this.getDisplaysLength()) return;
		this.getDisplays().splice(i,1);
	}
	,getGeometryConstraint: function(i) {
		return new com.wiris.util.geometry.GeometryConstraint(com.wiris.util.json.JSon.getHash(this.getConstraints()[i]));
	}
	,addConstraint: function(c) {
		this.getConstraints().push(c.data);
	}
	,getConstraintsLength: function() {
		var a = this.getConstraints();
		return a != null?this.getConstraints().length:0;
	}
	,getConstraints: function() {
		return com.wiris.util.json.JSon.getArray(this.data.get(com.wiris.util.geometry.GeometryFile.CONSTRAINTS));
	}
	,getDisplayById: function(id) {
		var _g1 = 0, _g = this.getDisplaysLength();
		while(_g1 < _g) {
			var i = _g1++;
			var display = this.getDisplay(i);
			if(id == display.getProperty(com.wiris.util.geometry.GeometryDisplay.ID)) return display;
		}
		return null;
	}
	,getDisplay: function(i) {
		return new com.wiris.util.geometry.GeometryDisplay(com.wiris.util.json.JSon.getHash(this.getDisplays()[i]));
	}
	,newDisplay: function() {
		this.getDisplays().push(new Hash());
		return this.getDisplay(this.getDisplaysLength() - 1);
	}
	,getDisplaysLength: function() {
		var a = this.getDisplays();
		return a != null?a.length:0;
	}
	,getDisplays: function() {
		return com.wiris.util.json.JSon.getArray(this.data.get(com.wiris.util.geometry.GeometryFile.DISPLAYS));
	}
	,addElement: function(e) {
		this.getElements().push(e.data);
	}
	,getElement: function(i) {
		return new com.wiris.util.geometry.GeometryElement(this.getElements()[i]);
	}
	,getElementsLength: function() {
		var a = this.getElements();
		return a != null?a.length:0;
	}
	,getElements: function() {
		return com.wiris.util.json.JSon.getArray(this.data.get(com.wiris.util.geometry.GeometryFile.ELEMENTS));
	}
	,toJSON: function() {
		return com.wiris.util.json.JSon.encode(this.data);
	}
	,data: null
	,__class__: com.wiris.util.geometry.GeometryFile
}
com.wiris.util.geometry.GeometryHandwriting = $hxClasses["com.wiris.util.geometry.GeometryHandwriting"] = function(data) {
	this.data = data;
};
com.wiris.util.geometry.GeometryHandwriting.__name__ = ["com","wiris","util","geometry","GeometryHandwriting"];
com.wiris.util.geometry.GeometryHandwriting.newGeometryHandwriting = function() {
	var data = new Hash();
	return new com.wiris.util.geometry.GeometryHandwriting(data);
}
com.wiris.util.geometry.GeometryHandwriting.prototype = {
	setDisplayId: function(displayId) {
		this.data.set(com.wiris.util.geometry.GeometryHandwriting.DISPLAY_ID,displayId);
	}
	,getDisplayId: function() {
		return this.data.exists(com.wiris.util.geometry.GeometryHandwriting.DISPLAY_ID)?com.wiris.util.json.JSon.getString(this.data.get(com.wiris.util.geometry.GeometryHandwriting.DISPLAY_ID)):"";
	}
	,setStrokes: function(strokes) {
		this.data.set(com.wiris.util.geometry.GeometryHandwriting.STROKES,strokes);
	}
	,data: null
	,getStrokes: function() {
		var s = new Array();
		var o = this.data.get(com.wiris.util.geometry.GeometryHandwriting.STROKES);
		if(o == null) return s;
		var a1 = com.wiris.util.json.JSon.getArray(o);
		var _g = 0;
		while(_g < a1.length) {
			var o1 = a1[_g];
			++_g;
			var s1 = new Array();
			var a2 = com.wiris.util.json.JSon.getArray(o1);
			var _g1 = 0;
			while(_g1 < a2.length) {
				var o2 = a2[_g1];
				++_g1;
				var a3 = com.wiris.util.json.JSon.getArray(o2);
				var s2 = new Array();
				var k;
				var _g3 = 0, _g2 = a3.length;
				while(_g3 < _g2) {
					var k1 = _g3++;
					s2[k1] = com.wiris.util.json.JSon.getFloat(a3[k1]);
				}
				s1.push(s2);
			}
			s.push(s1);
		}
		return s;
	}
	,__class__: com.wiris.util.geometry.GeometryHandwriting
}
com.wiris.util.geometry.GeometryTools = $hxClasses["com.wiris.util.geometry.GeometryTools"] = function() { }
com.wiris.util.geometry.GeometryTools.__name__ = ["com","wiris","util","geometry","GeometryTools"];
com.wiris.util.geometry.GeometryTools.segmentsIntersect = function(s1A,s1B,s2A,s2B) {
	return com.wiris.util.geometry.GeometryTools.pointSegmentPosition(s1A,s1B,s2A) * com.wiris.util.geometry.GeometryTools.pointSegmentPosition(s1A,s1B,s2B) < 0 && com.wiris.util.geometry.GeometryTools.pointSegmentPosition(s2A,s2B,s1A) * com.wiris.util.geometry.GeometryTools.pointSegmentPosition(s2A,s2B,s1B) < 0;
}
com.wiris.util.geometry.GeometryTools.pointInsidePolygon = function(p,polygon) {
	var winding = 0;
	var i = 0;
	var n = polygon.length;
	while(i < n) {
		var polygonSidePointA = polygon[i];
		var polygonSidePointB = polygon[(i + 1) % n];
		if(polygonSidePointA[1] <= p[1]) {
			if(polygonSidePointB[1] > p[1]) {
				if(com.wiris.util.geometry.GeometryTools.pointSegmentPosition(polygonSidePointA,polygonSidePointB,p) > 0) ++winding;
			}
		} else if(polygonSidePointB[1] <= p[1]) {
			if(com.wiris.util.geometry.GeometryTools.pointSegmentPosition(polygonSidePointA,polygonSidePointB,p) < 0) --winding;
		}
		++i;
	}
	return winding != 0;
}
com.wiris.util.geometry.GeometryTools.segmentToRectangle = function(a,b,thickness) {
	var dx = b[0] - a[0];
	var dy = b[1] - a[1];
	var lineLength = Math.sqrt(dx * dx + dy * dy);
	if(lineLength == 0) return null;
	var udx = dx / lineLength;
	var udy = dy / lineLength;
	var rectangle = new Array();
	rectangle.push([a[0] - udy * thickness / 2.0,a[1] + udx * thickness / 2.0]);
	rectangle.push([rectangle[0][0] + dx,rectangle[0][1] + dy]);
	rectangle.push([rectangle[1][0] + udy * thickness,rectangle[1][1] - udx * thickness]);
	rectangle.push([rectangle[2][0] - dx,rectangle[2][1] - dy]);
	return rectangle;
}
com.wiris.util.geometry.GeometryTools.getPolylineBounds = function(polyline) {
	var bounds = [polyline[0][0],polyline[0][0],polyline[0][1],polyline[0][1]];
	var i = 1;
	var n = polyline.length;
	while(i < n) {
		var point = polyline[i];
		if(point[0] < bounds[0]) bounds[0] = point[0];
		if(point[0] > bounds[1]) bounds[1] = point[0];
		if(point[1] < bounds[2]) bounds[2] = point[1];
		if(point[1] > bounds[3]) bounds[3] = point[1];
	}
	return bounds;
}
com.wiris.util.geometry.GeometryTools.polyineToPolygon = function(polyline,lineThickness) {
	var bounds = com.wiris.util.geometry.GeometryTools.getPolylineBounds(polyline);
	return com.wiris.util.geometry.GeometryTools.polyineToPolygonImpl(polyline,lineThickness,bounds[0],bounds[1],bounds[2],bounds[3],0);
}
com.wiris.util.geometry.GeometryTools.polyineToPolygonImpl = function(polyline,lineThickness,minX,minY,maxX,maxY,margin) {
	if(2 * margin < maxX - minX && 2 * margin < maxY - minY) {
		minX += margin;
		minY += margin;
		maxX -= margin;
		maxY -= margin;
	}
	var i = 0;
	var n = polyline.length;
	var j = -1;
	while(i < n) {
		var point = polyline[i];
		if(point[0] >= minX && point[0] <= maxX && point[1] >= minY && point[1] <= maxY) {
			j = i;
			break;
		}
		++i;
	}
	var polygon = new Array();
	i = j + 1;
	var insertionPosition = 0;
	while(i < n) {
		var point = polyline[i];
		if(point[0] >= minX && point[0] <= maxX && point[1] >= minY && point[1] <= maxY) {
			var rectangle = com.wiris.util.geometry.GeometryTools.segmentToRectangle(polyline[j],point,lineThickness);
			if(rectangle != null) {
				polygon.splice(insertionPosition++,0,rectangle[1]);
				polygon.splice(insertionPosition++,0,rectangle[1]);
				polygon.splice(insertionPosition,0,rectangle[3]);
				polygon.splice(insertionPosition,0,rectangle[2]);
			}
			j = i;
		}
		++i;
	}
	if(polygon.length == 0) return null;
	return polygon;
}
com.wiris.util.geometry.GeometryTools.pointSegmentPosition = function(sA,sB,p) {
	return (sB[0] - sA[0]) * (p[1] - sA[1]) - (sB[1] - sA[1]) * (p[0] - sA[0]);
}
com.wiris.util.geometry.GraphMode = $hxClasses["com.wiris.util.geometry.GraphMode"] = { __ename__ : ["com","wiris","util","geometry","GraphMode"], __constructs__ : ["STANDARD","HISTOGRAM","BAR_CHART","BOX_PLOT","PIE_CHART","LINE_CHART","SKETCH","UNDECIDED_STANDARD_SKETCH"] }
com.wiris.util.geometry.GraphMode.STANDARD = ["STANDARD",0];
com.wiris.util.geometry.GraphMode.STANDARD.toString = $estr;
com.wiris.util.geometry.GraphMode.STANDARD.__enum__ = com.wiris.util.geometry.GraphMode;
com.wiris.util.geometry.GraphMode.HISTOGRAM = ["HISTOGRAM",1];
com.wiris.util.geometry.GraphMode.HISTOGRAM.toString = $estr;
com.wiris.util.geometry.GraphMode.HISTOGRAM.__enum__ = com.wiris.util.geometry.GraphMode;
com.wiris.util.geometry.GraphMode.BAR_CHART = ["BAR_CHART",2];
com.wiris.util.geometry.GraphMode.BAR_CHART.toString = $estr;
com.wiris.util.geometry.GraphMode.BAR_CHART.__enum__ = com.wiris.util.geometry.GraphMode;
com.wiris.util.geometry.GraphMode.BOX_PLOT = ["BOX_PLOT",3];
com.wiris.util.geometry.GraphMode.BOX_PLOT.toString = $estr;
com.wiris.util.geometry.GraphMode.BOX_PLOT.__enum__ = com.wiris.util.geometry.GraphMode;
com.wiris.util.geometry.GraphMode.PIE_CHART = ["PIE_CHART",4];
com.wiris.util.geometry.GraphMode.PIE_CHART.toString = $estr;
com.wiris.util.geometry.GraphMode.PIE_CHART.__enum__ = com.wiris.util.geometry.GraphMode;
com.wiris.util.geometry.GraphMode.LINE_CHART = ["LINE_CHART",5];
com.wiris.util.geometry.GraphMode.LINE_CHART.toString = $estr;
com.wiris.util.geometry.GraphMode.LINE_CHART.__enum__ = com.wiris.util.geometry.GraphMode;
com.wiris.util.geometry.GraphMode.SKETCH = ["SKETCH",6];
com.wiris.util.geometry.GraphMode.SKETCH.toString = $estr;
com.wiris.util.geometry.GraphMode.SKETCH.__enum__ = com.wiris.util.geometry.GraphMode;
com.wiris.util.geometry.GraphMode.UNDECIDED_STANDARD_SKETCH = ["UNDECIDED_STANDARD_SKETCH",7];
com.wiris.util.geometry.GraphMode.UNDECIDED_STANDARD_SKETCH.toString = $estr;
com.wiris.util.geometry.GraphMode.UNDECIDED_STANDARD_SKETCH.__enum__ = com.wiris.util.geometry.GraphMode;
com.wiris.util.graphics.Area = $hxClasses["com.wiris.util.graphics.Area"] = function(x,y,width,height) {
	this.x = x;
	this.y = y;
	this.width = width;
	this.height = height;
};
com.wiris.util.graphics.Area.__name__ = ["com","wiris","util","graphics","Area"];
com.wiris.util.graphics.Area.prototype = {
	setHeight: function(height) {
		this.height = height;
	}
	,setWidth: function(width) {
		this.width = width;
	}
	,setY: function(y) {
		this.y = y;
	}
	,setX: function(x) {
		this.x = x;
	}
	,getHeight: function() {
		return this.height;
	}
	,getWidth: function() {
		return this.width;
	}
	,getY: function() {
		return this.y;
	}
	,getX: function() {
		return this.x;
	}
	,height: null
	,width: null
	,y: null
	,x: null
	,__class__: com.wiris.util.graphics.Area
}
com.wiris.util.graphics.BoxStyleInterface = $hxClasses["com.wiris.util.graphics.BoxStyleInterface"] = function() { }
com.wiris.util.graphics.BoxStyleInterface.__name__ = ["com","wiris","util","graphics","BoxStyleInterface"];
com.wiris.util.graphics.BoxStyleInterface.prototype = {
	getMathVariantFont: null
	,hasClassType: null
	,getClassType: null
	,getAlign: null
	,getMaxWidth: null
	,getWidth: null
	,getFlagsMask: null
	,getFlags: null
	,getScriptLevel: null
	,getFontSize: null
	,getFontFamily: null
	,getZoom: null
	,getP: null
	,getLineStyle: null
	,getLineWidth: null
	,getBackgroundColorWithAlpha: null
	,getBackgroundColor: null
	,getColorWithAlpha: null
	,getColor: null
	,isFlag: null
	,isFlagMask: null
	,__class__: com.wiris.util.graphics.BoxStyleInterface
}
com.wiris.util.graphics.BoxStyle = $hxClasses["com.wiris.util.graphics.BoxStyle"] = function() {
	this.p = 0;
	this.scriptLevel = 0;
	this.color = 0;
	this.backgroundColor = -1;
	this.fontFamily = "inherit";
	this.flags = 0;
	this.flagsMask = 0;
	this.fontSize = 0;
	this.lineWidth = 0;
	this.lineStyle = 0;
	this.zoom = 1.0;
	this.align = com.wiris.util.graphics.BoxStyle.AUTO_ALIGN;
	this.classType = "";
	this.mathvariantFont = "";
};
com.wiris.util.graphics.BoxStyle.__name__ = ["com","wiris","util","graphics","BoxStyle"];
com.wiris.util.graphics.BoxStyle.__interfaces__ = [com.wiris.util.graphics.BoxStyleInterface];
com.wiris.util.graphics.BoxStyle.newFontSizeP = function(p) {
	var s = new com.wiris.util.graphics.BoxStyle();
	s.setP(p);
	return s;
}
com.wiris.util.graphics.BoxStyle.newBoxStyle = function(b0) {
	var b = new com.wiris.util.graphics.BoxStyle();
	b.copyStyles(b0);
	return b;
}
com.wiris.util.graphics.BoxStyle.join = function(a1,a2) {
	var a = com.wiris.util.graphics.BoxStyle.newBoxStyle(a1);
	a.joinMe(a2);
	return a;
}
com.wiris.util.graphics.BoxStyle.remove = function(a1,a2) {
	var a = com.wiris.util.graphics.BoxStyle.newBoxStyle(a1);
	a.restrict(a2,true);
	return a;
}
com.wiris.util.graphics.BoxStyle.removeEqual = function(a1,a2) {
	var a = com.wiris.util.graphics.BoxStyle.newBoxStyle(a1);
	if(a2.isFlagMask(com.wiris.util.graphics.BoxStyle.COLOR_FLAG) && a1.getColor() == a2.getColor()) a.flagsMask &= ~com.wiris.util.graphics.BoxStyle.COLOR_FLAG;
	if(a2.isFlagMask(com.wiris.util.graphics.BoxStyle.BACKGROUNDCOLOR_FLAG) && a1.getBackgroundColor() == a2.getBackgroundColor()) a.flagsMask &= ~com.wiris.util.graphics.BoxStyle.BACKGROUNDCOLOR_FLAG;
	if(a2.isFlagMask(com.wiris.util.graphics.BoxStyle.SCRIPT_LEVEL_FLAG) && a1.getScriptLevel() == a2.getScriptLevel()) a.flagsMask &= ~com.wiris.util.graphics.BoxStyle.SCRIPT_LEVEL_FLAG;
	if(a2.isFlagMask(com.wiris.util.graphics.BoxStyle.PROPORTIONAL_SIZE_FLAG) && a1.getP() == a2.getP()) a.flagsMask &= ~com.wiris.util.graphics.BoxStyle.PROPORTIONAL_SIZE_FLAG;
	if(a2.isFlagMask(com.wiris.util.graphics.BoxStyle.ZOOM_FLAG) && a1.getZoom() == a2.getZoom()) a.flagsMask &= ~com.wiris.util.graphics.BoxStyle.ZOOM_FLAG;
	if(a2.isFlagMask(com.wiris.util.graphics.BoxStyle.WIDTH_FLAG) && com.wiris.util.graphics.BoxStyle.equalStrings(a1.getWidth(),a2.getWidth())) a.flagsMask &= ~com.wiris.util.graphics.BoxStyle.WIDTH_FLAG;
	if(a2.isFlagMask(com.wiris.util.graphics.BoxStyle.LINE_WIDTH_FLAG) && a1.getLineWidth() == a2.getLineWidth()) a.flagsMask &= ~com.wiris.util.graphics.BoxStyle.LINE_WIDTH_FLAG;
	if(a2.isFlagMask(com.wiris.util.graphics.BoxStyle.LINE_STYLE_FLAG) && a1.getLineStyle() == a2.getLineStyle()) a.flagsMask &= ~com.wiris.util.graphics.BoxStyle.LINE_STYLE_FLAG;
	if(a2.isFlagMask(com.wiris.util.graphics.BoxStyle.PIXELS_SIZE_FLAG) && a1.getFontSize() == a2.getFontSize()) a.flagsMask &= ~com.wiris.util.graphics.BoxStyle.PIXELS_SIZE_FLAG;
	if(a2.isFlagMask(com.wiris.util.graphics.BoxStyle.MAX_WIDTH_FLAG) && com.wiris.util.graphics.BoxStyle.equalStrings(a1.getMaxWidth(),a2.getMaxWidth())) a.flagsMask &= ~com.wiris.util.graphics.BoxStyle.MAX_WIDTH_FLAG;
	if(a2.isFlagMask(com.wiris.util.graphics.BoxStyle.ALIGN_FLAG) && a1.getAlign() == a2.getAlign()) a.flagsMask &= ~com.wiris.util.graphics.BoxStyle.ALIGN_FLAG;
	if(a2.isFlagMask(com.wiris.util.graphics.BoxStyle.FONT_FAMILY_FLAG) && com.wiris.util.graphics.BoxStyle.equalStrings(a1.getFontFamily(),a2.getFontFamily())) a.flagsMask &= ~com.wiris.util.graphics.BoxStyle.FONT_FAMILY_FLAG;
	if(a2.isFlagMask(com.wiris.util.graphics.BoxStyle.MATHVARIANT_FONT_FLAG) && com.wiris.util.graphics.BoxStyle.equalStrings(a1.getMathVariantFont(),a2.getMathVariantFont())) a.flagsMask &= ~com.wiris.util.graphics.BoxStyle.MATHVARIANT_FONT_FLAG;
	if(a2.isFlagMask(com.wiris.util.graphics.BoxStyle.CLASSTYPE_FLAG) && com.wiris.util.graphics.BoxStyle.equalStrings(a1.getClassType(),a2.getClassType())) a.flagsMask &= ~com.wiris.util.graphics.BoxStyle.CLASSTYPE_FLAG;
	a.flagsMask &= ~(a2.getFlagsMask() & ~(a1.getFlags() ^ a2.getFlags()) & (com.wiris.util.graphics.BoxStyle.ITALIC_FLAG | com.wiris.util.graphics.BoxStyle.BOLD_FLAG | com.wiris.util.graphics.BoxStyle.MTEXT_FLAG | com.wiris.util.graphics.BoxStyle.INVISIBLE_FLAG | com.wiris.util.graphics.BoxStyle.RTL_FLAG | com.wiris.util.graphics.BoxStyle.FORCED_LIGATURE_FLAG | com.wiris.util.graphics.BoxStyle.POSITIONABLE_FLAG));
	a.normalizeMask();
	return a;
}
com.wiris.util.graphics.BoxStyle.copyFlags = function(flagsDest,flagsSrc,flagsMask) {
	flagsDest &= ~flagsMask;
	flagsDest |= flagsSrc;
	return flagsDest;
}
com.wiris.util.graphics.BoxStyle.getParams = function(style) {
	var h = new Hash();
	if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.FONT_FAMILY_FLAG)) h.set("fontFamily",style.getFontFamily());
	if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.WIDTH_FLAG)) h.set("width",style.getWidth());
	if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.MAX_WIDTH_FLAG)) h.set("maxWidth",style.getMaxWidth());
	return h;
}
com.wiris.util.graphics.BoxStyle.equalStrings = function(s1,s2) {
	return s1 == s2 || s1 != null && s1 == s2;
}
com.wiris.util.graphics.BoxStyle.alignToString = function(align) {
	if(align == com.wiris.util.graphics.BoxStyle.RIGHT_ALIGN) return "right";
	if(align == com.wiris.util.graphics.BoxStyle.LEFT_ALIGN) return "left";
	if(align == com.wiris.util.graphics.BoxStyle.CENTER_ALIGN) return "center";
	if(align == com.wiris.util.graphics.BoxStyle.DECIMAL_ALIGN) return "wrs_decimal";
	if(align == com.wiris.util.graphics.BoxStyle.RELATION_ALIGN) return "wrs_relation";
	return "auto";
}
com.wiris.util.graphics.BoxStyle.stringToAlign = function(s) {
	if(s == "right") return com.wiris.util.graphics.BoxStyle.RIGHT_ALIGN;
	if(s == "left") return com.wiris.util.graphics.BoxStyle.LEFT_ALIGN;
	if(s == "center") return com.wiris.util.graphics.BoxStyle.CENTER_ALIGN;
	if(s == "wrs_decimal") return com.wiris.util.graphics.BoxStyle.DECIMAL_ALIGN;
	if(s == "wrs_relation") return com.wiris.util.graphics.BoxStyle.RELATION_ALIGN;
	return com.wiris.util.graphics.BoxStyle.AUTO_ALIGN;
}
com.wiris.util.graphics.BoxStyle.styleFlagsToString = function(flags) {
	if(flags == 0) return "0";
	var setFlags = new Array();
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.MTEXT_FLAG,"MTEXT_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.MATHVARIANT_FONT_FLAG,"MATHVARIANT_FONT_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.FONT_FAMILY_FLAG,"FONT_FAMILY_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.ITALIC_FLAG,"ITALIC_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.BOLD_FLAG,"BOLD_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.PIXELS_SIZE_FLAG,"PIXELS_SIZE_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.DISPLAY_STYLE_FLAG,"DISPLAY_STYLE_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.PROPORTIONAL_SIZE_FLAG,"PROPORTIONAL_SIZE_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.COLOR_FLAG,"COLOR_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.LINE_WIDTH_FLAG,"LINE_WIDTH_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.LINE_STYLE_FLAG,"LINE_STYLE_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.ZOOM_FLAG,"ZOOM_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.WIDTH_FLAG,"WIDTH_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.INVISIBLE_FLAG,"INVISIBLE_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.RTL_FLAG,"RTL_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.MAX_WIDTH_FLAG,"MAX_WIDTH_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.ALIGN_FLAG,"ALIGN_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.CLASSTYPE_FLAG,"CLASSTYPE_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.FORCED_LIGATURE_FLAG,"FORCED_LIGATURE_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.IGNORE_PROPORTIONAL_SIZE_FLAG,"IGNORE_PROPORTIONAL_SIZE_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.POSITIONABLE_FLAG,"POSITIONABLE_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.SCRIPT_LEVEL_FLAG,"SCRIPT_LEVEL_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,com.wiris.util.graphics.BoxStyle.BACKGROUNDCOLOR_FLAG,"BACKGROUNDCOLOR_FLAG",setFlags);
	flags = com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub(flags,flags,StringTools.hex(flags,0),setFlags);
	return setFlags.join(" | ");
}
com.wiris.util.graphics.BoxStyle.styleFlagsToStringSub = function(flags,flagMask,flagName,setFlags) {
	if((flags & flagMask) != 0) {
		setFlags.push(flagName);
		flags &= ~flagMask;
	}
	return flags;
}
com.wiris.util.graphics.BoxStyle.prototype = {
	hasClassType: function(c) {
		var currentClass = this.getClassType();
		if(currentClass == null) return false;
		var i = HxOverrides.iter(currentClass.split(" "));
		while(i.hasNext()) if(i.next() == c) return true;
		return false;
	}
	,removeClassType: function(className) {
		var currentClass = this.getClassType();
		if(currentClass == null) return;
		className = StringTools.trim(className);
		var classes = currentClass.split(" ");
		if(HxOverrides.remove(classes,className)) this.setClassType(classes.join(" "));
	}
	,addClassType: function(className) {
		var currentClass = this.getClassType();
		className = StringTools.trim(className);
		if(currentClass != null && currentClass.length > 0) this.setClassType(currentClass + " " + className); else this.setClassType(className);
	}
	,setParams: function(parameters) {
		var i = parameters.keys();
		while(i.hasNext()) {
			var key = i.next();
			var value = parameters.get(key);
			this.setParam(key,value);
		}
	}
	,setParam: function(key,value) {
		key = key.toLowerCase();
		if("color" == key) this.setColor(com.wiris.util.css.CSSUtils.colorToInt(value)); else if("fontfamily" == key) this.setFontFamily(value); else if("fontsize" == key) {
			if(value.indexOf("%") >= 0) {
				this.setP(com.wiris.util.css.CSSUtils.percentageToFloat(value));
				this.removeFromFlag(com.wiris.util.graphics.BoxStyle.PIXELS_SIZE_FLAG);
			} else {
				var pixels = com.wiris.util.css.CSSUtils.pixelsToInt(value);
				if(pixels > 0) this.setFontSize(pixels);
			}
		} else if("zoom" == key) this.setZoom(Std.parseFloat(value)); else if("width" == key) this.setWidth(value); else if("maxwidth" == key) this.setMaxWidth(value); else if("fontstyle" == key) {
			if(value == "italic") {
				this.setFlag(com.wiris.util.graphics.BoxStyle.ITALIC_FLAG,true);
				this.setFlag(com.wiris.util.graphics.BoxStyle.REMOVE_ITALIC_FLAG,false);
			} else if(value == "initial") {
				this.setFlag(com.wiris.util.graphics.BoxStyle.ITALIC_FLAG,false);
				this.setFlag(com.wiris.util.graphics.BoxStyle.REMOVE_ITALIC_FLAG,false);
				this.removeFromFlag(com.wiris.util.graphics.BoxStyle.REMOVE_ITALIC_FLAG);
			} else {
				this.setFlag(com.wiris.util.graphics.BoxStyle.ITALIC_FLAG,false);
				this.setFlag(com.wiris.util.graphics.BoxStyle.REMOVE_ITALIC_FLAG,true);
			}
		} else if("fontweight" == key) this.setFlag(com.wiris.util.graphics.BoxStyle.BOLD_FLAG,value == "bold"); else if("classtype" == key) this.setClassType(value); else if("textalign" == key) this.setAlign(com.wiris.util.graphics.BoxStyle.stringToAlign(value));
	}
	,getFlagsMask: function() {
		return this.flagsMask;
	}
	,getFlags: function() {
		return this.flags;
	}
	,getAlign: function() {
		return this.align;
	}
	,getMaxWidth: function() {
		return this.maxWidth;
	}
	,setAlign: function(align) {
		this.align = align;
		this.flagsMask |= com.wiris.util.graphics.BoxStyle.ALIGN_FLAG;
	}
	,setMaxWidth: function(maxWidth) {
		this.maxWidth = maxWidth;
		this.flagsMask |= com.wiris.util.graphics.BoxStyle.MAX_WIDTH_FLAG;
	}
	,setWidth: function(width) {
		this.width = width;
		this.flagsMask |= com.wiris.util.graphics.BoxStyle.WIDTH_FLAG;
	}
	,getWidth: function() {
		return this.width;
	}
	,setFontSize: function(size) {
		this.fontSize = size;
		this.flagsMask |= com.wiris.util.graphics.BoxStyle.PIXELS_SIZE_FLAG;
		this.setFlag(com.wiris.util.graphics.BoxStyle.IGNORE_PROPORTIONAL_SIZE_FLAG,true);
	}
	,getFontSize: function() {
		return this.fontSize;
	}
	,setMathVariantFont: function(mathvariantFont) {
		this.mathvariantFont = mathvariantFont;
		this.flagsMask |= com.wiris.util.graphics.BoxStyle.MATHVARIANT_FONT_FLAG;
	}
	,getMathVariantFont: function() {
		return this.mathvariantFont;
	}
	,setFontFamily: function(fontFamily) {
		this.fontFamily = fontFamily;
		this.flagsMask |= com.wiris.util.graphics.BoxStyle.FONT_FAMILY_FLAG;
	}
	,getFontFamily: function() {
		return this.fontFamily;
	}
	,isFlag: function(flag) {
		return (this.flags & flag & this.flagsMask) != 0;
	}
	,setFlag: function(flag,state) {
		if(state) this.flags |= flag; else this.flags &= ~flag;
		this.flagsMask |= flag;
		if(this.isFlagMask(com.wiris.util.graphics.BoxStyle.MATHVARIANT_FONT_FLAG) && "monospace" == this.getMathVariantFont()) {
			this.flags &= ~(com.wiris.util.graphics.BoxStyle.BOLD_FLAG | com.wiris.util.graphics.BoxStyle.ITALIC_FLAG);
			this.flagsMask |= com.wiris.util.graphics.BoxStyle.BOLD_FLAG | com.wiris.util.graphics.BoxStyle.ITALIC_FLAG;
		}
	}
	,setClassType: function(classType) {
		this.classType = classType;
		this.flagsMask |= com.wiris.util.graphics.BoxStyle.CLASSTYPE_FLAG;
	}
	,getClassType: function() {
		return this.classType;
	}
	,setBackgroundColorWithAlpha: function(backgroundColor) {
		this.backgroundColor = backgroundColor;
		this.flagsMask |= com.wiris.util.graphics.BoxStyle.BACKGROUNDCOLOR_FLAG;
	}
	,setBackgroundColor: function(backgroundColor) {
		this.backgroundColor = backgroundColor | -16777216;
		this.flagsMask |= com.wiris.util.graphics.BoxStyle.BACKGROUNDCOLOR_FLAG;
	}
	,getBackgroundColorWithAlpha: function() {
		return this.backgroundColor;
	}
	,getBackgroundColor: function() {
		return this.backgroundColor & 16777215;
	}
	,setColorAddAlpha: function(color,alpha) {
		var c = com.wiris.util.graphics.Color.fromInt(color);
		c.setAlpha(alpha);
		this.setColorWithAlpha(c.toIntARGB());
	}
	,setColorWithAlpha: function(color) {
		this.color = color;
		this.flagsMask |= com.wiris.util.graphics.BoxStyle.COLOR_FLAG;
	}
	,setColor: function(color) {
		this.color = color | -16777216;
		this.flagsMask |= com.wiris.util.graphics.BoxStyle.COLOR_FLAG;
	}
	,getColorWithAlpha: function() {
		return this.color;
	}
	,getColor: function() {
		return this.color & 16777215;
	}
	,setScriptLevel: function(scriptLevel) {
		this.scriptLevel = scriptLevel;
		this.flagsMask |= com.wiris.util.graphics.BoxStyle.SCRIPT_LEVEL_FLAG;
	}
	,getScriptLevel: function() {
		return this.scriptLevel;
	}
	,setLineStyle: function(ls) {
		this.lineStyle = ls;
		this.flagsMask |= com.wiris.util.graphics.BoxStyle.LINE_STYLE_FLAG;
	}
	,getLineStyle: function() {
		return this.lineStyle;
	}
	,setLineWidth: function(ls) {
		this.lineWidth = ls;
		this.flagsMask |= com.wiris.util.graphics.BoxStyle.LINE_WIDTH_FLAG;
	}
	,getLineWidth: function() {
		return this.lineWidth;
	}
	,setZoom: function(zoom) {
		this.zoom = zoom;
		this.flagsMask |= com.wiris.util.graphics.BoxStyle.ZOOM_FLAG;
	}
	,getZoom: function() {
		return this.zoom;
	}
	,setP: function(p) {
		this.p = p;
		this.flagsMask |= com.wiris.util.graphics.BoxStyle.PROPORTIONAL_SIZE_FLAG;
	}
	,getP: function() {
		return this.p;
	}
	,isFlagMask: function(flag) {
		return (this.flagsMask & flag) != 0;
	}
	,removeFromFlag: function(flag) {
		this.flagsMask &= ~flag;
		this.normalizeMask();
	}
	,normalizeMask: function() {
		this.flags = this.flags & this.flagsMask;
		if(!this.isFlagMask(com.wiris.util.graphics.BoxStyle.COLOR_FLAG)) this.color = -16777216;
		if(!this.isFlagMask(com.wiris.util.graphics.BoxStyle.BACKGROUNDCOLOR_FLAG)) this.backgroundColor = -1;
		if(!this.isFlagMask(com.wiris.util.graphics.BoxStyle.SCRIPT_LEVEL_FLAG)) this.scriptLevel = 0;
		if(!this.isFlagMask(com.wiris.util.graphics.BoxStyle.PROPORTIONAL_SIZE_FLAG)) this.p = 0;
		if(!this.isFlagMask(com.wiris.util.graphics.BoxStyle.ZOOM_FLAG)) this.zoom = 0;
		if(!this.isFlagMask(com.wiris.util.graphics.BoxStyle.WIDTH_FLAG)) this.width = null;
		if(!this.isFlagMask(com.wiris.util.graphics.BoxStyle.LINE_WIDTH_FLAG)) this.lineWidth = 0;
		if(!this.isFlagMask(com.wiris.util.graphics.BoxStyle.LINE_STYLE_FLAG)) this.lineStyle = 0;
		if(!this.isFlagMask(com.wiris.util.graphics.BoxStyle.PIXELS_SIZE_FLAG)) this.fontSize = 0;
		if(!this.isFlagMask(com.wiris.util.graphics.BoxStyle.MAX_WIDTH_FLAG)) this.maxWidth = null;
		if(!this.isFlagMask(com.wiris.util.graphics.BoxStyle.ALIGN_FLAG)) this.align = com.wiris.util.graphics.BoxStyle.AUTO_ALIGN;
		if(!this.isFlagMask(com.wiris.util.graphics.BoxStyle.FONT_FAMILY_FLAG)) this.fontFamily = "inherit";
		if(!this.isFlagMask(com.wiris.util.graphics.BoxStyle.MATHVARIANT_FONT_FLAG)) this.mathvariantFont = "";
		if(!this.isFlagMask(com.wiris.util.graphics.BoxStyle.CLASSTYPE_FLAG)) this.classType = "";
	}
	,restrictMask: function(mask) {
		this.flagsMask &= mask;
		this.normalizeMask();
	}
	,restrict: function(a2,inverse) {
		if(inverse) this.flagsMask &= ~a2.getFlagsMask(); else this.flagsMask &= a2.getFlagsMask();
		this.normalizeMask();
	}
	,joinMe: function(style) {
		if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.MATHVARIANT_FONT_FLAG)) this.mathvariantFont = style.getMathVariantFont();
		if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.COLOR_FLAG)) this.color = style.getColorWithAlpha();
		if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.BACKGROUNDCOLOR_FLAG)) this.backgroundColor = style.getBackgroundColorWithAlpha();
		if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.SCRIPT_LEVEL_FLAG)) this.scriptLevel = style.getScriptLevel();
		if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.PROPORTIONAL_SIZE_FLAG)) this.p = style.getP();
		if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.ZOOM_FLAG)) this.zoom = style.getZoom();
		if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.WIDTH_FLAG)) this.width = style.getWidth();
		if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.LINE_WIDTH_FLAG)) this.lineWidth = style.getLineWidth();
		if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.LINE_STYLE_FLAG)) this.lineStyle = style.getLineStyle();
		if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.PIXELS_SIZE_FLAG)) this.fontSize = style.getFontSize();
		if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.FONT_FAMILY_FLAG)) this.fontFamily = style.getFontFamily();
		if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.MAX_WIDTH_FLAG)) this.maxWidth = style.getMaxWidth();
		if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.ALIGN_FLAG)) this.align = style.getAlign();
		if(style.isFlagMask(com.wiris.util.graphics.BoxStyle.CLASSTYPE_FLAG)) this.classType = style.getClassType();
		this.flagsMask |= style.getFlagsMask();
		this.flags = com.wiris.util.graphics.BoxStyle.copyFlags(this.flags,style.getFlags(),style.getFlagsMask());
		var n = (style.getFlagsMask() & style.getFlags()) >> com.wiris.util.graphics.BoxStyle.BIT_REMOVE_FLAG;
		if(n != 0) {
			this.flagsMask &= ~n;
			this.flags &= ~n;
			this.flagsMask &= com.wiris.util.graphics.BoxStyle.FIRST_REMOVE_FLAG - 1;
		}
	}
	,cloneStyle: function() {
		return com.wiris.util.graphics.BoxStyle.newBoxStyle(this);
	}
	,equalStyleIgnoringFlags: function(style,ignoredFlags,ignoreFlagMasks) {
		if(!ignoreFlagMasks && style.flagsMask != this.flagsMask) return false;
		var flagXor = style.flags ^ this.flags;
		return style.p == this.p && style.scriptLevel == this.scriptLevel && com.wiris.util.graphics.BoxStyle.equalStrings(style.fontFamily,this.fontFamily) && com.wiris.util.graphics.BoxStyle.equalStrings(style.mathvariantFont,this.mathvariantFont) && style.fontSize == this.fontSize && style.color == this.color && style.backgroundColor == this.backgroundColor && (flagXor | ignoredFlags) == ignoredFlags && style.lineWidth == this.lineWidth && style.lineStyle == this.lineStyle && style.zoom == this.zoom && com.wiris.util.graphics.BoxStyle.equalStrings(style.width,this.width) && com.wiris.util.graphics.BoxStyle.equalStrings(style.maxWidth,this.maxWidth) && style.align == this.align && com.wiris.util.graphics.BoxStyle.equalStrings(style.classType,this.classType);
	}
	,equivalentStyle: function(style) {
		return this.equalStyleIgnoringFlags(style,0,true);
	}
	,equalStyle: function(style) {
		return this.equalStyleIgnoringFlags(style,0,false);
	}
	,copyStyles: function(b0) {
		this.p = b0.getP();
		this.scriptLevel = b0.getScriptLevel();
		this.fontFamily = b0.getFontFamily();
		this.fontSize = b0.getFontSize();
		this.color = b0.getColorWithAlpha();
		this.backgroundColor = b0.getBackgroundColorWithAlpha();
		this.flags = b0.getFlags();
		this.flagsMask = b0.getFlagsMask();
		this.lineWidth = b0.getLineWidth();
		this.lineStyle = b0.getLineStyle();
		this.zoom = b0.getZoom();
		this.width = b0.getWidth();
		this.maxWidth = b0.getMaxWidth();
		this.align = b0.getAlign();
		this.classType = b0.getClassType();
		this.mathvariantFont = b0.getMathVariantFont();
	}
	,classType: null
	,align: null
	,maxWidth: null
	,width: null
	,zoom: null
	,flagsMask: null
	,flags: null
	,mathvariantFont: null
	,fontFamily: null
	,fontSize: null
	,lineStyle: null
	,lineWidth: null
	,backgroundColor: null
	,color: null
	,scriptLevel: null
	,p: null
	,__class__: com.wiris.util.graphics.BoxStyle
}
com.wiris.util.graphics.Color = $hxClasses["com.wiris.util.graphics.Color"] = function() {
	com.wiris.util.graphics.Color.init();
	this.rgb = [0,0,0];
	this.alpha = 255;
};
com.wiris.util.graphics.Color.__name__ = ["com","wiris","util","graphics","Color"];
com.wiris.util.graphics.Color.literals = null;
com.wiris.util.graphics.Color.init = function() {
	if(com.wiris.util.graphics.Color.literals == null) {
		com.wiris.util.graphics.Color.literals = new Hash();
		com.wiris.util.graphics.Color.literals.set("white",[255,255,255]);
		com.wiris.util.graphics.Color.literals.set("black",[0,0,0]);
		com.wiris.util.graphics.Color.literals.set("red",[255,0,0]);
		com.wiris.util.graphics.Color.literals.set("green",[0,255,0]);
		com.wiris.util.graphics.Color.literals.set("blue",[0,0,255]);
		com.wiris.util.graphics.Color.literals.set("cyan",[0,255,255]);
		com.wiris.util.graphics.Color.literals.set("magenta",[255,0,255]);
		com.wiris.util.graphics.Color.literals.set("yellow",[255,255,0]);
		com.wiris.util.graphics.Color.literals.set("brown",[180,60,0]);
		com.wiris.util.graphics.Color.literals.set("orange",[255,200,0]);
		com.wiris.util.graphics.Color.literals.set("pink",[255,192,203]);
		com.wiris.util.graphics.Color.literals.set("grey",[128,128,128]);
		com.wiris.util.graphics.Color.literals.set("light_grey",[192,192,192]);
		com.wiris.util.graphics.Color.literals.set("dark_grey",[64,64,64]);
	}
}
com.wiris.util.graphics.Color.fromText = function(text) {
	var color = new com.wiris.util.graphics.Color();
	color.setText(text);
	return color;
}
com.wiris.util.graphics.Color.fromRGB = function(rgb) {
	var color = new com.wiris.util.graphics.Color();
	color.setRGB(rgb);
	return color;
}
com.wiris.util.graphics.Color.fromARGB = function(argb) {
	var color = new com.wiris.util.graphics.Color();
	color.setARGB(argb);
	return color;
}
com.wiris.util.graphics.Color.fromInt = function(rgb) {
	var color = new com.wiris.util.graphics.Color();
	color.setInt(rgb);
	return color;
}
com.wiris.util.graphics.Color.fromIntARGB = function(argb) {
	var color = new com.wiris.util.graphics.Color();
	color.setIntARGB(argb);
	return color;
}
com.wiris.util.graphics.Color.isValidTextColor = function(text) {
	if(com.wiris.util.graphics.Color.literals == null) com.wiris.util.graphics.Color.literals = new Hash();
	if(com.wiris.util.graphics.Color.literals.exists(text)) return true;
	if(HxOverrides.cca(text,0) == 35 && (text.length == 7 || text.length == 9)) return true;
	if(HxOverrides.cca(text,0) == 123) return true;
	return false;
}
com.wiris.util.graphics.Color.prototype = {
	getBlackOrWhiteOpposite: function() {
		if(this.getBrightness() < 128) return com.wiris.util.graphics.Color.fromInt(16777215);
		return com.wiris.util.graphics.Color.fromInt(0);
	}
	,getBrightness: function() {
		return 0.299 * this.rgb[0] + 0.587 * this.rgb[1] + 0.114 * this.rgb[2];
	}
	,isEqualTo: function(b) {
		if(b == null) return false;
		return this.rgb[0] == b.rgb[0] && this.rgb[1] == b.rgb[1] && this.rgb[2] == b.rgb[2] && this.alpha == b.alpha;
	}
	,setIntARGB: function(argb) {
		this.alpha = argb >> 24 & 255;
		this.setInt(argb);
	}
	,setInt: function(rgb) {
		this.rgb[0] = rgb >> 16 & 255;
		this.rgb[1] = rgb >> 8 & 255;
		this.rgb[2] = rgb & 255;
	}
	,setText: function(text) {
		if(com.wiris.util.graphics.Color.literals.exists(text)) this.rgb = com.wiris.util.graphics.Color.literals.get(text); else if(HxOverrides.cca(text,0) == 35 && (text.length == 7 || text.length == 9)) {
			this.rgb = new Array();
			this.rgb[0] = Std.parseInt("0x" + HxOverrides.substr(text,1,2));
			this.rgb[1] = Std.parseInt("0x" + HxOverrides.substr(text,3,2));
			this.rgb[2] = Std.parseInt("0x" + HxOverrides.substr(text,5,2));
			if(text.length == 9) this.alpha = Std.parseInt("0x" + HxOverrides.substr(text,7,2)); else this.alpha = 255;
		} else if(HxOverrides.cca(text,0) == 123) {
			var i;
			var d = 0;
			this.rgb = new Array();
			var sb = new StringBuf();
			i = 1;
			while(i < text.length && d < 4) {
				var c = HxOverrides.substr(text,i,1);
				if(com.wiris.system.TypeTools.isInteger(c)) sb.b += Std.string(c); else if(sb.b.length > 0) {
					if(d < 3) this.rgb[d++] = Std.parseInt(sb.b); else this.setAlpha(255 * Std.parseFloat(sb.b));
					sb = new StringBuf();
				}
				++i;
			}
		} else throw "Unrecognized color string: " + text;
	}
	,getAlpha: function() {
		return this.alpha / 255.0;
	}
	,setAlpha: function(d) {
		var a = 255 * d & 255;
		if(a >= 0 || a <= 255) this.alpha = a; else throw "Invalid alpha value: " + d;
	}
	,setARGB: function(argb) {
		this.rgb = [argb[0],argb[1],argb[2]];
		this.alpha = argb[3];
	}
	,setRGB: function(rgb) {
		this.rgb = rgb;
		this.alpha = 255;
	}
	,toText: function() {
		var value = this.toColorName();
		if(value != null) return value;
		return this.toCSSHex();
	}
	,toIntARGB: function() {
		return (this.alpha & 255) << 24 | this.toInt() & 16777215;
	}
	,toInt: function() {
		return (this.rgb[0] & 255) << 16 | (this.rgb[1] & 255) << 8 | this.rgb[2] & 255;
	}
	,toColorName: function() {
		if(this.alpha != 255) return null;
		var it = com.wiris.util.graphics.Color.literals.keys();
		while(it.hasNext()) {
			var name = it.next();
			var color = com.wiris.util.graphics.Color.literals.get(name);
			if(this.rgb[0] == color[0] && this.rgb[1] == color[1] && this.rgb[2] == color[2]) return name;
		}
		return null;
	}
	,toKernelRGB: function() {
		var colorName = this.toColorName();
		if(colorName != null) return colorName;
		return "{" + this.rgb[0] + "," + this.rgb[1] + "," + this.rgb[2] + "}";
	}
	,toCSSHex: function() {
		if(this.alpha == 255) return "#" + StringTools.hex(this.rgb[0],2) + StringTools.hex(this.rgb[1],2) + StringTools.hex(this.rgb[2],2); else return "#" + StringTools.hex(this.rgb[0],2) + StringTools.hex(this.rgb[1],2) + StringTools.hex(this.rgb[2],2) + StringTools.hex(this.alpha,2);
	}
	,getARGB: function() {
		return [this.rgb[0],this.rgb[1],this.rgb[2],this.alpha];
	}
	,getRGB: function() {
		return [this.rgb[0],this.rgb[1],this.rgb[2]];
	}
	,alpha: null
	,rgb: null
	,__class__: com.wiris.util.graphics.Color
}
com.wiris.util.graphics.DisplayDrawingListener = $hxClasses["com.wiris.util.graphics.DisplayDrawingListener"] = function() { }
com.wiris.util.graphics.DisplayDrawingListener.__name__ = ["com","wiris","util","graphics","DisplayDrawingListener"];
com.wiris.util.graphics.DisplayDrawingListener.prototype = {
	handwritingChanged: null
	,__class__: com.wiris.util.graphics.DisplayDrawingListener
}
com.wiris.util.graphics.DisplaySettings = $hxClasses["com.wiris.util.graphics.DisplaySettings"] = function(data) {
	this.data = data;
};
com.wiris.util.graphics.DisplaySettings.__name__ = ["com","wiris","util","graphics","DisplaySettings"];
com.wiris.util.graphics.DisplaySettings.defaultSettings = function() {
	var displaySettings = new com.wiris.util.graphics.DisplaySettings(new Hash());
	displaySettings.setSetting(com.wiris.util.graphics.DisplaySettings.DISPLAY_ELEMENT_NAMES,com.wiris.util.graphics.DisplaySettings.DEFAULT_DISPLAY_ELEMENT_NAMES);
	displaySettings.setSetting(com.wiris.util.graphics.DisplaySettings.DISPLAY_ELEMENT_VALUES,com.wiris.util.graphics.DisplaySettings.DEFAULT_DISPLAY_ELEMENT_VALUES);
	displaySettings.setSetting(com.wiris.util.graphics.DisplaySettings.MAGNETIC_GRID,com.wiris.util.graphics.DisplaySettings.DEFAULT_MAGNETIC_GRID);
	displaySettings.setSetting(com.wiris.util.graphics.DisplaySettings.ASPECT_RATIO_LOCKED,com.wiris.util.graphics.DisplaySettings.DEFAULT_ASPECT_RATIO_LOCKED);
	return displaySettings;
}
com.wiris.util.graphics.DisplaySettings.prototype = {
	setSetting: function(key,value) {
		this.data.set(key,value);
	}
	,getSetting: function(key) {
		return this.data.get(key);
	}
	,data: null
	,__class__: com.wiris.util.graphics.DisplaySettings
}
com.wiris.util.graphics.DisplaySettingsProvider = $hxClasses["com.wiris.util.graphics.DisplaySettingsProvider"] = function() { }
com.wiris.util.graphics.DisplaySettingsProvider.__name__ = ["com","wiris","util","graphics","DisplaySettingsProvider"];
com.wiris.util.graphics.DisplaySettingsProvider.prototype = {
	getDisplaySetting: null
	,__class__: com.wiris.util.graphics.DisplaySettingsProvider
}
if(!com.wiris.util.json) com.wiris.util.json = {}
com.wiris.util.json.JSon = $hxClasses["com.wiris.util.json.JSon"] = function() {
};
com.wiris.util.json.JSon.__name__ = ["com","wiris","util","json","JSon"];
com.wiris.util.json.JSon.encode = function(o) {
	var js = new com.wiris.util.json.JSon();
	return js.encodeObject(o);
}
com.wiris.util.json.JSon.decode = function(str) {
	try {
		return com.wiris.util.json.parser.JsonParse.parse(str);
	} catch( e ) {
		if( js.Boot.__instanceof(e,com.wiris.system.Exception) ) {
			throw e.getMessage();
		} else throw(e);
	}
}
com.wiris.util.json.JSon.getDepth = function(o) {
	if(com.wiris.system.TypeTools.isHash(o)) {
		var h = o;
		var m = 0;
		if(h.exists("_left_") || h.exists("_right_")) {
			if(h.exists("_left_")) m = com.wiris.common.WInteger.max(com.wiris.util.json.JSon.getDepth(h.get("_left_")),m);
			if(h.exists("_right_")) m = com.wiris.common.WInteger.max(com.wiris.util.json.JSon.getDepth(h.get("_right_")),m);
			return m;
		}
		var iter = h.keys();
		while(iter.hasNext()) {
			var key = iter.next();
			m = com.wiris.common.WInteger.max(com.wiris.util.json.JSon.getDepth(h.get(key)),m);
		}
		return m + 2;
	} else if(com.wiris.system.TypeTools.isArray(o)) {
		var a = o;
		var i;
		var m = 0;
		var _g1 = 0, _g = a.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			m = com.wiris.common.WInteger.max(com.wiris.util.json.JSon.getDepth(a[i1]),m);
		}
		return m + 1;
	} else return 1;
}
com.wiris.util.json.JSon.getString = function(o) {
	return o;
}
com.wiris.util.json.JSon.getFloat = function(n) {
	if(js.Boot.__instanceof(n,Float)) return n; else if(js.Boot.__instanceof(n,Int)) return n; else return 0.0;
}
com.wiris.util.json.JSon.getInt = function(n) {
	if(js.Boot.__instanceof(n,Float)) return Math.round(n); else if(js.Boot.__instanceof(n,Int)) return n; else return 0;
}
com.wiris.util.json.JSon.getBoolean = function(b) {
	return b;
}
com.wiris.util.json.JSon.getArray = function(a) {
	return a;
}
com.wiris.util.json.JSon.getHashArray = function(a) {
	return a;
}
com.wiris.util.json.JSon.getHash = function(a) {
	return a;
}
com.wiris.util.json.JSon.isJson = function(json) {
	try {
		com.wiris.util.json.JSon.decode(json);
		return true;
	} catch( e ) {
		if( js.Boot.__instanceof(e,com.wiris.system.Exception) ) {
			return false;
		} else throw(e);
	}
}
com.wiris.util.json.JSon.prototype = {
	newLine: function(depth,sb) {
		sb.b += Std.string("\r\n");
		var i;
		var _g = 0;
		while(_g < depth) {
			var i1 = _g++;
			sb.b += Std.string("  ");
		}
		this.lastDepth = depth;
	}
	,setAddNewLines: function(addNewLines) {
		this.addNewLines = addNewLines;
	}
	,encodeLong: function(sb,i) {
		sb.b += Std.string("" + Std.string(i));
	}
	,encodeFloat: function(sb,d) {
		sb.b += Std.string(com.wiris.system.TypeTools.floatToString(d));
	}
	,encodeBoolean: function(sb,b) {
		sb.b += Std.string(b?"true":"false");
	}
	,encodeInteger: function(sb,i) {
		sb.b += Std.string("" + i);
	}
	,encodeString: function(sb,s) {
		s = StringTools.replace(s,"\\","\\\\");
		s = StringTools.replace(s,"\"","\\\"");
		s = StringTools.replace(s,"\r","\\r");
		s = StringTools.replace(s,"\n","\\n");
		s = StringTools.replace(s,"\t","\\t");
		sb.b += Std.string("\"");
		sb.b += Std.string(s);
		sb.b += Std.string("\"");
	}
	,encodeArrayString: function(sb,v) {
		var astr = new Array();
		var _g = 0;
		while(_g < v.length) {
			var s = v[_g];
			++_g;
			astr.push(s);
		}
		this.encodeArray(sb,astr);
	}
	,encodeArrayBoolean: function(sb,v) {
		var v2 = new Array();
		var i = 0;
		while(i < v.length) {
			v2.push(v[i]);
			++i;
		}
		this.encodeArray(sb,v2);
	}
	,encodeArrayDouble: function(sb,v) {
		var v2 = new Array();
		var i = 0;
		while(i < v.length) {
			v2.push(v[i]);
			++i;
		}
		this.encodeArray(sb,v2);
	}
	,encodeArrayInt: function(sb,v) {
		var v2 = new Array();
		var i = 0;
		while(i < v.length) {
			v2.push(v[i]);
			++i;
		}
		this.encodeArray(sb,v2);
	}
	,encodeArray: function(sb,v) {
		var newLines = this.addNewLines && com.wiris.util.json.JSon.getDepth(v) > 2;
		this.depth++;
		var myDepth = this.lastDepth;
		sb.b += Std.string("[");
		if(newLines) this.newLine(this.depth,sb);
		var i;
		var _g1 = 0, _g = v.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			var o = v[i1];
			if(i1 > 0) {
				sb.b += Std.string(",");
				if(newLines) this.newLine(this.depth,sb);
			}
			this.encodeImpl(sb,o);
		}
		if(newLines) this.newLine(myDepth,sb);
		sb.b += Std.string("]");
		this.depth--;
	}
	,encodeHash: function(sb,h) {
		var newLines = this.addNewLines && com.wiris.util.json.JSon.getDepth(h) > 2;
		this.depth++;
		var myDepth = this.lastDepth;
		sb.b += Std.string("{");
		if(newLines) this.newLine(this.depth,sb);
		var e = h.keys();
		var first = true;
		while(e.hasNext()) {
			if(first) first = false; else {
				sb.b += Std.string(",");
				if(newLines) this.newLine(this.depth,sb);
			}
			var key = e.next();
			this.encodeString(sb,key);
			sb.b += Std.string(":");
			this.encodeImpl(sb,h.get(key));
		}
		if(newLines) this.newLine(myDepth,sb);
		sb.b += Std.string("}");
		this.depth--;
	}
	,encodeImpl: function(sb,o) {
		if(com.wiris.system.TypeTools.isHash(o)) this.encodeHash(sb,o); else if(com.wiris.system.TypeTools.isArray(o)) this.encodeArray(sb,o); else if(js.Boot.__instanceof(o,Array)) this.encodeArrayInt(sb,o); else if(js.Boot.__instanceof(o,Array)) this.encodeArrayDouble(sb,o); else if(js.Boot.__instanceof(o,Array)) this.encodeArrayBoolean(sb,o); else if(js.Boot.__instanceof(o,Array)) this.encodeArrayString(sb,o); else if(js.Boot.__instanceof(o,String)) this.encodeString(sb,o); else if(js.Boot.__instanceof(o,Int)) this.encodeInteger(sb,o); else if(js.Boot.__instanceof(o,haxe.Int64)) this.encodeLong(sb,o); else if(com.wiris.system.TypeTools.isBool(o)) this.encodeBoolean(sb,com.wiris.system.TypeTools.toBool(o)); else if(js.Boot.__instanceof(o,Float)) this.encodeFloat(sb,o); else throw "Impossible to convert to json object of type " + Std.string(Type.getClass(o));
	}
	,encodeObject: function(o) {
		var sb = new StringBuf();
		this.depth = 0;
		this.encodeImpl(sb,o);
		return sb.b;
	}
	,lastDepth: null
	,depth: null
	,addNewLines: null
	,__class__: com.wiris.util.json.JSon
}
if(!com.wiris.util.json.parser) com.wiris.util.json.parser = {}
com.wiris.util.json.parser.ExtractedString = $hxClasses["com.wiris.util.json.parser.ExtractedString"] = function(sourceEnd,str) {
	this.sourceEnd = sourceEnd;
	this.str = str;
};
com.wiris.util.json.parser.ExtractedString.__name__ = ["com","wiris","util","json","parser","ExtractedString"];
com.wiris.util.json.parser.ExtractedString.prototype = {
	str: null
	,sourceEnd: null
	,__class__: com.wiris.util.json.parser.ExtractedString
}
com.wiris.util.json.parser.JType = $hxClasses["com.wiris.util.json.parser.JType"] = { __ename__ : ["com","wiris","util","json","parser","JType"], __constructs__ : ["TYPE_ARRAY","TYPE_OBJECT","TYPE_HEURISTIC","TYPE_NAME","TYPE_STRING","TYPE_NUMBER","TYPE_CONSTANT"] }
com.wiris.util.json.parser.JType.TYPE_ARRAY = ["TYPE_ARRAY",0];
com.wiris.util.json.parser.JType.TYPE_ARRAY.toString = $estr;
com.wiris.util.json.parser.JType.TYPE_ARRAY.__enum__ = com.wiris.util.json.parser.JType;
com.wiris.util.json.parser.JType.TYPE_OBJECT = ["TYPE_OBJECT",1];
com.wiris.util.json.parser.JType.TYPE_OBJECT.toString = $estr;
com.wiris.util.json.parser.JType.TYPE_OBJECT.__enum__ = com.wiris.util.json.parser.JType;
com.wiris.util.json.parser.JType.TYPE_HEURISTIC = ["TYPE_HEURISTIC",2];
com.wiris.util.json.parser.JType.TYPE_HEURISTIC.toString = $estr;
com.wiris.util.json.parser.JType.TYPE_HEURISTIC.__enum__ = com.wiris.util.json.parser.JType;
com.wiris.util.json.parser.JType.TYPE_NAME = ["TYPE_NAME",3];
com.wiris.util.json.parser.JType.TYPE_NAME.toString = $estr;
com.wiris.util.json.parser.JType.TYPE_NAME.__enum__ = com.wiris.util.json.parser.JType;
com.wiris.util.json.parser.JType.TYPE_STRING = ["TYPE_STRING",4];
com.wiris.util.json.parser.JType.TYPE_STRING.toString = $estr;
com.wiris.util.json.parser.JType.TYPE_STRING.__enum__ = com.wiris.util.json.parser.JType;
com.wiris.util.json.parser.JType.TYPE_NUMBER = ["TYPE_NUMBER",5];
com.wiris.util.json.parser.JType.TYPE_NUMBER.toString = $estr;
com.wiris.util.json.parser.JType.TYPE_NUMBER.__enum__ = com.wiris.util.json.parser.JType;
com.wiris.util.json.parser.JType.TYPE_CONSTANT = ["TYPE_CONSTANT",6];
com.wiris.util.json.parser.JType.TYPE_CONSTANT.toString = $estr;
com.wiris.util.json.parser.JType.TYPE_CONSTANT.__enum__ = com.wiris.util.json.parser.JType;
com.wiris.util.json.parser.JsonParse = $hxClasses["com.wiris.util.json.parser.JsonParse"] = function() {
};
com.wiris.util.json.parser.JsonParse.__name__ = ["com","wiris","util","json","parser","JsonParse"];
com.wiris.util.json.parser.JsonParse.parse = function(jsonString) {
	var stateStack = new Array();
	var currentJType;
	var expectingComma = false;
	var expectingColon = false;
	var fieldStart = 0;
	var singleQuoteString = false;
	var end = jsonString.length - 1;
	var i = 0;
	var propertyName = null;
	var currentContainer = null;
	var value;
	var current;
	try {
		while(com.wiris.util.json.parser.JsonParse.isWhitespace(current = com.wiris.system.Utf8.charValueAt(jsonString,i))) i++;
	} catch( e ) {
		throw new com.wiris.system.Exception("Provided JSON string did not contain a value");
	}
	if(current == 123) {
		currentJType = com.wiris.util.json.parser.JType.TYPE_OBJECT;
		currentContainer = new Hash();
		i++;
	} else if(current == 91) {
		currentJType = com.wiris.util.json.parser.JType.TYPE_ARRAY;
		currentContainer = new Array();
		propertyName = null;
		i++;
	} else if(current == 34 || com.wiris.util.json.parser.JsonParse.ALLOW_SINGLE_QUOTES && current == 39) {
		currentJType = com.wiris.util.json.parser.JType.TYPE_STRING;
		singleQuoteString = current == 39;
		fieldStart = i;
	} else if(com.wiris.util.json.parser.JsonParse.isLetter(current)) {
		currentJType = com.wiris.util.json.parser.JType.TYPE_CONSTANT;
		fieldStart = i;
	} else if(com.wiris.util.json.parser.JsonParse.isNumberStart(current)) {
		currentJType = com.wiris.util.json.parser.JType.TYPE_NUMBER;
		fieldStart = i;
	} else throw new com.wiris.system.Exception(com.wiris.util.json.parser.JsonParse.buildErrorMessage(stateStack,"Unexpected character \"" + current + "\" instead of root value"));
	while(i <= end) {
		current = com.wiris.system.Utf8.charValueAt(jsonString,i);
		if(currentJType == com.wiris.util.json.parser.JType.TYPE_NAME) {
			try {
				var extracted = com.wiris.util.json.parser.JsonParse.extractString(jsonString,i,singleQuoteString);
				i = extracted.sourceEnd;
				propertyName = extracted.str;
				singleQuoteString = false;
			} catch( e ) {
				throw new com.wiris.system.Exception(com.wiris.util.json.parser.JsonParse.buildErrorMessage(stateStack,"String did not have ending quote"));
			}
			currentJType = com.wiris.util.json.parser.JType.TYPE_HEURISTIC;
			expectingColon = true;
			i++;
		} else if(currentJType == com.wiris.util.json.parser.JType.TYPE_STRING) {
			try {
				var extracted = com.wiris.util.json.parser.JsonParse.extractString(jsonString,i,singleQuoteString);
				i = extracted.sourceEnd;
				value = extracted.str;
				singleQuoteString = false;
			} catch( e ) {
				throw new com.wiris.system.Exception(com.wiris.util.json.parser.JsonParse.buildErrorMessage(stateStack,"String did not have ending quote"));
			}
			if(currentContainer == null) return value; else {
				expectingComma = true;
				if(com.wiris.system.TypeTools.isHash(currentContainer)) {
					currentContainer.set(propertyName,value);
					currentJType = com.wiris.util.json.parser.JType.TYPE_OBJECT;
				} else {
					currentContainer.push(value);
					currentJType = com.wiris.util.json.parser.JType.TYPE_ARRAY;
				}
			}
			i++;
		} else if(currentJType == com.wiris.util.json.parser.JType.TYPE_NUMBER) {
			var withDecimal = false;
			var withE = false;
			do {
				current = com.wiris.system.Utf8.charValueAt(jsonString,i);
				if(!withDecimal && current == 46) withDecimal = true; else if(!withE && (current == 101 || current == 69)) withE = true; else if(!com.wiris.util.json.parser.JsonParse.isNumberStart(current) && current != 43) break;
			} while(i++ < end);
			var valueString = com.wiris.system.Utf8.mbSubstring(jsonString,fieldStart,i - fieldStart);
			try {
				if(withDecimal || withE) value = Std.parseFloat(valueString); else value = Std.parseInt(valueString);
			} catch( e ) {
				throw new com.wiris.system.Exception(com.wiris.util.json.parser.JsonParse.buildErrorMessage(stateStack,"\"" + valueString + "\" expected to be a number, but wasn't"));
			}
			if(currentContainer == null) return value; else {
				expectingComma = true;
				if(com.wiris.system.TypeTools.isHash(currentContainer)) {
					currentContainer.set(propertyName,value);
					currentJType = com.wiris.util.json.parser.JType.TYPE_OBJECT;
				} else {
					currentContainer.push(value);
					currentJType = com.wiris.util.json.parser.JType.TYPE_ARRAY;
				}
			}
		} else if(currentJType == com.wiris.util.json.parser.JType.TYPE_CONSTANT) {
			while(com.wiris.util.json.parser.JsonParse.isLetter(current) && i++ < end) current = com.wiris.system.Utf8.charValueAt(jsonString,i);
			var valueString = com.wiris.system.Utf8.mbSubstring(jsonString,fieldStart,i - fieldStart);
			if("false" == valueString) value = false; else if("true" == valueString) value = true; else if("null" == valueString) value = null; else {
				if(com.wiris.system.TypeTools.isHash(currentContainer)) stateStack.push(new com.wiris.util.json.parser.State(propertyName,currentContainer,com.wiris.util.json.parser.JType.TYPE_OBJECT)); else if(com.wiris.system.TypeTools.isArray(currentContainer)) stateStack.push(new com.wiris.util.json.parser.State(propertyName,currentContainer,com.wiris.util.json.parser.JType.TYPE_ARRAY));
				throw new com.wiris.system.Exception(com.wiris.util.json.parser.JsonParse.buildErrorMessage(stateStack,"\"" + valueString + "\" is not a valid constant. Missing quotes?"));
			}
			if(currentContainer == null) return value; else {
				expectingComma = true;
				if(com.wiris.system.TypeTools.isHash(currentContainer)) {
					currentContainer.set(propertyName,value);
					currentJType = com.wiris.util.json.parser.JType.TYPE_OBJECT;
				} else {
					currentContainer.push(value);
					currentJType = com.wiris.util.json.parser.JType.TYPE_ARRAY;
				}
			}
		} else if(currentJType == com.wiris.util.json.parser.JType.TYPE_HEURISTIC) {
			while(com.wiris.util.json.parser.JsonParse.isWhitespace(current) && i++ < end) current = com.wiris.system.Utf8.charValueAt(jsonString,i);
			if(current != 58 && expectingColon) {
				stateStack.push(new com.wiris.util.json.parser.State(propertyName,currentContainer,com.wiris.util.json.parser.JType.TYPE_OBJECT));
				throw new com.wiris.system.Exception(com.wiris.util.json.parser.JsonParse.buildErrorMessage(stateStack,"wasn't followed by a colon"));
			}
			if(current == 58) {
				if(expectingColon) {
					expectingColon = false;
					i++;
				} else {
					stateStack.push(new com.wiris.util.json.parser.State(propertyName,currentContainer,com.wiris.util.json.parser.JType.TYPE_OBJECT));
					throw new com.wiris.system.Exception(com.wiris.util.json.parser.JsonParse.buildErrorMessage(stateStack,"was followed by too many colons"));
				}
			} else if(current == 34 || com.wiris.util.json.parser.JsonParse.ALLOW_SINGLE_QUOTES && current == 39) {
				currentJType = com.wiris.util.json.parser.JType.TYPE_STRING;
				singleQuoteString = current == 39;
				fieldStart = i;
			} else if(current == 123) {
				stateStack.push(new com.wiris.util.json.parser.State(propertyName,currentContainer,com.wiris.util.json.parser.JType.TYPE_OBJECT));
				currentJType = com.wiris.util.json.parser.JType.TYPE_OBJECT;
				currentContainer = new Hash();
				i++;
			} else if(current == 91) {
				stateStack.push(new com.wiris.util.json.parser.State(propertyName,currentContainer,com.wiris.util.json.parser.JType.TYPE_OBJECT));
				currentJType = com.wiris.util.json.parser.JType.TYPE_ARRAY;
				currentContainer = new Array();
				i++;
			} else if(com.wiris.util.json.parser.JsonParse.isLetter(current)) {
				currentJType = com.wiris.util.json.parser.JType.TYPE_CONSTANT;
				fieldStart = i;
			} else if(com.wiris.util.json.parser.JsonParse.isNumberStart(current)) {
				currentJType = com.wiris.util.json.parser.JType.TYPE_NUMBER;
				fieldStart = i;
			} else throw new com.wiris.system.Exception(com.wiris.util.json.parser.JsonParse.buildErrorMessage(stateStack,"unexpected character \"" + current + "\" instead of object value"));
		} else if(currentJType == com.wiris.util.json.parser.JType.TYPE_OBJECT) {
			while(com.wiris.util.json.parser.JsonParse.isWhitespace(current) && i++ < end) current = com.wiris.system.Utf8.charValueAt(jsonString,i);
			if(current == 44) {
				if(expectingComma) {
					expectingComma = false;
					i++;
				} else {
					stateStack.push(new com.wiris.util.json.parser.State(propertyName,currentContainer,com.wiris.util.json.parser.JType.TYPE_OBJECT));
					throw new com.wiris.system.Exception(com.wiris.util.json.parser.JsonParse.buildErrorMessage(stateStack,"followed by too many commas"));
				}
			} else if(current == 34 || com.wiris.util.json.parser.JsonParse.ALLOW_SINGLE_QUOTES && current == 39) {
				if(expectingComma) {
					stateStack.push(new com.wiris.util.json.parser.State(propertyName,currentContainer,com.wiris.util.json.parser.JType.TYPE_OBJECT));
					throw new com.wiris.system.Exception(com.wiris.util.json.parser.JsonParse.buildErrorMessage(stateStack,"wasn't followed by a comma"));
				}
				currentJType = com.wiris.util.json.parser.JType.TYPE_NAME;
				singleQuoteString = current == 39;
				fieldStart = i;
			} else if(current == 125) {
				if(stateStack.length > 0) {
					var upper = stateStack.pop();
					var upperContainer = upper.container;
					var parentName = upper.propertyName;
					currentJType = upper.type;
					if(com.wiris.system.TypeTools.isHash(upperContainer)) upperContainer.set(parentName,currentContainer); else upperContainer.push(currentContainer);
					currentContainer = upperContainer;
					expectingComma = true;
					i++;
				} else return currentContainer;
			} else if(!com.wiris.util.json.parser.JsonParse.isWhitespace(current)) throw new com.wiris.system.Exception(com.wiris.util.json.parser.JsonParse.buildErrorMessage(stateStack,"unexpected character '" + current + "' where a property name is expected. Missing quotes?"));
		} else if(currentJType == com.wiris.util.json.parser.JType.TYPE_ARRAY) {
			while(com.wiris.util.json.parser.JsonParse.isWhitespace(current) && i++ < end) current = com.wiris.system.Utf8.charValueAt(jsonString,i);
			if(current != 44 && current != 93 && current != 125 && expectingComma) {
				stateStack.push(new com.wiris.util.json.parser.State(null,currentContainer,com.wiris.util.json.parser.JType.TYPE_ARRAY));
				throw new com.wiris.system.Exception(com.wiris.util.json.parser.JsonParse.buildErrorMessage(stateStack,"wasn't preceded by a comma"));
			}
			if(current == 44) {
				if(expectingComma) {
					expectingComma = false;
					i++;
				} else {
					stateStack.push(new com.wiris.util.json.parser.State(null,currentContainer,com.wiris.util.json.parser.JType.TYPE_ARRAY));
					throw new com.wiris.system.Exception(com.wiris.util.json.parser.JsonParse.buildErrorMessage(stateStack,"preceded by too many commas"));
				}
			} else if(current == 34 || com.wiris.util.json.parser.JsonParse.ALLOW_SINGLE_QUOTES && current == 39) {
				currentJType = com.wiris.util.json.parser.JType.TYPE_STRING;
				singleQuoteString = current == 39;
				fieldStart = i;
			} else if(current == 123) {
				stateStack.push(new com.wiris.util.json.parser.State(null,currentContainer,com.wiris.util.json.parser.JType.TYPE_ARRAY));
				currentJType = com.wiris.util.json.parser.JType.TYPE_OBJECT;
				currentContainer = new Hash();
				i++;
			} else if(current == 91) {
				stateStack.push(new com.wiris.util.json.parser.State(null,currentContainer,com.wiris.util.json.parser.JType.TYPE_ARRAY));
				currentJType = com.wiris.util.json.parser.JType.TYPE_ARRAY;
				currentContainer = new Array();
				i++;
			} else if(current == 93) {
				if(stateStack.length > 0) {
					var upper = stateStack.pop();
					var upperContainer = upper.container;
					var parentName = upper.propertyName;
					currentJType = upper.type;
					if(com.wiris.system.TypeTools.isHash(upperContainer)) upperContainer.set(parentName,currentContainer); else upperContainer.push(currentContainer);
					currentContainer = upperContainer;
					expectingComma = true;
					i++;
				} else return currentContainer;
			} else if(com.wiris.util.json.parser.JsonParse.isLetter(current)) {
				currentJType = com.wiris.util.json.parser.JType.TYPE_CONSTANT;
				fieldStart = i;
			} else if(com.wiris.util.json.parser.JsonParse.isNumberStart(current)) {
				currentJType = com.wiris.util.json.parser.JType.TYPE_NUMBER;
				fieldStart = i;
			} else {
				stateStack.push(new com.wiris.util.json.parser.State(propertyName,currentContainer,com.wiris.util.json.parser.JType.TYPE_ARRAY));
				throw new com.wiris.system.Exception(com.wiris.util.json.parser.JsonParse.buildErrorMessage(stateStack,"Unexpected character \"" + current + "\" instead of array value"));
			}
		}
	}
	throw new com.wiris.system.Exception("Root element wasn't terminated correctly (Missing ']' or '}'?)");
}
com.wiris.util.json.parser.JsonParse.extractString = function(jsonString,fieldStart,singleQuote) {
	var builder = new StringBuf();
	var ret = null;
	while(true) {
		var i = com.wiris.util.json.parser.JsonParse.indexOfSpecial(jsonString,fieldStart,singleQuote);
		var c = com.wiris.system.Utf8.charValueAt(jsonString,i);
		if(!singleQuote && c == 34 || singleQuote && c == 39) {
			builder.b += Std.string(com.wiris.system.Utf8.mbSubstring(jsonString,fieldStart + 1,i - fieldStart - 1));
			ret = new com.wiris.util.json.parser.ExtractedString(i,builder.b);
			break;
		} else if(c == 92) {
			builder.b += Std.string(com.wiris.system.Utf8.mbSubstring(jsonString,fieldStart + 1,i - fieldStart - 1));
			c = com.wiris.system.Utf8.charValueAt(jsonString,i + 1);
			if(c == 34) builder.b += String.fromCharCode(34); else if(c == 92) builder.b += String.fromCharCode(92); else if(c == 47) builder.b += String.fromCharCode(47); else if(c == 110) builder.b += String.fromCharCode(10); else if(c == 114) builder.b += String.fromCharCode(13); else if(c == 116) builder.b += String.fromCharCode(9); else if(c == 117) {
				builder.b += Std.string(com.wiris.system.Utf8.uchr(Std.parseInt("0x" + com.wiris.system.Utf8.mbSubstring(jsonString,i + 2,4))));
				fieldStart = i + 5;
				continue;
			}
			fieldStart = i + 1;
		} else throw "Index out of bounds";
	}
	return ret;
}
com.wiris.util.json.parser.JsonParse.indexOfSpecial = function(str,start,singleQuote) {
	var i = start;
	while(++i < str.length) {
		var c = com.wiris.system.Utf8.charValueAt(str,i);
		if(!singleQuote && c == 34 || com.wiris.util.json.parser.JsonParse.ALLOW_SINGLE_QUOTES && singleQuote && c == 39 || c == 92) break;
	}
	return i;
}
com.wiris.util.json.parser.JsonParse.isWhitespace = function(c) {
	return c == 32 || c == 9 || c == 10 || c == 13;
}
com.wiris.util.json.parser.JsonParse.isLetter = function(c) {
	return c >= 97 && c <= 122;
}
com.wiris.util.json.parser.JsonParse.isNumberStart = function(c) {
	return c >= 48 && c <= 57 || c == 45;
}
com.wiris.util.json.parser.JsonParse.buildErrorMessage = function(stateStack,message) {
	var jsonTrace = "";
	var i;
	var _g1 = 0, _g = stateStack.length;
	while(_g1 < _g) {
		var i1 = _g1++;
		var name = stateStack[i1].propertyName;
		if(name == null) {
			var list = stateStack[i1].container;
			name = "[" + list.length + "]";
		}
		jsonTrace += name + (i1 != stateStack.length - 1?".":"");
	}
	jsonTrace = jsonTrace == ""?"<root>":"<root>." + jsonTrace;
	return jsonTrace + ": " + message;
}
com.wiris.util.json.parser.JsonParse.prototype = {
	__class__: com.wiris.util.json.parser.JsonParse
}
com.wiris.util.json.parser.State = $hxClasses["com.wiris.util.json.parser.State"] = function(propertyName,container,type) {
	this.propertyName = propertyName;
	this.container = container;
	this.type = type;
};
com.wiris.util.json.parser.State.__name__ = ["com","wiris","util","json","parser","State"];
com.wiris.util.json.parser.State.prototype = {
	type: null
	,container: null
	,propertyName: null
	,__class__: com.wiris.util.json.parser.State
}
if(!com.wiris.util.lang) com.wiris.util.lang = {}
com.wiris.util.lang.WordsListener = $hxClasses["com.wiris.util.lang.WordsListener"] = function() { }
com.wiris.util.lang.WordsListener.__name__ = ["com","wiris","util","lang","WordsListener"];
com.wiris.util.lang.WordsListener.prototype = {
	languageLoaded: null
	,__class__: com.wiris.util.lang.WordsListener
}
com.wiris.util.lang.Translator = $hxClasses["com.wiris.util.lang.Translator"] = function(lang,strings) {
	this.lang = lang;
	this.strings = strings;
};
com.wiris.util.lang.Translator.__name__ = ["com","wiris","util","lang","Translator"];
com.wiris.util.lang.Translator.__interfaces__ = [com.wiris.util.lang.WordsListener];
com.wiris.util.lang.Translator.newTranslatorFromArray = function(lang,source) {
	var strings = new Hash();
	var i = 0;
	while(i < source.length && !(source[i][0][0][0] == "lang" && source[i][0][0][1] == lang)) i++;
	if(i < source.length) {
		var langarrays = source[i];
		var _g1 = 0, _g = langarrays.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			var langarray = langarrays[i1];
			var j;
			var _g3 = 0, _g2 = langarray.length;
			while(_g3 < _g2) {
				var j1 = _g3++;
				strings.set(langarray[j1][0],langarray[j1][1]);
			}
		}
	}
	return new com.wiris.util.lang.Translator(lang,strings);
}
com.wiris.util.lang.Translator.newTranslatorFromWords = function(lang,words) {
	return com.wiris.util.lang.Translator.newTranslatorFromWordsWithTypes(lang,words,null);
}
com.wiris.util.lang.Translator.newTranslatorFromWordsWithTypes = function(lang,words,types) {
	var strings = new Hash();
	var t = new com.wiris.util.lang.Translator(lang,strings);
	t.types = types;
	words.loadLanguage(lang,t);
	return t;
}
com.wiris.util.lang.Translator.newTranslatorFromHash = function(lang,hash) {
	return new com.wiris.util.lang.Translator(lang,hash);
}
com.wiris.util.lang.Translator.addAll = function(from,to) {
	var i = from.keys();
	while(i.hasNext()) {
		var key = i.next();
		to.set(key,from.get(key));
	}
}
com.wiris.util.lang.Translator.prototype = {
	keys: function() {
		return this.strings.keys();
	}
	,isEmpty: function() {
		return !this.strings.keys().hasNext();
	}
	,getLang: function() {
		return this.lang;
	}
	,t: function(code) {
		if(code != null && this.strings.exists(code)) code = this.strings.get(code);
		return code;
	}
	,languageLoaded: function(words) {
		var keys = words.getTypes(this.lang);
		while(keys.hasNext()) {
			var type = keys.next();
			if(this.types == null || com.wiris.util.type.Arrays.containsArray(this.types,type)) com.wiris.util.lang.Translator.addAll(words.getWords(this.lang,type),this.strings);
		}
	}
	,types: null
	,lang: null
	,strings: null
	,__class__: com.wiris.util.lang.Translator
}
com.wiris.util.lang.TranslatorProvider = $hxClasses["com.wiris.util.lang.TranslatorProvider"] = function() { }
com.wiris.util.lang.TranslatorProvider.__name__ = ["com","wiris","util","lang","TranslatorProvider"];
com.wiris.util.lang.TranslatorProvider.prototype = {
	getTranslator: null
	,__class__: com.wiris.util.lang.TranslatorProvider
}
com.wiris.util.lang.Words = $hxClasses["com.wiris.util.lang.Words"] = function(resource,available) {
	this.resource = resource;
	this.available = available;
	this.init();
};
com.wiris.util.lang.Words.__name__ = ["com","wiris","util","lang","Words"];
com.wiris.util.lang.Words.prototype = {
	getAvailableLanguages: function() {
		return this.available;
	}
	,getWordsResourceName: function(lang) {
		return this.resource + "." + lang + ".json";
	}
	,getWords: function(lang,key) {
		var words = com.wiris.util.lang.Words.words.get(this.resource).get(lang);
		if(words == null) throw "Language \"" + lang + "\" not loaded.";
		var hash = words.get(key);
		return hash;
	}
	,getTypes: function(lang) {
		var words = com.wiris.util.lang.Words.words.get(this.resource).get(lang);
		if(words == null) throw "Language \"" + lang + "\" not loaded.";
		return words.keys();
	}
	,loadLanguage: function(lang,wl) {
		if(!com.wiris.util.lang.Words.words.get(this.resource).exists(lang)) {
			var s = com.wiris.system.Storage.newResourceStorage(this.getWordsResourceName(lang));
			if(s.exists()) {
				var json = s.read();
				var hash = com.wiris.util.json.JSon.decode(json);
				com.wiris.util.lang.Words.words.get(this.resource).set(lang,hash);
			} else throw "Language resource \"" + lang + "\" not found.";
		}
		wl.languageLoaded(this);
	}
	,init: function() {
		if(!com.wiris.util.lang.Words.words.exists(this.resource)) com.wiris.util.lang.Words.words.set(this.resource,new Hash());
	}
	,available: null
	,resource: null
	,__class__: com.wiris.util.lang.Words
}
com.wiris.util.lang.WordsTranslatorContainer = $hxClasses["com.wiris.util.lang.WordsTranslatorContainer"] = function() {
	this.defLang = null;
	this.languageList = null;
};
com.wiris.util.lang.WordsTranslatorContainer.__name__ = ["com","wiris","util","lang","WordsTranslatorContainer"];
com.wiris.util.lang.WordsTranslatorContainer.__interfaces__ = [com.wiris.util.lang.TranslatorProvider];
com.wiris.util.lang.WordsTranslatorContainer.newTranslatorContainerFromWords = function(words,defLang) {
	return com.wiris.util.lang.WordsTranslatorContainer.newTranslatorContainerFromWordsWithTypes(words,defLang,null);
}
com.wiris.util.lang.WordsTranslatorContainer.newTranslatorContainerFromWordsWithTypes = function(words,defLang,types) {
	var tc = new com.wiris.util.lang.WordsTranslatorContainer();
	tc.words = words;
	tc.setDefLang(defLang);
	tc.types = types;
	return tc;
}
com.wiris.util.lang.WordsTranslatorContainer.normalizeLangString = function(lang) {
	return StringTools.replace(StringTools.trim(lang).toLowerCase(),"-","_");
}
com.wiris.util.lang.WordsTranslatorContainer.hasRootLanguage = function(lang) {
	return lang.indexOf("_") != -1;
}
com.wiris.util.lang.WordsTranslatorContainer.getRootLanguage = function(lang) {
	return HxOverrides.substr(lang,0,lang.indexOf("_"));
}
com.wiris.util.lang.WordsTranslatorContainer.prototype = {
	getTranslator: function(lang) {
		if(this.languages == null) this.languages = new Hash();
		lang = this.getAvailableLang(lang);
		if(!this.languages.exists(lang)) {
			var translator = com.wiris.util.lang.Translator.newTranslatorFromWordsWithTypes(lang,this.words,this.types);
			this.languages.set(lang,translator);
		}
		return this.languages.get(lang);
	}
	,getAvailableLang: function(lang) {
		this.getAvailableLanguages();
		lang = com.wiris.util.lang.WordsTranslatorContainer.normalizeLangString(lang);
		if(com.wiris.util.type.Arrays.contains(this.languageList,lang)) return lang;
		if(com.wiris.util.lang.WordsTranslatorContainer.hasRootLanguage(lang)) {
			lang = com.wiris.util.lang.WordsTranslatorContainer.getRootLanguage(lang);
			if(com.wiris.util.type.Arrays.contains(this.languageList,lang)) return lang;
		}
		lang = this.defLang;
		if(com.wiris.util.type.Arrays.contains(this.languageList,lang)) return lang;
		throw "Default language " + this.defLang + " is not available.";
	}
	,getAvailableLanguages: function() {
		if(this.languageList == null) this.languageList = this.words.getAvailableLanguages();
		return this.languageList;
	}
	,setDefLang: function(defLang) {
		var langs = this.getAvailableLanguages();
		if(com.wiris.util.type.Arrays.contains(langs,defLang)) this.defLang = defLang; else if(com.wiris.util.type.Arrays.contains(langs,"en")) this.defLang = "en"; else if(langs.length > 0) this.defLang = langs[0]; else throw "There are no available languages.";
	}
	,words: null
	,types: null
	,defLang: null
	,languageList: null
	,languages: null
	,__class__: com.wiris.util.lang.WordsTranslatorContainer
}
if(!com.wiris.util.net) com.wiris.util.net = {}
com.wiris.util.net.MimeTypes = $hxClasses["com.wiris.util.net.MimeTypes"] = function() { }
com.wiris.util.net.MimeTypes.__name__ = ["com","wiris","util","net","MimeTypes"];
com.wiris.util.sys.AccessProvider = $hxClasses["com.wiris.util.sys.AccessProvider"] = function() { }
com.wiris.util.sys.AccessProvider.__name__ = ["com","wiris","util","sys","AccessProvider"];
com.wiris.util.sys.AccessProvider.prototype = {
	isEnabled: null
	,requireAccess: null
	,__class__: com.wiris.util.sys.AccessProvider
}
com.wiris.util.sys.Cache = $hxClasses["com.wiris.util.sys.Cache"] = function() { }
com.wiris.util.sys.Cache.__name__ = ["com","wiris","util","sys","Cache"];
com.wiris.util.sys.Cache.prototype = {
	'delete': null
	,deleteAll: null
	,get: null
	,set: null
	,__class__: com.wiris.util.sys.Cache
}
com.wiris.util.sys.HttpConnection = $hxClasses["com.wiris.util.sys.HttpConnection"] = function(url,service,listener) {
	haxe.Http.call(this,url);
	this.listener = listener;
	this.service = service;
};
com.wiris.util.sys.HttpConnection.__name__ = ["com","wiris","util","sys","HttpConnection"];
com.wiris.util.sys.HttpConnection.__super__ = haxe.Http;
com.wiris.util.sys.HttpConnection.prototype = $extend(haxe.Http.prototype,{
	onStatus: function(status) {
		this.listener.onHTTPStatus(status,this.service);
	}
	,onError: function(error) {
		this.listener.onHTTPError(error,this.service);
	}
	,onData: function(data) {
		this.listener.onHTTPData(data,this.service);
	}
	,service: null
	,listener: null
	,__class__: com.wiris.util.sys.HttpConnection
});
com.wiris.util.sys.HttpConnectionListener = $hxClasses["com.wiris.util.sys.HttpConnectionListener"] = function() { }
com.wiris.util.sys.HttpConnectionListener.__name__ = ["com","wiris","util","sys","HttpConnectionListener"];
com.wiris.util.sys.HttpConnectionListener.prototype = {
	onHTTPStatus: null
	,onHTTPError: null
	,onHTTPData: null
	,__class__: com.wiris.util.sys.HttpConnectionListener
}
com.wiris.util.sys.IniFile = $hxClasses["com.wiris.util.sys.IniFile"] = function() {
	this.props = new Hash();
};
com.wiris.util.sys.IniFile.__name__ = ["com","wiris","util","sys","IniFile"];
com.wiris.util.sys.IniFile.newIniFileFromFilename = function(path) {
	var ini = new com.wiris.util.sys.IniFile();
	ini.filename = path;
	ini.loadINI();
	return ini;
}
com.wiris.util.sys.IniFile.newIniFileFromString = function(inifile) {
	var ini = new com.wiris.util.sys.IniFile();
	ini.filename = "";
	ini.loadProperties(inifile);
	return ini;
}
com.wiris.util.sys.IniFile.propertiesToString = function(h) {
	var sb = new StringBuf();
	var iter = h.keys();
	var keys = new Array();
	while(iter.hasNext()) keys.push(iter.next());
	var i;
	var j;
	var n = keys.length;
	var _g = 0;
	while(_g < n) {
		var i1 = _g++;
		var _g1 = i1 + 1;
		while(_g1 < n) {
			var j1 = _g1++;
			var s1 = keys[i1];
			var s2 = keys[j1];
			if(com.wiris.util.sys.IniFile.compareStrings(s1,s2) > 0) {
				keys[i1] = s2;
				keys[j1] = s1;
			}
		}
	}
	var _g = 0;
	while(_g < n) {
		var i1 = _g++;
		var key = keys[i1];
		sb.b += Std.string(key);
		sb.b += Std.string("=");
		var value = h.get(key);
		value = StringTools.replace(value,"\\","\\\\");
		value = StringTools.replace(value,"\n","\\n");
		value = StringTools.replace(value,"\r","\\r");
		value = StringTools.replace(value,"\t","\\t");
		sb.b += Std.string(value);
		sb.b += Std.string("\n");
	}
	return sb.b;
}
com.wiris.util.sys.IniFile.compareStrings = function(a,b) {
	var i;
	var an = a.length;
	var bn = b.length;
	var n = an > bn?bn:an;
	var _g = 0;
	while(_g < n) {
		var i1 = _g++;
		var c = HxOverrides.cca(a,i1) - HxOverrides.cca(b,i1);
		if(c != 0) return c;
	}
	return a.length - b.length;
}
com.wiris.util.sys.IniFile.prototype = {
	loadProperties: function(file) {
		var start;
		var end = 0;
		var count = 1;
		while((start = file.indexOf("\n",end)) != -1) {
			var line = HxOverrides.substr(file,end,start - end);
			end = start + 1;
			this.loadPropertiesLine(line,count);
			count++;
		}
		if(end < file.length) {
			var line = HxOverrides.substr(file,end,null);
			this.loadPropertiesLine(line,count);
		}
	}
	,loadPropertiesLine: function(line,count) {
		line = StringTools.trim(line);
		if(line.length == 0) return;
		if(StringTools.startsWith(line,";") || StringTools.startsWith(line,"#")) return;
		var equals = line.indexOf("=");
		if(equals == -1) throw "Malformed INI file " + this.filename + " in line " + count + " no equal sign found.";
		var key = HxOverrides.substr(line,0,equals);
		key = StringTools.trim(key);
		var value = HxOverrides.substr(line,equals + 1,null);
		value = StringTools.trim(value);
		if(StringTools.startsWith(value,"\"") && StringTools.endsWith(value,"\"")) value = HxOverrides.substr(value,1,value.length - 2);
		var backslash = 0;
		while((backslash = value.indexOf("\\",backslash)) != -1) {
			if(value.length <= backslash + 1) continue;
			var letter = HxOverrides.substr(value,backslash + 1,1);
			if(letter == "n") letter = "\n"; else if(letter == "r") letter = "\r"; else if(letter == "t") letter = "\t";
			value = HxOverrides.substr(value,0,backslash) + letter + HxOverrides.substr(value,backslash + 2,null);
			backslash++;
		}
		this.props.set(key,value);
	}
	,loadINI: function() {
		var s = com.wiris.system.Storage.newStorage(this.filename);
		if(!s.exists()) s = com.wiris.system.Storage.newResourceStorage(this.filename);
		try {
			var file = s.read();
			if(file != null) this.loadProperties(file);
		} catch( e ) {
		}
	}
	,getProperties: function() {
		return this.props;
	}
	,props: null
	,filename: null
	,__class__: com.wiris.util.sys.IniFile
}
com.wiris.util.sys.StoreCache = $hxClasses["com.wiris.util.sys.StoreCache"] = function(cachedir) {
	this.cachedir = com.wiris.system.Storage.newStorage(cachedir);
	if(!this.cachedir.exists()) this.cachedir.mkdirs();
	if(!this.cachedir.exists()) throw "Variable folder \"" + this.cachedir.toString() + "\" does not exist and can't be automatically created. Please create it with write permissions.";
};
com.wiris.util.sys.StoreCache.__name__ = ["com","wiris","util","sys","StoreCache"];
com.wiris.util.sys.StoreCache.__interfaces__ = [com.wiris.util.sys.Cache];
com.wiris.util.sys.StoreCache.prototype = {
	getItemStore: function(key) {
		return com.wiris.system.Storage.newStorageWithParent(this.cachedir,key);
	}
	,'delete': function(key) {
		this.getItemStore(key)["delete"]();
	}
	,deleteStorageDir: function(s) {
		if(s.exists() && s.isDirectory()) {
			var files = s.list();
			var i;
			var _g1 = 0, _g = files.length;
			while(_g1 < _g) {
				var i1 = _g1++;
				if(!(files[i1] == "." || files[i1] == "..")) {
					var f = com.wiris.system.Storage.newStorageWithParent(s,files[i1]);
					if(f.isDirectory()) this.deleteStorageDir(f);
					f["delete"]();
				}
			}
		}
	}
	,deleteAll: function() {
		this.deleteStorageDir(this.cachedir);
	}
	,get: function(key) {
		var s = this.getItemStore(key);
		if(s.exists()) try {
			return haxe.io.Bytes.ofData(s.readBinary());
		} catch( t ) {
			haxe.Log.trace("Unable to read cache file \"" + s.toString() + "\".",{ fileName : "StoreCache.hx", lineNumber : 43, className : "com.wiris.util.sys.StoreCache", methodName : "get"});
			return null;
		} else return null;
	}
	,set: function(key,value) {
		var s = this.getItemStore(key);
		try {
			s.writeBinary(value.b);
		} catch( t ) {
			throw "Unable to write the cache file \"" + s.toString() + "\".";
		}
	}
	,cachedir: null
	,__class__: com.wiris.util.sys.StoreCache
}
com.wiris.util.sys.TimerProxy = $hxClasses["com.wiris.util.sys.TimerProxy"] = function(ms,runOnce,task) {
	haxe.Timer.call(this,ms);
	this.isTimeout = runOnce;
	this.timerTask = task;
};
com.wiris.util.sys.TimerProxy.__name__ = ["com","wiris","util","sys","TimerProxy"];
com.wiris.util.sys.TimerProxy.__super__ = haxe.Timer;
com.wiris.util.sys.TimerProxy.prototype = $extend(haxe.Timer.prototype,{
	run: function() {
		if(this.isTimeout) this.stop();
		this.timerTask.run(this);
	}
	,isTimeout: null
	,timerTask: null
	,__class__: com.wiris.util.sys.TimerProxy
});
com.wiris.util.telemetry.LoggingLevel = $hxClasses["com.wiris.util.telemetry.LoggingLevel"] = { __ename__ : ["com","wiris","util","telemetry","LoggingLevel"], __constructs__ : ["NONE","ERROR","WARNING","INFO","DEBUG"] }
com.wiris.util.telemetry.LoggingLevel.NONE = ["NONE",0];
com.wiris.util.telemetry.LoggingLevel.NONE.toString = $estr;
com.wiris.util.telemetry.LoggingLevel.NONE.__enum__ = com.wiris.util.telemetry.LoggingLevel;
com.wiris.util.telemetry.LoggingLevel.ERROR = ["ERROR",1];
com.wiris.util.telemetry.LoggingLevel.ERROR.toString = $estr;
com.wiris.util.telemetry.LoggingLevel.ERROR.__enum__ = com.wiris.util.telemetry.LoggingLevel;
com.wiris.util.telemetry.LoggingLevel.WARNING = ["WARNING",2];
com.wiris.util.telemetry.LoggingLevel.WARNING.toString = $estr;
com.wiris.util.telemetry.LoggingLevel.WARNING.__enum__ = com.wiris.util.telemetry.LoggingLevel;
com.wiris.util.telemetry.LoggingLevel.INFO = ["INFO",3];
com.wiris.util.telemetry.LoggingLevel.INFO.toString = $estr;
com.wiris.util.telemetry.LoggingLevel.INFO.__enum__ = com.wiris.util.telemetry.LoggingLevel;
com.wiris.util.telemetry.LoggingLevel.DEBUG = ["DEBUG",4];
com.wiris.util.telemetry.LoggingLevel.DEBUG.toString = $estr;
com.wiris.util.telemetry.LoggingLevel.DEBUG.__enum__ = com.wiris.util.telemetry.LoggingLevel;
com.wiris.util.telemetry.Message = $hxClasses["com.wiris.util.telemetry.Message"] = function(topic,parameters) {
	this.topic = topic;
	this.parameters = parameters;
	this.timestamp = com.wiris.system.DateUtils.getUTCDate();
};
com.wiris.util.telemetry.Message.__name__ = ["com","wiris","util","telemetry","Message"];
com.wiris.util.telemetry.Message.toHashArray = function(array) {
	var hashArray = new Array();
	var _g = 0;
	while(_g < array.length) {
		var message = array[_g];
		++_g;
		hashArray.push(message.toHash());
	}
	return hashArray;
}
com.wiris.util.telemetry.Message.prototype = {
	getTimestamp: function() {
		return this.timestamp;
	}
	,getTopic: function() {
		return this.topic;
	}
	,getParameters: function() {
		return this.parameters;
	}
	,toHash: function() {
		var hash = new Hash();
		hash.set(com.wiris.util.telemetry.Message.TOPIC_KEY,this.topic + "");
		hash.set(com.wiris.util.telemetry.Message.TIMESTAMP_KEY,this.timestamp);
		if(this.parameters != null) com.wiris.util.type.HashUtils.putAll(this.parameters,hash);
		return hash;
	}
	,serialize: function() {
		return com.wiris.util.json.JSon.encode(this.toHash());
	}
	,setTimestamp: function(timestamp) {
		this.timestamp = timestamp;
	}
	,timestamp: null
	,parameters: null
	,topic: null
	,__class__: com.wiris.util.telemetry.Message
}
com.wiris.util.telemetry.Sender = $hxClasses["com.wiris.util.telemetry.Sender"] = function(deployment,parameters,id) {
	this.id = id;
	this.deployment = deployment;
	this.parameters = parameters;
};
com.wiris.util.telemetry.Sender.__name__ = ["com","wiris","util","telemetry","Sender"];
com.wiris.util.telemetry.Sender.newWithRandomId = function(deployment,parameters) {
	return new com.wiris.util.telemetry.Sender(deployment,parameters,com.wiris.system.UUIDUtils.generateV4());
}
com.wiris.util.telemetry.Sender.prototype = {
	toHash: function() {
		var hash = new Hash();
		hash.set(com.wiris.util.telemetry.Sender.ID_KEY,this.id);
		hash.set(com.wiris.util.telemetry.Sender.DEPLOYMENT_KEY,this.deployment);
		if(this.parameters != null) com.wiris.util.type.HashUtils.putAll(this.parameters,hash);
		return hash;
	}
	,serialize: function() {
		return com.wiris.util.json.JSon.encode(this.toHash());
	}
	,addParameter: function(key,value) {
		this.parameters.set(key,value);
	}
	,setParameters: function(parameters) {
		this.parameters = parameters;
	}
	,getParameters: function() {
		return this.parameters;
	}
	,getDeployment: function() {
		return this.deployment;
	}
	,getId: function() {
		return this.id;
	}
	,parameters: null
	,deployment: null
	,id: null
	,__class__: com.wiris.util.telemetry.Sender
}
com.wiris.util.telemetry.Session = $hxClasses["com.wiris.util.telemetry.Session"] = function(UUID) {
	this.page = 0;
	if(UUID == null) this.id = com.wiris.system.UUIDUtils.generateV4(); else this.id = UUID;
};
com.wiris.util.telemetry.Session.__name__ = ["com","wiris","util","telemetry","Session"];
com.wiris.util.telemetry.Session.prototype = {
	toHash: function() {
		var hash = new Hash();
		hash.set(com.wiris.util.telemetry.Session.ID_KEY,this.id);
		hash.set(com.wiris.util.telemetry.Session.PAGE_KEY,this.page + "");
		return hash;
	}
	,serialize: function() {
		return com.wiris.util.json.JSon.encode(this.toHash());
	}
	,incrementPageBy: function(n) {
		this.page += n;
	}
	,setPage: function(page) {
		this.page = page;
	}
	,getPage: function() {
		return this.page;
	}
	,getId: function() {
		return this.id;
	}
	,page: null
	,id: null
	,__class__: com.wiris.util.telemetry.Session
}
com.wiris.util.telemetry.TelemetryLogger = $hxClasses["com.wiris.util.telemetry.TelemetryLogger"] = function() { }
com.wiris.util.telemetry.TelemetryLogger.__name__ = ["com","wiris","util","telemetry","TelemetryLogger"];
com.wiris.util.telemetry.TelemetryLogger.prototype = {
	logWithParams: null
	,log: null
	,__class__: com.wiris.util.telemetry.TelemetryLogger
}
com.wiris.util.telemetry.TelemetryLoggerImpl = $hxClasses["com.wiris.util.telemetry.TelemetryLoggerImpl"] = function(service,level) {
	this.service = service;
	this.level = level;
	com.wiris.util.telemetry.TelemetryLoggerImpl.populateLevels();
};
com.wiris.util.telemetry.TelemetryLoggerImpl.__name__ = ["com","wiris","util","telemetry","TelemetryLoggerImpl"];
com.wiris.util.telemetry.TelemetryLoggerImpl.__interfaces__ = [com.wiris.util.telemetry.TelemetryLogger];
com.wiris.util.telemetry.TelemetryLoggerImpl.levels = null;
com.wiris.util.telemetry.TelemetryLoggerImpl.populateLevels = function() {
	if(com.wiris.util.telemetry.TelemetryLoggerImpl.levels == null) {
		com.wiris.util.telemetry.TelemetryLoggerImpl.levels = new Hash();
		com.wiris.util.telemetry.TelemetryLoggerImpl.levels.set(com.wiris.util.telemetry.TelemetryLoggerImpl.NONE,com.wiris.util.telemetry.LoggingLevel.NONE);
		com.wiris.util.telemetry.TelemetryLoggerImpl.levels.set(com.wiris.util.telemetry.TelemetryLoggerImpl.ERROR,com.wiris.util.telemetry.LoggingLevel.ERROR);
		com.wiris.util.telemetry.TelemetryLoggerImpl.levels.set(com.wiris.util.telemetry.TelemetryLoggerImpl.WARNING,com.wiris.util.telemetry.LoggingLevel.WARNING);
		com.wiris.util.telemetry.TelemetryLoggerImpl.levels.set(com.wiris.util.telemetry.TelemetryLoggerImpl.INFO,com.wiris.util.telemetry.LoggingLevel.INFO);
		com.wiris.util.telemetry.TelemetryLoggerImpl.levels.set(com.wiris.util.telemetry.TelemetryLoggerImpl.DEBUG,com.wiris.util.telemetry.LoggingLevel.DEBUG);
	}
}
com.wiris.util.telemetry.TelemetryLoggerImpl.loggingLevelFromString = function(level) {
	com.wiris.util.telemetry.TelemetryLoggerImpl.populateLevels();
	return com.wiris.util.telemetry.TelemetryLoggerImpl.levels.get(level);
}
com.wiris.util.telemetry.TelemetryLoggerImpl.loggingLevelToInt = function(level) {
	return com.wiris.util.type.Arrays.indexOfElementArray(com.wiris.util.telemetry.TelemetryLoggerImpl.LEVELS,com.wiris.util.telemetry.TelemetryLoggerImpl.levelToString(level));
}
com.wiris.util.telemetry.TelemetryLoggerImpl.levelToString = function(level) {
	return com.wiris.util.type.HashUtils.getKey(level,com.wiris.util.telemetry.TelemetryLoggerImpl.levels);
}
com.wiris.util.telemetry.TelemetryLoggerImpl.prototype = {
	logWithParams: function(text,parameters,messageLevel) {
		if(com.wiris.util.telemetry.TelemetryLoggerImpl.loggingLevelToInt(this.level) >= com.wiris.util.telemetry.TelemetryLoggerImpl.loggingLevelToInt(messageLevel)) {
			if(parameters == null) parameters = new Hash();
			parameters.set(com.wiris.util.telemetry.TelemetryLoggerImpl.LEVEL_KEY,com.wiris.util.telemetry.TelemetryLoggerImpl.levelToString(messageLevel));
			parameters.set(com.wiris.util.telemetry.TelemetryLoggerImpl.MESSAGE_KEY,text);
			var message = new com.wiris.util.telemetry.Message(com.wiris.util.telemetry.TelemetryLoggerImpl.LOGGING_TOPIC,parameters);
			this.service.sendMessage(message);
		}
	}
	,log: function(text,messageLevel) {
		this.logWithParams(text,null,messageLevel);
	}
	,service: null
	,level: null
	,__class__: com.wiris.util.telemetry.TelemetryLoggerImpl
}
com.wiris.util.telemetry.TelemetryService = $hxClasses["com.wiris.util.telemetry.TelemetryService"] = function() { }
com.wiris.util.telemetry.TelemetryService.__name__ = ["com","wiris","util","telemetry","TelemetryService"];
com.wiris.util.telemetry.TelemetryService.prototype = {
	setTestMode: null
	,setLazyMode: null
	,sendMessage: null
	,getBatch: null
	,__class__: com.wiris.util.telemetry.TelemetryService
}
com.wiris.util.telemetry.TelemetryServiceImpl = $hxClasses["com.wiris.util.telemetry.TelemetryServiceImpl"] = function(url,apiKey,deploymentId) {
	this.lazyMode = false;
	this.testMode = false;
	this.batchSize = 0;
	this.url = url;
	this.apiKey = apiKey;
	this.deploymentId = deploymentId;
	this.messages = new Array();
	this.pendingRequests = new Hash();
	this.requestData = new Hash();
	this.requestMessages = com.wiris.util.telemetry.TelemetryServiceImpl.populateRequestErrors();
	this.sender = new com.wiris.util.telemetry.Sender(deploymentId,null,this.getUserId());
	this.session = new com.wiris.util.telemetry.Session(null);
	this.logger = new com.wiris.util.telemetry.TelemetryLoggerImpl(this,com.wiris.util.telemetry.LoggingLevel.DEBUG);
};
com.wiris.util.telemetry.TelemetryServiceImpl.__name__ = ["com","wiris","util","telemetry","TelemetryServiceImpl"];
com.wiris.util.telemetry.TelemetryServiceImpl.__interfaces__ = [com.wiris.util.sys.HttpConnectionListener,com.wiris.util.telemetry.TelemetryService];
com.wiris.util.telemetry.TelemetryServiceImpl.populateRequestErrors = function() {
	var hash = new Hash();
	hash.set(com.wiris.util.telemetry.TelemetryServiceImpl.STATUS_SUCCESS + "",com.wiris.util.telemetry.TelemetryServiceImpl.MESSAGE_SUCCESS);
	hash.set(com.wiris.util.telemetry.TelemetryServiceImpl.STATUS_CLIENT_ERROR + "",com.wiris.util.telemetry.TelemetryServiceImpl.MESSAGE_CLIENT_ERROR);
	hash.set(com.wiris.util.telemetry.TelemetryServiceImpl.STATUS_REDIRECTION + "",com.wiris.util.telemetry.TelemetryServiceImpl.MESSAGE_REDIRECTION);
	hash.set(com.wiris.util.telemetry.TelemetryServiceImpl.STATUS_PAYLOAD_TOO_LARGE + "",com.wiris.util.telemetry.TelemetryServiceImpl.MESSAGE_PAYLOAD_TOO_LARGE);
	hash.set(com.wiris.util.telemetry.TelemetryServiceImpl.STATUS_LIMIT_EXCEEDED + "",com.wiris.util.telemetry.TelemetryServiceImpl.MESSAGE_LIMIT_EXCEEDED);
	hash.set(com.wiris.util.telemetry.TelemetryServiceImpl.STATUS_SERVER_ERROR + "",com.wiris.util.telemetry.TelemetryServiceImpl.MESSAGE_SERVER_ERROR);
	return hash;
}
com.wiris.util.telemetry.TelemetryServiceImpl.prototype = {
	getSender: function() {
		return this.sender;
	}
	,onHTTPStatus: function(status,id) {
		var connection = this.pendingRequests.get(id);
		var reqData = this.requestData.get(id);
		var text = this.requestMessages.get(status + "");
		if(text == null) text = com.wiris.util.telemetry.TelemetryServiceImpl.MESSAGE_UNKNOWN;
		if(status >= com.wiris.util.telemetry.TelemetryServiceImpl.STATUS_SERVER_ERROR || status == com.wiris.util.telemetry.TelemetryServiceImpl.STATUS_LIMIT_EXCEEDED) {
			this.logger.log(text,com.wiris.util.telemetry.LoggingLevel.WARNING);
			connection.request(true);
		} else if(status >= com.wiris.util.telemetry.TelemetryServiceImpl.STATUS_CLIENT_ERROR) {
			if(status == com.wiris.util.telemetry.TelemetryServiceImpl.STATUS_PAYLOAD_TOO_LARGE) {
				var messages = com.wiris.util.json.JSon.getArray(reqData.get(com.wiris.util.telemetry.TelemetryServiceImpl.BODY_MESSAGES_KEY));
				var _g = 0;
				while(_g < messages.length) {
					var obj = messages[_g];
					++_g;
					var message = obj;
					this.sendMessage(message);
				}
			}
			this.pendingRequests.remove(id);
			this.requestData.remove(id);
			this.logger.log(text,com.wiris.util.telemetry.LoggingLevel.ERROR);
		} else if(status > com.wiris.util.telemetry.TelemetryServiceImpl.STATUS_SUCCESS && status < com.wiris.util.telemetry.TelemetryServiceImpl.STATUS_REDIRECTION) {
			this.pendingRequests.remove(id);
			this.requestData.remove(id);
		}
	}
	,onHTTPError: function(error,service) {
	}
	,onHTTPData: function(res,id) {
	}
	,makeRequestImpl: function(connection,postData) {
		connection.setPostData(postData);
		connection.request(true);
	}
	,makeRequest: function(body) {
		if(this.testMode) body.set(com.wiris.util.telemetry.TelemetryServiceImpl.BODY_TEST_KEY,com.wiris.util.telemetry.TelemetryServiceImpl.BODY_TEST_VALUE);
		var hash = this.newHttpConnection();
		var id = com.wiris.util.type.HashUtils.getKeys(hash)[0];
		var connection = hash.get(id);
		var serializedBody = com.wiris.util.json.JSon.encode(body);
		this.makeRequestImpl(connection,serializedBody);
		this.requestData.set(id,body);
		this.pendingRequests.set(id,connection);
	}
	,newHttpConnection: function() {
		var hash = new Hash();
		var uuid = com.wiris.system.UUIDUtils.generateV4();
		var httpConnection = new com.wiris.util.sys.HttpConnection(this.url,uuid,this);
		httpConnection.setHeader(com.wiris.util.telemetry.TelemetryServiceImpl.HEADER_API_KEY_KEY,this.apiKey);
		httpConnection.setHeader(com.wiris.util.telemetry.TelemetryServiceImpl.HEADER_CONTENT_TYPE_KEY,com.wiris.util.telemetry.TelemetryServiceImpl.HEADER_CONTENT_TYPE_VALUE);
		hash.set(uuid,httpConnection);
		return hash;
	}
	,getBatch: function() {
		if(this.messages.length > 0) {
			var req = new Hash();
			var options = new Hash();
			options.set("url",this.url);
			var headers = new Hash();
			headers.set(com.wiris.util.telemetry.TelemetryServiceImpl.HEADER_API_KEY_KEY,this.apiKey);
			headers.set(com.wiris.util.telemetry.TelemetryServiceImpl.HEADER_CONTENT_TYPE_KEY,com.wiris.util.telemetry.TelemetryServiceImpl.HEADER_CONTENT_TYPE_VALUE);
			var body = new Hash();
			body.set(com.wiris.util.telemetry.TelemetryServiceImpl.BODY_MESSAGES_KEY,com.wiris.util.telemetry.Message.toHashArray(this.messages));
			body.set(com.wiris.util.telemetry.TelemetryServiceImpl.BODY_SENDER_KEY,this.sender.toHash());
			body.set(com.wiris.util.telemetry.TelemetryServiceImpl.BODY_SESSION_KEY,this.session.toHash());
			var serializedBody = com.wiris.util.json.JSon.encode(body);
			req.set(com.wiris.util.telemetry.TelemetryServiceImpl.OPTIONS_KEY,options);
			req.set(com.wiris.util.telemetry.TelemetryServiceImpl.HEADERS_KEY,headers);
			req.set(com.wiris.util.telemetry.TelemetryServiceImpl.BODY_KEY,serializedBody);
			return req;
		} else return null;
	}
	,sendBatch: function(batch) {
		var body = new Hash();
		body.set(com.wiris.util.telemetry.TelemetryServiceImpl.BODY_MESSAGES_KEY,com.wiris.util.telemetry.Message.toHashArray(batch));
		body.set(com.wiris.util.telemetry.TelemetryServiceImpl.BODY_SENDER_KEY,this.sender.toHash());
		body.set(com.wiris.util.telemetry.TelemetryServiceImpl.BODY_SESSION_KEY,this.session.toHash());
		this.makeRequest(body);
	}
	,getUserId: function() {
		var localUserId = com.wiris.system.LocalStorage.getItem(com.wiris.util.telemetry.TelemetryServiceImpl.LOCAL_USER_ID);
		if(localUserId == null) {
			localUserId = com.wiris.system.UUIDUtils.generateV4();
			com.wiris.system.LocalStorage.setItem(com.wiris.util.telemetry.TelemetryServiceImpl.LOCAL_USER_ID,localUserId);
		}
		return localUserId;
	}
	,getBatchSize: function() {
		return (this.getBaseSize() + this.batchSize) * 1.1;
	}
	,getBaseSize: function() {
		return this.sender.serialize().length + this.session.serialize().length;
	}
	,sendMessage: function(message) {
		var messageSize = message.serialize().length;
		var totalSize = messageSize + this.getBaseSize();
		var actualSize = messageSize + this.getBatchSize();
		if(totalSize < com.wiris.util.telemetry.TelemetryServiceImpl.BATCH_MAX_SIZE) {
			if(this.lazyMode) {
				if(actualSize > com.wiris.util.telemetry.TelemetryServiceImpl.BATCH_MAX_SIZE) {
					this.sendBatch(this.messages);
					com.wiris.util.type.Arrays.clear(this.messages);
					this.session.incrementPageBy(1);
					this.batchSize = 0;
				}
				this.messages.push(message);
				this.batchSize += messageSize;
			} else {
				var array = new Array();
				array.push(message);
				this.sendBatch(array);
			}
		}
	}
	,setLazyMode: function(lazyMode) {
		this.lazyMode = lazyMode;
	}
	,setTestMode: function(testMode) {
		this.testMode = testMode;
	}
	,lazyMode: null
	,testMode: null
	,messageMaxSize: null
	,batchSize: null
	,deploymentId: null
	,url: null
	,apiKey: null
	,logger: null
	,session: null
	,sender: null
	,messages: null
	,requestMessages: null
	,requestData: null
	,pendingRequests: null
	,__class__: com.wiris.util.telemetry.TelemetryServiceImpl
}
com.wiris.util.type.Arrays = $hxClasses["com.wiris.util.type.Arrays"] = function() {
};
com.wiris.util.type.Arrays.__name__ = ["com","wiris","util","type","Arrays"];
com.wiris.util.type.Arrays.newIntArray = function(length,initValue) {
	var data = new Array();
	--length;
	while(length >= 0) {
		data[length] = initValue;
		--length;
	}
	return data;
}
com.wiris.util.type.Arrays.isNotEmpty = function(array) {
	return array != null && array.length > 0;
}
com.wiris.util.type.Arrays.getOrDefault = function(array,index,defaultValue) {
	if(array != null && index >= 0 && index < array.length) return array[index]; else return defaultValue;
}
com.wiris.util.type.Arrays.indexOfElement = function(array,element) {
	var i = 0;
	var n = array.length;
	while(i < n) {
		if(array[i] != null && array[i] == element) return i;
		++i;
	}
	return -1;
}
com.wiris.util.type.Arrays.fromIterator = function(iterator) {
	var array = new Array();
	while(iterator.hasNext()) array.push(iterator.next());
	return array;
}
com.wiris.util.type.Arrays.fromCSV = function(s) {
	var words = s.split(",");
	var i = 0;
	while(i < words.length) {
		var w = StringTools.trim(words[i]);
		if(w.length > 0) {
			words[i] = w;
			++i;
		} else words.splice(i,1);
	}
	return words;
}
com.wiris.util.type.Arrays.toIntArray = function(array) {
	var result = new Array();
	var it = HxOverrides.iter(array);
	while(it.hasNext()) {
		var value = Std.parseInt(it.next());
		result.push(value);
	}
	return result;
}
com.wiris.util.type.Arrays.arrayIntToSystemArray = function(array) {
	var vector = new Array();
	var _g1 = 0, _g = array.length;
	while(_g1 < _g) {
		var i = _g1++;
		vector[i] = array[i];
	}
	return vector;
}
com.wiris.util.type.Arrays.contains = function(array,element) {
	return com.wiris.util.type.Arrays.indexOfElement(array,element) >= 0;
}
com.wiris.util.type.Arrays.indexOfElementArray = function(array,element) {
	var i;
	var _g1 = 0, _g = array.length;
	while(_g1 < _g) {
		var i1 = _g1++;
		if(array[i1] != null && array[i1] == element) return i1;
	}
	return -1;
}
com.wiris.util.type.Arrays.indexOfElementInt = function(array,element) {
	var i;
	var _g1 = 0, _g = array.length;
	while(_g1 < _g) {
		var i1 = _g1++;
		if(array[i1] == element) return i1;
	}
	return -1;
}
com.wiris.util.type.Arrays.containsArray = function(array,element) {
	return com.wiris.util.type.Arrays.indexOfElementArray(array,element) >= 0;
}
com.wiris.util.type.Arrays.containsInt = function(array,element) {
	return com.wiris.util.type.Arrays.indexOfElementInt(array,element) >= 0;
}
com.wiris.util.type.Arrays.clear = function(a) {
	var i = a.length - 1;
	while(i >= 0) {
		HxOverrides.remove(a,a[i]);
		i--;
	}
}
com.wiris.util.type.Arrays.sort = function(elements,comparator) {
	com.wiris.util.type.Arrays.quicksort(elements,0,elements.length - 1,comparator);
}
com.wiris.util.type.Arrays.insertSorted = function(a,e) {
	com.wiris.util.type.Arrays.insertSortedImpl(a,e,false);
}
com.wiris.util.type.Arrays.insertSortedSet = function(a,e) {
	com.wiris.util.type.Arrays.insertSortedImpl(a,e,true);
}
com.wiris.util.type.Arrays.insertSortedImpl = function(a,e,set) {
	var imin = 0;
	var imax = a.length;
	while(imin < imax) {
		var imid = (imax + imin) / 2 | 0;
		var cmp = Reflect.compare(a[imid],e);
		if(cmp == 0) {
			if(set) return; else {
				imin = imid;
				imax = imid;
			}
		} else if(cmp < 0) imin = imid + 1; else imax = imid;
	}
	a.splice(imin,0,e);
}
com.wiris.util.type.Arrays.binarySearch = function(array,key) {
	var imin = 0;
	var imax = array.length;
	while(imin < imax) {
		var imid = (imin + imax) / 2 | 0;
		var cmp = Reflect.compare(array[imid],key);
		if(cmp == 0) return imid; else if(cmp < 0) imin = imid + 1; else imax = imid;
	}
	return -1;
}
com.wiris.util.type.Arrays.copyArray = function(a) {
	var b = new Array();
	var i = HxOverrides.iter(a);
	while(i.hasNext()) b.push(i.next());
	return b;
}
com.wiris.util.type.Arrays.addAll = function(baseArray,additionArray) {
	var i = HxOverrides.iter(additionArray);
	while(i.hasNext()) baseArray.push(i.next());
}
com.wiris.util.type.Arrays.quicksort = function(elements,lower,higher,comparator) {
	if(lower < higher) {
		var p = com.wiris.util.type.Arrays.partition(elements,lower,higher,comparator);
		com.wiris.util.type.Arrays.quicksort(elements,lower,p - 1,comparator);
		com.wiris.util.type.Arrays.quicksort(elements,p + 1,higher,comparator);
	}
}
com.wiris.util.type.Arrays.partition = function(elements,lower,higher,comparator) {
	var pivot = elements[higher];
	var i = lower - 1;
	var j = lower;
	while(j < higher) {
		if(comparator.compare(pivot,elements[j]) > 0) {
			i++;
			if(i != j) {
				var swapper = elements[i];
				elements[i] = elements[j];
				elements[j] = swapper;
			}
		}
		j++;
	}
	if(comparator.compare(elements[i + 1],elements[higher]) > 0) {
		var finalSwap = elements[i + 1];
		elements[i + 1] = elements[higher];
		elements[higher] = finalSwap;
	}
	return i + 1;
}
com.wiris.util.type.Arrays.firstElement = function(elements) {
	return elements[0];
}
com.wiris.util.type.Arrays.lastElement = function(elements) {
	return elements[elements.length - 1];
}
com.wiris.util.type.Arrays.intersectSorted = function(a,b) {
	if(a == null) return b == null?null:com.wiris.util.type.Arrays.copyArray(b); else if(b == null) return com.wiris.util.type.Arrays.copyArray(a); else {
		var v = new Array();
		var i = 0;
		var j = 0;
		while(i < a.length && j < b.length) {
			var cmp = Reflect.compare(a[i],b[j]);
			if(cmp == 0) {
				v.push(a[i]);
				i++;
				j++;
			} else if(cmp < 0) i++; else j++;
		}
		return v;
	}
}
com.wiris.util.type.Arrays.difference = function(a,b) {
	var v = new Array();
	if(a == null) return v; else if(b == null) return com.wiris.util.type.Arrays.copyArray(a);
	var it = HxOverrides.iter(a);
	while(it.hasNext()) {
		var e = it.next();
		if(com.wiris.util.type.Arrays.indexOfElement(b,e) < 0) v.push(e);
	}
	return v;
}
com.wiris.util.type.Arrays.arrayUnion = function(baseArray,unionArray) {
	var it = HxOverrides.iter(unionArray);
	while(it.hasNext()) {
		var n = it.next();
		if(!com.wiris.system.ArrayEx.contains(baseArray,n)) baseArray.push(n);
	}
}
com.wiris.util.type.Arrays.equalAsSets = function(a,b) {
	if(a == null || b == null) return a == b;
	if(a.length == b.length) {
		var it = HxOverrides.iter(b);
		while(it.hasNext()) {
			var t = it.next();
			if(!com.wiris.system.ArrayEx.contains(a,t)) return false;
		}
		return true;
	}
	return false;
}
com.wiris.util.type.Arrays.prototype = {
	__class__: com.wiris.util.type.Arrays
}
com.wiris.util.type.HashUtils = $hxClasses["com.wiris.util.type.HashUtils"] = function() {
};
com.wiris.util.type.HashUtils.__name__ = ["com","wiris","util","type","HashUtils"];
com.wiris.util.type.HashUtils.putAll = function(hash1,hash2) {
	var iterator = hash1.keys();
	while(iterator.hasNext()) {
		var key = iterator.next();
		var value = hash1.get(key);
		hash2.set(key,value);
	}
}
com.wiris.util.type.HashUtils.filterByParam = function(array,paramName,param) {
	var _g1 = 0, _g = array.length;
	while(_g1 < _g) {
		var i = _g1++;
		var item = array[i];
		if(item.get(paramName) == param) return item;
	}
	return null;
}
com.wiris.util.type.HashUtils.exists = function(obj,key) {
	return obj.get(key) != null;
}
com.wiris.util.type.HashUtils.getKey = function(value,hash) {
	var i = hash.keys();
	while(i.hasNext()) {
		var key = i.next();
		if(hash.get(key) == value) return key;
	}
	return null;
}
com.wiris.util.type.HashUtils.getKeys = function(hash) {
	var i = hash.keys();
	var keys = new Array();
	while(i.hasNext()) keys.push(i.next());
	return keys;
}
com.wiris.util.type.HashUtils.prototype = {
	__class__: com.wiris.util.type.HashUtils
}
com.wiris.util.type.IconUtils = $hxClasses["com.wiris.util.type.IconUtils"] = function() { }
com.wiris.util.type.IconUtils.__name__ = ["com","wiris","util","type","IconUtils"];
com.wiris.util.type.IconUtils.newFromNameAndType = function(name,type) {
	var icon = null;
	if(name == null || type == null) return null;
	if(type == com.wiris.util.type.IconUtils.TYPE_MATERIAL) icon = new com.wiris.util.ui.MaterialIcon(name); else if(type == com.wiris.util.type.IconUtils.TYPE_SVG) icon = new com.wiris.util.ui.SVGIcon(name); else if(type == com.wiris.util.type.IconUtils.TYPE_IMAGE) icon = com.wiris.util.ui.ImageIcon.newFromFile(name);
	return icon;
}
com.wiris.util.type.IntegerTools = $hxClasses["com.wiris.util.type.IntegerTools"] = function() { }
com.wiris.util.type.IntegerTools.__name__ = ["com","wiris","util","type","IntegerTools"];
com.wiris.util.type.IntegerTools.sign = function(value) {
	return value >= 0?1:-1;
}
com.wiris.util.type.IntegerTools.signBool = function(value) {
	return value?1:-1;
}
com.wiris.util.type.IntegerTools.max = function(x,y) {
	return x > y?x:y;
}
com.wiris.util.type.IntegerTools.min = function(x,y) {
	return x < y?x:y;
}
com.wiris.util.type.IntegerTools.clamp = function(x,a,b) {
	return com.wiris.util.type.IntegerTools.min(com.wiris.util.type.IntegerTools.max(a,x),b);
}
com.wiris.util.type.IntegerTools.inRange = function(x,start,end) {
	return x >= start && x < end;
}
com.wiris.util.type.IntegerTools.isInt = function(x) {
	return new EReg("^[\\+\\-]?\\d+$","").match(x);
}
com.wiris.util.type.SortedHash = $hxClasses["com.wiris.util.type.SortedHash"] = function() {
	Hash.call(this);
	this.sortedKeys = new Array();
};
com.wiris.util.type.SortedHash.__name__ = ["com","wiris","util","type","SortedHash"];
com.wiris.util.type.SortedHash.__super__ = Hash;
com.wiris.util.type.SortedHash.prototype = $extend(Hash.prototype,{
	push: function(key,value,limit) {
		var idx = com.wiris.util.type.Arrays.indexOfElement(this.sortedKeys,key);
		if(idx >= 0) {
			this.sortedKeys.splice(idx,1);
			this.sortedKeys.push(key);
		} else {
			if(limit >= 0 && this.sortedKeys.length > 0 && this.sortedKeys.length >= limit) this.remove(this.sortedKeys[0]);
			this.set(key,value);
		}
	}
	,getSortedKeys: function() {
		return this.sortedKeys;
	}
	,keys: function() {
		return HxOverrides.iter(this.sortedKeys);
	}
	,remove: function(key) {
		HxOverrides.remove(this.sortedKeys,key);
		return Hash.prototype.remove.call(this,key);
	}
	,set: function(key,value) {
		var i = com.wiris.util.type.Arrays.indexOfElement(this.sortedKeys,key);
		if(i >= 0) this.sortedKeys[i] = key; else this.sortedKeys.push(key);
		Hash.prototype.set.call(this,key,value);
	}
	,sortedKeys: null
	,__class__: com.wiris.util.type.SortedHash
});
com.wiris.util.type.Stack = $hxClasses["com.wiris.util.type.Stack"] = function() {
	this.array = new Array();
	this.size = 0;
};
com.wiris.util.type.Stack.__name__ = ["com","wiris","util","type","Stack"];
com.wiris.util.type.Stack.prototype = {
	empty: function() {
		return this.size == 0;
	}
	,push: function(e) {
		this.array.push(e);
		this.size++;
	}
	,pop: function() {
		if(this.size > 0) {
			this.size--;
			this.array.pop();
		}
	}
	,top: function() {
		return this.array[this.size - 1];
	}
	,size: null
	,array: null
	,__class__: com.wiris.util.type.Stack
}
com.wiris.util.type.StringUtils = $hxClasses["com.wiris.util.type.StringUtils"] = function() { }
com.wiris.util.type.StringUtils.__name__ = ["com","wiris","util","type","StringUtils"];
com.wiris.util.type.StringUtils.stripAccents = function(s) {
	var sb = new StringBuf();
	var i = com.wiris.system.Utf8.getIterator(s);
	while(i.hasNext()) sb.b += Std.string(com.wiris.util.xml.WCharacterBase.stripAccent(i.next()));
	return sb.b;
}
com.wiris.util.type.StringUtils.padLeftZeros = function(s,length) {
	if(s == null || s.length >= length) return s;
	var stringBuf = new StringBuf();
	var _g = s.length;
	while(_g < length) {
		var i = _g++;
		stringBuf.b += Std.string("0");
	}
	stringBuf.b += Std.string(s);
	return stringBuf.b;
}
com.wiris.util.type.StringUtils.compareIgnoringAccents = function(a,b) {
	return com.wiris.util.type.StringUtils.stripAccents(a) == com.wiris.util.type.StringUtils.stripAccents(b);
}
com.wiris.util.type.StringUtils.contains = function(a,b) {
	return a.indexOf(b) != -1;
}
com.wiris.util.type.StringUtils.slice = function(s,beginIndex,endIndex) {
	var stringLength = s.length;
	if(beginIndex < 0) beginIndex = com.wiris.util.type.IntegerTools.max(0,stringLength + beginIndex); else if(beginIndex > stringLength) beginIndex = stringLength;
	if(endIndex < 0) endIndex = com.wiris.util.type.IntegerTools.max(0,s.length + endIndex); else if(endIndex > stringLength) endIndex = stringLength;
	var span = com.wiris.util.type.IntegerTools.max(0,endIndex - beginIndex);
	return HxOverrides.substr(s,beginIndex,span);
}
com.wiris.util.type.StringUtils.compareVersions = function(a,b) {
	var va = a.split(".");
	var vb = b.split(".");
	var i = 0;
	while(i < va.length) {
		var na = Std.parseInt(va[i]);
		var nb = 0;
		if(i < vb.length) nb = Std.parseInt(vb[i]);
		var n = na - nb;
		if(n != 0) return n;
		i++;
	}
	while(i < vb.length) {
		var nb = Std.parseInt(vb[i]);
		if(nb != 0) return -nb;
		i++;
	}
	return 0;
}
com.wiris.util.type.StringUtils.append = function(a,b) {
	return a + b;
}
com.wiris.util.type.StringUtils.replaceFirstOccurrence = function(s,target,replacement) {
	if(s == null || s == "") return s;
	return com.wiris.util.type.StringUtils.replaceOccurrenceImpl(s,target,replacement,s.indexOf(target));
}
com.wiris.util.type.StringUtils.replaceLastOccurrence = function(s,target,replacement) {
	if(s == null || s == "") return s;
	return com.wiris.util.type.StringUtils.replaceOccurrenceImpl(s,target,replacement,s.lastIndexOf(target));
}
com.wiris.util.type.StringUtils.replaceOccurrenceImpl = function(s,target,replacement,pos) {
	if(pos == -1) return s;
	var sb = new StringBuf();
	sb.b += HxOverrides.substr(s,0,pos);
	sb.b += Std.string(replacement);
	sb.b += HxOverrides.substr(s,pos + target.length,s.length - pos - target.length);
	return sb.b;
}
com.wiris.util.type.StringUtils.countOccurrences = function(s,target) {
	if(s == null || target == null || target == "") return -1;
	var count = 0;
	var pos = s.indexOf(target);
	while(pos != -1) {
		count++;
		pos = s.indexOf(target,pos + target.length);
	}
	return count;
}
com.wiris.util.type.StringUtils.splitOnGreek = function(text) {
	var length = com.wiris.system.Utf8.getLength(text);
	if(length == 0) return null;
	var runs = null;
	var runStartIndex = 0;
	var currentIndex = 0;
	var currentGreekRun = true;
	var it = com.wiris.system.Utf8.getIterator(text);
	while(it.hasNext()) {
		var codepoint = it.next();
		var isGreek = com.wiris.util.xml.WCharacterBase.isGreek(codepoint);
		if(isGreek && !currentGreekRun) {
			if(runs == null) runs = new Array();
			var runText = com.wiris.system.Utf8.sub(text,runStartIndex,currentIndex - runStartIndex);
			runs.push(runText);
		}
		if(isGreek) {
			if(runs == null) runs = new Array();
			runs.push(com.wiris.system.Utf8.uchr(codepoint));
		}
		if(isGreek != currentGreekRun) {
			runStartIndex = currentIndex;
			currentGreekRun = isGreek;
		}
		currentIndex += 1;
	}
	if(runs != null && !currentGreekRun) {
		var runText = com.wiris.system.Utf8.sub(text,runStartIndex,currentIndex - runStartIndex);
		runs.push(runText);
	}
	return runs;
}
com.wiris.util.ui.Action = $hxClasses["com.wiris.util.ui.Action"] = function(id,command) {
	this.id = id;
	this.command = command;
	this.parameters = new Hash();
};
com.wiris.util.ui.Action.__name__ = ["com","wiris","util","ui","Action"];
com.wiris.util.ui.Action.prototype = {
	setParameter: function(key,value) {
		this.parameters.set(key,value);
	}
	,getParameter: function(key) {
		return this.parameters.get(key);
	}
	,setCommand: function(command) {
		if(command == null) this.command = ""; else this.command = command;
	}
	,getParameters: function() {
		return this.parameters;
	}
	,getCommand: function() {
		return this.command;
	}
	,setId: function(id) {
		this.id = id;
	}
	,getId: function() {
		return this.id;
	}
	,parameters: null
	,command: null
	,id: null
	,__class__: com.wiris.util.ui.Action
}
com.wiris.util.ui.Icon = $hxClasses["com.wiris.util.ui.Icon"] = function() { }
com.wiris.util.ui.Icon.__name__ = ["com","wiris","util","ui","Icon"];
com.wiris.util.ui.Icon.prototype = {
	getIconType: null
	,getIconName: null
	,__class__: com.wiris.util.ui.Icon
}
com.wiris.util.ui.ImageIcon = $hxClasses["com.wiris.util.ui.ImageIcon"] = function() {
	this.filePath = null;
	this.cropBounds = null;
	this.base64Data = null;
};
com.wiris.util.ui.ImageIcon.__name__ = ["com","wiris","util","ui","ImageIcon"];
com.wiris.util.ui.ImageIcon.__interfaces__ = [com.wiris.util.ui.Icon];
com.wiris.util.ui.ImageIcon.newFromFile = function(filePath) {
	var icon = new com.wiris.util.ui.ImageIcon();
	icon.setFilePath(filePath);
	return icon;
}
com.wiris.util.ui.ImageIcon.newFromData = function(base64Data) {
	var icon = new com.wiris.util.ui.ImageIcon();
	icon.setBase64Data(base64Data);
	return icon;
}
com.wiris.util.ui.ImageIcon.prototype = {
	toString: function() {
		if(this.hasData()) return "ImageIcon loaded from data";
		return "ImageIcon loaded from " + this.filePath;
	}
	,hasData: function() {
		return this.base64Data != null;
	}
	,setBase64Data: function(base64Data) {
		this.base64Data = base64Data;
	}
	,setCropBounds: function(cropBounds) {
		this.cropBounds = cropBounds;
	}
	,setFilePath: function(filePath) {
		this.filePath = filePath;
	}
	,getBase64Data: function() {
		return this.base64Data;
	}
	,getBytes: function() {
		if(this.base64Data == null) return null;
		var b64 = new haxe.BaseCode(haxe.io.Bytes.ofString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"));
		return b64.decodeBytes(haxe.io.Bytes.ofString(this.base64Data));
	}
	,getCropBounds: function() {
		return this.cropBounds;
	}
	,getFilePath: function() {
		return this.filePath;
	}
	,getIconType: function() {
		return com.wiris.util.type.IconUtils.TYPE_IMAGE;
	}
	,getIconName: function() {
		return this.filePath;
	}
	,base64Data: null
	,cropBounds: null
	,filePath: null
	,__class__: com.wiris.util.ui.ImageIcon
}
com.wiris.util.ui.MaterialIcon = $hxClasses["com.wiris.util.ui.MaterialIcon"] = function(iconName) {
	this.iconName = iconName;
};
com.wiris.util.ui.MaterialIcon.__name__ = ["com","wiris","util","ui","MaterialIcon"];
com.wiris.util.ui.MaterialIcon.__interfaces__ = [com.wiris.util.ui.Icon];
com.wiris.util.ui.MaterialIcon.prototype = {
	toString: function() {
		return "MaterialIcon " + this.iconName;
	}
	,getIconType: function() {
		return com.wiris.util.type.IconUtils.TYPE_MATERIAL;
	}
	,getIconName: function() {
		return this.iconName;
	}
	,iconName: null
	,__class__: com.wiris.util.ui.MaterialIcon
}
com.wiris.util.ui.SVGIcon = $hxClasses["com.wiris.util.ui.SVGIcon"] = function(iconName) {
	this.external = false;
	this.iconName = iconName;
};
com.wiris.util.ui.SVGIcon.__name__ = ["com","wiris","util","ui","SVGIcon"];
com.wiris.util.ui.SVGIcon.__interfaces__ = [com.wiris.util.ui.Icon];
com.wiris.util.ui.SVGIcon.prototype = {
	isExternal: function() {
		return this.external;
	}
	,setExternal: function(external) {
		this.external = external;
	}
	,toString: function() {
		return "SVGIcon " + this.iconName;
	}
	,getFilePath: function() {
		return com.wiris.util.ui.SVGIcon.filePath;
	}
	,getIconType: function() {
		return com.wiris.util.type.IconUtils.TYPE_SVG;
	}
	,getIconName: function() {
		return this.iconName;
	}
	,external: null
	,iconName: null
	,__class__: com.wiris.util.ui.SVGIcon
}
com.wiris.util.ui.Style = $hxClasses["com.wiris.util.ui.Style"] = function(component) {
	this.component = component;
	this.margin = com.wiris.util.type.Arrays.newIntArray(4,com.wiris.util.ui.Style.SIZE_AUTO);
	this.padding = com.wiris.util.type.Arrays.newIntArray(4,com.wiris.util.ui.Style.SIZE_AUTO);
	this.borderSize = com.wiris.util.type.Arrays.newIntArray(4,com.wiris.util.ui.Style.SIZE_AUTO);
	this.borderColor = new Array();
	this.borderColor.push(null);
	this.borderColor.push(null);
	this.borderColor.push(null);
	this.borderColor.push(null);
	this.width = com.wiris.util.ui.Style.SIZE_AUTO;
	this.height = com.wiris.util.ui.Style.SIZE_AUTO;
	this.widthUnit = com.wiris.util.ui.Style.SIZE_UNIT_PX;
	this.heightUnit = com.wiris.util.ui.Style.SIZE_UNIT_PX;
	this.minWidth = com.wiris.util.ui.Style.SIZE_AUTO;
	this.minHeight = com.wiris.util.ui.Style.SIZE_AUTO;
	this.minWidthUnit = com.wiris.util.ui.Style.SIZE_UNIT_PX;
	this.minHeightUnit = com.wiris.util.ui.Style.SIZE_UNIT_PX;
	this.maxWidth = com.wiris.util.ui.Style.SIZE_AUTO;
	this.maxHeight = com.wiris.util.ui.Style.SIZE_AUTO;
	this.maxWidthUnit = com.wiris.util.ui.Style.SIZE_UNIT_PX;
	this.maxHeightUnit = com.wiris.util.ui.Style.SIZE_UNIT_PX;
	this.backgroundColor = null;
	this.foregroundColor = null;
	this.horizontalAlignment = com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_LEFT;
	this.verticalAlignment = com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_MIDDLE;
	this.zIndex = 0;
	this.lineHeight = com.wiris.util.ui.Style.SIZE_AUTO;
	this.letterSpacing = 0;
	this.fontWeight = null;
	this.fontSize = com.wiris.util.ui.Style.SIZE_AUTO;
	this.textTransform = null;
	this.left = com.wiris.util.ui.Style.SIZE_AUTO;
	this.top = com.wiris.util.ui.Style.SIZE_AUTO;
	this.sizeUnit = com.wiris.util.ui.Style.SIZE_UNIT_PX;
};
com.wiris.util.ui.Style.__name__ = ["com","wiris","util","ui","Style"];
com.wiris.util.ui.Style.prototype = {
	setBackgroundImageUrl: function(url) {
		this.backgroundImageUrl = url;
		this.component.changeStyle();
		return this;
	}
	,getBackgroundImageUrl: function() {
		return this.backgroundImageUrl;
	}
	,getFontSize: function() {
		return this.fontSize;
	}
	,setFontSize: function(size) {
		this.fontSize = size;
		this.component.changeStyle();
		return this;
	}
	,getTextTransform: function() {
		return this.textTransform;
	}
	,setTextTransform: function(textTransform) {
		this.textTransform = textTransform;
		this.component.changeStyle();
		return this;
	}
	,getFontWeight: function() {
		return this.fontWeight;
	}
	,setFontWeight: function(weight) {
		this.fontWeight = weight;
		this.component.changeStyle();
		return this;
	}
	,getLetterSpacing: function() {
		return this.letterSpacing;
	}
	,setLetterSpacing: function(letterSpacing) {
		this.letterSpacing = letterSpacing;
		this.component.changeStyle();
		return this;
	}
	,getLineHeight: function() {
		return this.lineHeight;
	}
	,setLineHeight: function(lineHeight) {
		this.lineHeight = lineHeight;
		this.component.changeStyle();
		return this;
	}
	,setZIndex: function(zIndex) {
		this.zIndex = zIndex;
		this.component.changeStyle();
		return this;
	}
	,getZIndex: function() {
		return this.zIndex;
	}
	,setVerticalAlignment: function(verticalAlignment) {
		this.verticalAlignment = verticalAlignment;
		return this;
	}
	,getVerticalAlignment: function() {
		return this.verticalAlignment;
	}
	,setHorizontalAlignment: function(horizontalAlignment) {
		this.horizontalAlignment = horizontalAlignment;
		return this;
	}
	,getHorizontalAlignment: function() {
		return this.horizontalAlignment;
	}
	,setForegroundColor: function(foregroundColor) {
		this.foregroundColor = foregroundColor;
		this.component.changeStyle();
		return this;
	}
	,getForegroundColor: function() {
		return this.foregroundColor;
	}
	,setBackgroundColor: function(backgroundColor) {
		this.backgroundColor = backgroundColor;
		this.component.changeStyle();
		return this;
	}
	,getBackgroundColor: function() {
		return this.backgroundColor;
	}
	,setMaxHeightWithUnit: function(maxHeight,maxHeightUnit) {
		this.maxHeight = maxHeight;
		this.maxHeightUnit = maxHeightUnit;
		this.component.changeStyle();
		return this;
	}
	,setMaxHeight: function(maxHeight) {
		return this.setMaxHeightWithUnit(maxHeight,com.wiris.util.ui.Style.SIZE_UNIT_PX);
	}
	,getMaxHeightUnit: function() {
		return this.maxHeightUnit;
	}
	,getMaxHeight: function() {
		return this.maxHeight;
	}
	,setMaxWidthWithUnit: function(maxWidth,maxWidthUnit) {
		this.maxWidth = maxWidth;
		this.maxWidthUnit = maxWidthUnit;
		this.component.changeStyle();
		return this;
	}
	,getMaxWidthUnit: function() {
		return this.maxWidthUnit;
	}
	,setMaxWidth: function(maxWidth) {
		return this.setMaxWidthWithUnit(maxWidth,com.wiris.util.ui.Style.SIZE_UNIT_PX);
	}
	,getMaxWidth: function() {
		return this.maxWidth;
	}
	,setMinHeightWithUnit: function(minHeight,minHeightUnit) {
		this.minHeight = minHeight;
		this.minHeightUnit = minHeightUnit;
		this.component.changeStyle();
		return this;
	}
	,getMinHeightUnit: function() {
		return this.minHeightUnit;
	}
	,setMinHeight: function(minHeight) {
		return this.setMinHeightWithUnit(minHeight,com.wiris.util.ui.Style.SIZE_UNIT_PX);
	}
	,getMinHeight: function() {
		return this.minHeight;
	}
	,setMinWidthWithUnit: function(minWidth,minWidthUnit) {
		this.minWidth = minWidth;
		this.minWidthUnit = minWidthUnit;
		this.component.changeStyle();
		return this;
	}
	,getMinWidthUnit: function() {
		return this.minWidthUnit;
	}
	,setMinWidth: function(minWidth) {
		return this.setMinWidthWithUnit(minWidth,com.wiris.util.ui.Style.SIZE_UNIT_PX);
	}
	,getMinWidth: function() {
		return this.minWidth;
	}
	,setHeightWithUnit: function(height,heightUnit) {
		this.height = height;
		this.heightUnit = heightUnit;
		this.component.changeStyle();
		return this;
	}
	,getHeightUnit: function() {
		return this.heightUnit;
	}
	,setHeight: function(height) {
		return this.setHeightWithUnit(height,com.wiris.util.ui.Style.SIZE_UNIT_PX);
	}
	,getHeight: function() {
		return this.height;
	}
	,setWidthWithUnit: function(width,widthUnit) {
		this.width = width;
		this.widthUnit = widthUnit;
		this.component.changeStyle();
		return this;
	}
	,getWidthUnit: function() {
		return this.widthUnit;
	}
	,setWidth: function(width) {
		return this.setWidthWithUnit(width,com.wiris.util.ui.Style.SIZE_UNIT_PX);
	}
	,getWidth: function() {
		return this.width;
	}
	,setBorderColor: function(top,right,bottom,left) {
		this.borderColor[0] = top;
		this.borderColor[1] = right;
		this.borderColor[2] = bottom;
		this.borderColor[3] = left;
		this.component.changeStyle();
		return this;
	}
	,getBorderColor: function() {
		return this.borderColor;
	}
	,setPadding: function(top,right,bottom,left) {
		this.padding[0] = top;
		this.padding[1] = right;
		this.padding[2] = bottom;
		this.padding[3] = left;
		this.component.changeStyle();
		return this;
	}
	,setMargin: function(top,right,bottom,left) {
		this.margin[0] = top;
		this.margin[1] = right;
		this.margin[2] = bottom;
		this.margin[3] = left;
		this.component.changeStyle();
		return this;
	}
	,setBorderSize: function(top,right,bottom,left) {
		this.borderSize[0] = top;
		this.borderSize[1] = right;
		this.borderSize[2] = bottom;
		this.borderSize[3] = left;
		this.component.changeStyle();
		return this;
	}
	,removeCSSVariable: function(variableName) {
		if(this.cssVariables != null) this.cssVariables.remove(variableName);
	}
	,getCSSVariablesNames: function() {
		if(this.cssVariables != null) return this.cssVariables.keys();
		return null;
	}
	,getCSSVariable: function(variableName) {
		if(this.cssVariables != null && this.cssVariables.exists(variableName)) return this.cssVariables.get(variableName);
		return null;
	}
	,setCSSVariable: function(variableName,variableValue) {
		if(this.cssVariables == null) this.cssVariables = new Hash();
		this.cssVariables.set(variableName,variableValue);
		this.component.changeStyle();
		return this;
	}
	,getPadding: function() {
		return this.padding;
	}
	,getMargin: function() {
		return this.margin;
	}
	,getBorderSize: function() {
		return this.borderSize;
	}
	,sizeUnit: null
	,right: null
	,bottom: null
	,top: null
	,left: null
	,fontSize: null
	,textTransform: null
	,fontWeight: null
	,letterSpacing: null
	,lineHeight: null
	,cssVariables: null
	,zIndex: null
	,verticalAlignment: null
	,horizontalAlignment: null
	,backgroundImageUrl: null
	,foregroundColor: null
	,backgroundColor: null
	,maxHeightUnit: null
	,maxWidthUnit: null
	,maxHeight: null
	,maxWidth: null
	,minHeightUnit: null
	,minWidthUnit: null
	,minHeight: null
	,minWidth: null
	,heightUnit: null
	,widthUnit: null
	,height: null
	,width: null
	,borderColor: null
	,borderSize: null
	,padding: null
	,margin: null
	,component: null
	,__class__: com.wiris.util.ui.Style
}
if(!com.wiris.util.ui.async) com.wiris.util.ui.async = {}
com.wiris.util.ui.async.CloseOnHoverTask = $hxClasses["com.wiris.util.ui.async.CloseOnHoverTask"] = function(contextMenuButton) {
	this.contextMenuButton = contextMenuButton;
	new com.wiris.util.sys.TimerProxy(100,true,this);
};
com.wiris.util.ui.async.CloseOnHoverTask.__name__ = ["com","wiris","util","ui","async","CloseOnHoverTask"];
com.wiris.util.ui.async.CloseOnHoverTask.__interfaces__ = [com.wiris.util.sys.TimerTask];
com.wiris.util.ui.async.CloseOnHoverTask.prototype = {
	run: function(timer) {
		if(this.contextMenuButton.isOpenOnHover()) {
			if(!this.contextMenuButton.isChild(this.contextMenuButton.getApplication().getHoveredComponent())) this.contextMenuButton.hideContextPanel();
		}
	}
	,contextMenuButton: null
	,__class__: com.wiris.util.ui.async.CloseOnHoverTask
}
com.wiris.util.ui.async.FocusTask = $hxClasses["com.wiris.util.ui.async.FocusTask"] = function(focus) {
	this.focus = focus;
	new com.wiris.util.sys.TimerProxy(100,true,this);
};
com.wiris.util.ui.async.FocusTask.__name__ = ["com","wiris","util","ui","async","FocusTask"];
com.wiris.util.ui.async.FocusTask.__interfaces__ = [com.wiris.util.sys.TimerTask];
com.wiris.util.ui.async.FocusTask.prototype = {
	run: function(timer) {
		this.focus.requestFocus();
	}
	,focus: null
	,__class__: com.wiris.util.ui.async.FocusTask
}
com.wiris.util.ui.component.Chip = $hxClasses["com.wiris.util.ui.component.Chip"] = function() {
	com.wiris.util.ui.component.Component.call(this);
	this.addClass(com.wiris.util.ui.component.Chip.CLASS_CHIP);
	this.getStyle().setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_CENTER);
	this.icon = null;
	this.text = null;
	this.tooltip = null;
	this.activationAction = null;
	this.activationController = new com.wiris.util.ui.controller.ActivationController(this,false);
};
com.wiris.util.ui.component.Chip.__name__ = ["com","wiris","util","ui","component","Chip"];
com.wiris.util.ui.component.Chip.newWithText = function(text,activationAction,listener) {
	var chip = new com.wiris.util.ui.component.Chip();
	chip.setText(text);
	chip.setActivationAction(activationAction);
	chip.addActionListener(listener);
	return chip;
}
com.wiris.util.ui.component.Chip.newWithIcon = function(tooltip,icon,activationAction,listener) {
	var chip = new com.wiris.util.ui.component.Chip();
	chip.setTooltip(tooltip);
	chip.setIcon(icon);
	chip.setActivationAction(activationAction);
	chip.addActionListener(listener);
	return chip;
}
com.wiris.util.ui.component.Chip.newWithTextAndIcon = function(text,icon,activationAction,listener) {
	var chip = new com.wiris.util.ui.component.Chip();
	chip.setText(text);
	chip.setIcon(icon);
	chip.setActivationAction(activationAction);
	chip.addActionListener(listener);
	return chip;
}
com.wiris.util.ui.component.Chip.__super__ = com.wiris.util.ui.component.Component;
com.wiris.util.ui.component.Chip.prototype = $extend(com.wiris.util.ui.component.Component.prototype,{
	activate: function() {
		if(this.getActivationAction() != null) this.performAction(this.getActivationAction());
	}
	,setActivationAction: function(action) {
		this.activationAction = action;
	}
	,setText: function(text) {
		this.text = text;
		this.changeState();
	}
	,setTooltip: function(tooltip) {
		this.tooltip = tooltip;
		this.changeState();
	}
	,setIcon: function(icon) {
		this.icon = icon;
		this.changeState();
	}
	,getActivationAction: function() {
		return this.activationAction;
	}
	,getText: function() {
		if(this.text == null && this.getTooltip() == null) throw "Due to accessibility reasons, all buttons must have text or a tooltip. Failing button: " + Std.string(this);
		return this.text;
	}
	,getTooltip: function() {
		return this.tooltip;
	}
	,getIcon: function() {
		return this.icon;
	}
	,activationController: null
	,activationAction: null
	,text: null
	,tooltip: null
	,icon: null
	,__class__: com.wiris.util.ui.component.Chip
});
com.wiris.util.ui.component.ActionChip = $hxClasses["com.wiris.util.ui.component.ActionChip"] = function() {
	com.wiris.util.ui.component.Chip.call(this);
	this.addClass(com.wiris.util.ui.component.ActionChip.CLASS_ACTION_CHIP);
};
com.wiris.util.ui.component.ActionChip.__name__ = ["com","wiris","util","ui","component","ActionChip"];
com.wiris.util.ui.component.ActionChip.newActionChip = function(text,changeAction,listener) {
	var actionChip = new com.wiris.util.ui.component.ActionChip();
	actionChip.setText(text);
	actionChip.setActivationAction(changeAction);
	actionChip.addActionListener(listener);
	return actionChip;
}
com.wiris.util.ui.component.ActionChip.__super__ = com.wiris.util.ui.component.Chip;
com.wiris.util.ui.component.ActionChip.prototype = $extend(com.wiris.util.ui.component.Chip.prototype,{
	__class__: com.wiris.util.ui.component.ActionChip
});
com.wiris.util.ui.component.ActionLabel = $hxClasses["com.wiris.util.ui.component.ActionLabel"] = function() {
	com.wiris.util.ui.component.Label.call(this);
	this.addClass(com.wiris.util.ui.component.ActionLabel.CLASS_ACTION_LABEL);
	this.activationAction = null;
	this.activationController = new com.wiris.util.ui.controller.ActivationController(this,true);
	this.activationController.setActivateOnRelease(false);
};
com.wiris.util.ui.component.ActionLabel.__name__ = ["com","wiris","util","ui","component","ActionLabel"];
com.wiris.util.ui.component.ActionLabel.newWithText = function(text,activationAction,listener) {
	var label = new com.wiris.util.ui.component.ActionLabel();
	label.setText(text);
	label.setActivationAction(activationAction);
	label.addActionListener(listener);
	return label;
}
com.wiris.util.ui.component.ActionLabel.__super__ = com.wiris.util.ui.component.Label;
com.wiris.util.ui.component.ActionLabel.prototype = $extend(com.wiris.util.ui.component.Label.prototype,{
	activate: function() {
		if(this.getActivationAction() != null) this.performAction(this.getActivationAction());
	}
	,getActivationController: function() {
		return this.activationController;
	}
	,setActivationAction: function(action) {
		this.activationAction = action;
	}
	,getActivationAction: function() {
		return this.activationAction;
	}
	,activationController: null
	,activationAction: null
	,__class__: com.wiris.util.ui.component.ActionLabel
});
com.wiris.util.ui.component.ActivityContainer = $hxClasses["com.wiris.util.ui.component.ActivityContainer"] = function() {
	com.wiris.util.ui.component.Panel.call(this);
	this.addClass(com.wiris.util.ui.component.ActivityContainer.CLASS_ACTIVITY_CONTAINER);
	this.activityChanging = false;
	this.currentActivity = null;
	this.activityHistory = new Array();
	this.registeredActivities = new Hash();
};
com.wiris.util.ui.component.ActivityContainer.__name__ = ["com","wiris","util","ui","component","ActivityContainer"];
com.wiris.util.ui.component.ActivityContainer.__super__ = com.wiris.util.ui.component.Panel;
com.wiris.util.ui.component.ActivityContainer.prototype = $extend(com.wiris.util.ui.component.Panel.prototype,{
	hasPreviousActivity: function(activity) {
		return this.activityHistory.length > 0 && (this.currentActivity == activity || com.wiris.system.ArrayEx.contains(this.activityHistory,activity) && this.activityHistory[0] != activity);
	}
	,returnToPreviousActivity: function() {
		if(!this.isActivityChanging()) {
			if(this.activityHistory.length > 0) {
				this.setActivityChanging(true);
				this.currentActivity = this.activityHistory.splice(this.activityHistory.length - 1,1)[0];
				this.changeState();
				this.setActivityChanging(false);
				return true;
			}
		}
		return false;
	}
	,getHistory: function() {
		return this.activityHistory;
	}
	,showActivity: function(activityId) {
		if(!this.isActivityChanging()) {
			if(this.registeredActivities.exists(activityId)) {
				if(this.currentActivity == null || !(this.currentActivity.getId() == activityId)) {
					if(this.currentActivity != null) this.setActivityChanging(true);
					if(this.currentActivity != null) this.activityHistory.push(this.currentActivity);
					this.currentActivity = this.registeredActivities.get(activityId);
					this.changeState();
					this.setActivityChanging(false);
					return true;
				}
			}
		}
		return false;
	}
	,getCurrentActivity: function() {
		return this.currentActivity;
	}
	,createActivity: function(activityId) {
		var activity = new com.wiris.util.ui.component.ActivityPanel();
		this.registerActivity(activity,activityId);
		return activity;
	}
	,registerActivity: function(activity,activityId) {
		this.addComponentImpl(activity);
		activity.setActivityContainer(this);
		this.registeredActivities.set(activityId,activity);
	}
	,isActivityChanging: function() {
		return this.activityChanging;
	}
	,setActivityChanging: function(activityChanging) {
		this.activityChanging = activityChanging;
	}
	,getRegisteredActivities: function() {
		return this.registeredActivities;
	}
	,newFromActivityArray: function(activities) {
		var activityContainer = new com.wiris.util.ui.component.ActivityContainer();
		var i = activities.keys();
		while(i.hasNext()) {
			var activityId = i.next();
			activityContainer.registerActivity(activities.get(activityId),activityId);
		}
		return activityContainer;
	}
	,registeredActivities: null
	,activityHistory: null
	,currentActivity: null
	,activityChanging: null
	,__class__: com.wiris.util.ui.component.ActivityContainer
});
com.wiris.util.ui.component.Button = $hxClasses["com.wiris.util.ui.component.Button"] = function() {
	com.wiris.util.ui.component.Component.call(this);
	this.addClass(com.wiris.util.ui.component.Button.CLASS_BUTTON);
	this.getStyle().setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_CENTER);
	this.normalIcon = null;
	this.hoverIcon = null;
	this.tooltip = null;
	this.text = null;
	this.activationAction = null;
	this.textIsHtml = false;
	this.activationController = new com.wiris.util.ui.controller.ActivationController(this,true);
};
com.wiris.util.ui.component.Button.__name__ = ["com","wiris","util","ui","component","Button"];
com.wiris.util.ui.component.Button.newWithText = function(text,activationAction,listener) {
	var button = new com.wiris.util.ui.component.Button();
	button.setText(text);
	button.setActivationAction(activationAction);
	button.addActionListener(listener);
	return button;
}
com.wiris.util.ui.component.Button.newWithHtml = function(html,activationAction,listener) {
	var button = com.wiris.util.ui.component.Button.newWithText(html,activationAction,listener);
	button.textIsHtml = true;
	return button;
}
com.wiris.util.ui.component.Button.newWithIcon = function(tooltip,icon,activationAction,listener) {
	var button = new com.wiris.util.ui.component.Button();
	button.setTooltip(tooltip);
	button.setNormalIcon(icon);
	button.setActivationAction(activationAction);
	button.addActionListener(listener);
	return button;
}
com.wiris.util.ui.component.Button.newWithTextAndIcon = function(text,icon,activationAction,listener) {
	var button = new com.wiris.util.ui.component.Button();
	button.setText(text);
	button.setNormalIcon(icon);
	button.setActivationAction(activationAction);
	button.addActionListener(listener);
	return button;
}
com.wiris.util.ui.component.Button.__super__ = com.wiris.util.ui.component.Component;
com.wiris.util.ui.component.Button.prototype = $extend(com.wiris.util.ui.component.Component.prototype,{
	updateIconClass: function() {
		if(this.normalIcon == null && this.hoverIcon == null) this.removeClass(com.wiris.util.ui.component.Button.CLASS_BUTTON_ICON); else this.addClass(com.wiris.util.ui.component.Button.CLASS_BUTTON_ICON);
	}
	,toString: function() {
		var buffer = new StringBuf();
		buffer.b += Std.string("Button with:");
		buffer.b += Std.string("\r\nText: ");
		buffer.b += Std.string(this.text);
		buffer.b += Std.string("\r\nNormal icon: ");
		buffer.b += Std.string(this.normalIcon);
		buffer.b += Std.string("\r\nHover icon: ");
		buffer.b += Std.string(this.hoverIcon);
		buffer.b += Std.string("\r\nTooltip: ");
		buffer.b += Std.string(this.tooltip);
		return buffer.b;
	}
	,activate: function() {
		if(this.getActivationAction() != null) this.performAction(this.getActivationAction());
	}
	,setText: function(text) {
		this.text = text;
		if(text == null) this.removeClass(com.wiris.util.ui.component.Button.CLASS_BUTTON_TEXT); else this.addClass(com.wiris.util.ui.component.Button.CLASS_BUTTON_TEXT);
		this.changeState();
	}
	,setTooltip: function(tooltip) {
		this.tooltip = tooltip;
		this.changeState();
	}
	,setActivationAction: function(action) {
		this.activationAction = action;
	}
	,setHoverIcon: function(icon) {
		this.hoverIcon = icon;
		this.updateIconClass();
		this.changeState();
	}
	,setNormalIcon: function(icon) {
		this.normalIcon = icon;
		this.updateIconClass();
		this.changeState();
	}
	,isTextIsHtml: function() {
		return this.textIsHtml;
	}
	,getText: function() {
		if(this.text == null && this.getTooltip() == null) throw "Due to accessibility reasons, all buttons must have text or a tooltip. Failing button: " + Std.string(this);
		return this.text;
	}
	,getTooltip: function() {
		return this.tooltip;
	}
	,getActivationController: function() {
		return this.activationController;
	}
	,getActivationAction: function() {
		return this.activationAction;
	}
	,getHoverIcon: function() {
		return this.hoverIcon;
	}
	,getNormalIcon: function() {
		return this.normalIcon;
	}
	,getIcon: function() {
		var hoverIcon = this.getHoverIcon();
		return hoverIcon != null && this.hasHover()?hoverIcon:this.getNormalIcon();
	}
	,textIsHtml: null
	,activationController: null
	,activationAction: null
	,text: null
	,tooltip: null
	,hoverIcon: null
	,normalIcon: null
	,__class__: com.wiris.util.ui.component.Button
});
com.wiris.util.ui.component.ButtonPanel = $hxClasses["com.wiris.util.ui.component.ButtonPanel"] = function() {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.addClass(com.wiris.util.ui.component.ButtonPanel.CLASS_BUTTON_PANEL);
	new com.wiris.util.ui.controller.ActivationController(this,true);
};
com.wiris.util.ui.component.ButtonPanel.__name__ = ["com","wiris","util","ui","component","ButtonPanel"];
com.wiris.util.ui.component.ButtonPanel.newBasicButtonPanel = function(primary,label,secondary,activationAction) {
	return com.wiris.util.ui.component.ButtonPanel.newIndentedButtonPanel(primary,label,secondary,0,activationAction);
}
com.wiris.util.ui.component.ButtonPanel.newIndentedButtonPanel = function(primary,label,secondary,indentationLevel,activationAction) {
	return com.wiris.util.ui.component.ButtonPanel.newCustomButtonPanel(primary,label == null?null:com.wiris.util.ui.component.Label.newWithText(label),secondary,indentationLevel,activationAction);
}
com.wiris.util.ui.component.ButtonPanel.newCustomButtonPanel = function(primary,label,secondary,indentationLevel,activationAction) {
	var buttonPanel = new com.wiris.util.ui.component.ButtonPanel();
	com.wiris.util.ui.component.ButtonPanel.configureButtonPanel(buttonPanel,primary,label,secondary,indentationLevel,activationAction);
	return buttonPanel;
}
com.wiris.util.ui.component.ButtonPanel.configureButtonPanel = function(buttonPanel,primary,label,secondary,indentationLevel,activationAction) {
	if(primary != null) buttonPanel.addComponent(primary);
	if(label != null) buttonPanel.addComponent(label);
	if(secondary != null) {
		buttonPanel.addComponent(secondary);
		secondary.getStyle().setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_RIGHT);
	}
	buttonPanel.getStyle().setCSSVariable("--indentation-level",indentationLevel + "");
	buttonPanel.setActivationAction(activationAction);
}
com.wiris.util.ui.component.ButtonPanel.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.util.ui.component.ButtonPanel.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	activate: function() {
		if(this.activationAction != null) this.performAction(this.activationAction);
	}
	,setTooltip: function(tooltip) {
		this.tooltip = tooltip;
		this.changeState();
	}
	,getTooltip: function() {
		return this.tooltip;
	}
	,setActivationAction: function(activationAction) {
		this.activationAction = activationAction;
	}
	,getActivationAction: function() {
		return this.activationAction;
	}
	,activationAction: null
	,tooltip: null
	,__class__: com.wiris.util.ui.component.ButtonPanel
});
if(!com.wiris.util.ui.controller) com.wiris.util.ui.controller = {}
com.wiris.util.ui.controller.Selectable = $hxClasses["com.wiris.util.ui.controller.Selectable"] = function() { }
com.wiris.util.ui.controller.Selectable.__name__ = ["com","wiris","util","ui","controller","Selectable"];
com.wiris.util.ui.controller.Selectable.prototype = {
	setSelected: null
	,isSelected: null
	,setChangeAction: null
	,getChangeAction: null
	,getSelectableId: null
	,getComponent: null
	,setSelectionController: null
	,getSelectionController: null
	,__class__: com.wiris.util.ui.controller.Selectable
}
com.wiris.util.ui.component.CheckBox = $hxClasses["com.wiris.util.ui.component.CheckBox"] = function(id) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.util.ui.component.CheckBox.CLASS_CHECKBOX);
	this.selectableId = id;
	this.text = null;
	this.helperText = null;
	this.changeAction = null;
	this.textPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.textPanel.addClass(com.wiris.util.ui.component.CheckBox.CLASS_CHECKBOX_BUTTON_TEXT);
	this.helperTextPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.helperTextPanel.addClass(com.wiris.util.ui.component.CheckBox.CLASS_CHECKBOX_BUTTON_HELPER_TEXT);
	this.selectionController = new com.wiris.util.ui.controller.SelectionController(id);
	this.selectionController.addSelectable(this,false);
};
com.wiris.util.ui.component.CheckBox.__name__ = ["com","wiris","util","ui","component","CheckBox"];
com.wiris.util.ui.component.CheckBox.__interfaces__ = [com.wiris.util.ui.controller.Selectable,com.wiris.util.ui.component.Field];
com.wiris.util.ui.component.CheckBox.newCheckBox = function(text,id,changeAction,listener) {
	var checkBox = new com.wiris.util.ui.component.CheckBox(id);
	checkBox.setText(text);
	checkBox.setChangeAction(changeAction);
	checkBox.addActionListener(listener);
	return checkBox;
}
com.wiris.util.ui.component.CheckBox.newWithHelperText = function(text,helperText,id,changeAction,listener) {
	var checkBox = new com.wiris.util.ui.component.CheckBox(id);
	checkBox.setText(text);
	checkBox.setHelperText(helperText);
	checkBox.setChangeAction(changeAction);
	checkBox.addActionListener(listener);
	return checkBox;
}
com.wiris.util.ui.component.CheckBox.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.util.ui.component.CheckBox.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	setSelected: function(selected) {
		this.selectionController.setSelected(this.selectableId,selected);
	}
	,isSelected: function() {
		return this.selectionController.isSelected(this.selectableId);
	}
	,getSelectableId: function() {
		return this.selectableId;
	}
	,getHelperTextPanel: function() {
		return this.helperTextPanel;
	}
	,setHelperTextPanel: function(helperTextPanel) {
		this.helperTextPanel = helperTextPanel;
	}
	,getTextPanel: function() {
		return this.textPanel;
	}
	,setTextPanel: function(textPanel) {
		this.textPanel = textPanel;
	}
	,getComponent: function() {
		return this;
	}
	,setSelectionController: function(selectionController) {
		var selected = this.selectionController.isSelected(this.selectableId);
		if(this.selectionController != null) this.selectionController.removeSelectable(this.selectableId);
		this.selectionController = selectionController;
		this.selectionController.addSelectable(this,selected);
	}
	,getSelectionController: function() {
		return this.selectionController;
	}
	,setValue: function(value) {
		this.setSelected(!(value == "false"));
	}
	,getValue: function() {
		if(this.isSelected()) return "true";
		return "false";
	}
	,setChangeAction: function(changeAction) {
		this.changeAction = changeAction;
	}
	,getChangeAction: function() {
		return this.changeAction;
	}
	,setHelperText: function(helperText) {
		this.helperText = helperText;
		if(this.helperTextLabel == null) {
			this.helperTextLabel = new com.wiris.util.ui.component.Label();
			this.addComponent(this.helperTextPanel);
			this.helperTextPanel.addComponent(this.helperTextLabel);
		}
		this.helperTextLabel.setText(helperText);
	}
	,getHelperText: function() {
		return this.helperText;
	}
	,setText: function(text) {
		this.text = text;
		if(this.textLabel == null) {
			this.textLabel = new com.wiris.util.ui.component.Label();
			this.addComponent(this.textPanel);
			this.textPanel.addComponent(this.textLabel);
		}
		this.textLabel.setText(text);
	}
	,getText: function() {
		return this.text;
	}
	,selectionController: null
	,changeAction: null
	,helperTextPanel: null
	,helperTextLabel: null
	,helperText: null
	,textPanel: null
	,textLabel: null
	,text: null
	,selectableId: null
	,__class__: com.wiris.util.ui.component.CheckBox
});
com.wiris.util.ui.component.ChoiceChip = $hxClasses["com.wiris.util.ui.component.ChoiceChip"] = function(id) {
	com.wiris.util.ui.component.Chip.call(this);
	this.addClass(com.wiris.util.ui.component.ChoiceChip.CLASS_CHOICE_CHIP);
	this.selectableId = id;
	this.changeAction = null;
	this.selectionController = new com.wiris.util.ui.controller.SelectionController(id);
	this.selectionController.addSelectable(this,false);
};
com.wiris.util.ui.component.ChoiceChip.__name__ = ["com","wiris","util","ui","component","ChoiceChip"];
com.wiris.util.ui.component.ChoiceChip.__interfaces__ = [com.wiris.util.ui.controller.Selectable,com.wiris.util.ui.component.Field];
com.wiris.util.ui.component.ChoiceChip.newChoiceChip = function(text,id,changeAction,listener) {
	var choiceChip = new com.wiris.util.ui.component.ChoiceChip(id);
	choiceChip.setText(text);
	choiceChip.setChangeAction(changeAction);
	choiceChip.addActionListener(listener);
	return choiceChip;
}
com.wiris.util.ui.component.ChoiceChip.__super__ = com.wiris.util.ui.component.Chip;
com.wiris.util.ui.component.ChoiceChip.prototype = $extend(com.wiris.util.ui.component.Chip.prototype,{
	setSelected: function(selected) {
		this.selectionController.setSelected(this.selectableId,selected);
	}
	,isSelected: function() {
		return this.selectionController.isSelected(this.selectableId);
	}
	,setChangeAction: function(changeAction) {
		this.changeAction = changeAction;
	}
	,getChangeAction: function() {
		return this.changeAction;
	}
	,getSelectableId: function() {
		return this.selectableId;
	}
	,getComponent: function() {
		return this;
	}
	,setSelectionController: function(selectionController) {
		var selected = this.selectionController.isSelected(this.selectableId);
		if(this.selectionController != null) this.selectionController.removeSelectable(this.selectableId);
		this.selectionController = selectionController;
		this.selectionController.addSelectable(this,selected);
	}
	,getSelectionController: function() {
		return this.selectionController;
	}
	,setValue: function(value) {
		this.setSelected(!(value == "false"));
	}
	,getValue: function() {
		if(this.isSelected()) return "true";
		return "false";
	}
	,selectionController: null
	,changeAction: null
	,selectableId: null
	,__class__: com.wiris.util.ui.component.ChoiceChip
});
com.wiris.util.ui.interaction.FocusListener = $hxClasses["com.wiris.util.ui.interaction.FocusListener"] = function() { }
com.wiris.util.ui.interaction.FocusListener.__name__ = ["com","wiris","util","ui","interaction","FocusListener"];
com.wiris.util.ui.interaction.FocusListener.prototype = {
	focusLost: null
	,focusGained: null
	,__class__: com.wiris.util.ui.interaction.FocusListener
}
com.wiris.util.ui.component.ContextPanelButton = $hxClasses["com.wiris.util.ui.component.ContextPanelButton"] = function() {
	com.wiris.util.ui.component.Button.call(this);
	this.addClass(com.wiris.util.ui.component.ContextPanelButton.CLASS_CONTEXT_PANEL_BUTTON);
	var contextPanel = this.createContextPanel();
	contextPanel.setParent(this);
	contextPanel.setVisible(false);
	this.addFocusListener(this);
};
com.wiris.util.ui.component.ContextPanelButton.__name__ = ["com","wiris","util","ui","component","ContextPanelButton"];
com.wiris.util.ui.component.ContextPanelButton.__interfaces__ = [com.wiris.util.ui.interaction.FocusListener];
com.wiris.util.ui.component.ContextPanelButton.__super__ = com.wiris.util.ui.component.Button;
com.wiris.util.ui.component.ContextPanelButton.prototype = $extend(com.wiris.util.ui.component.Button.prototype,{
	activate: function() {
		if(this.getContextPanel().isVisible()) this.hideContextPanel(); else this.showContextPanel();
	}
	,hideContextPanel: function() {
		this.getContextPanel().setVisible(false);
		this.setKeyScrollingEnabled(true);
		this.removeClass(com.wiris.util.ui.component.ContextPanelButton.CLASS_CONTEXT_MENU_BUTTON_PRESSED);
	}
	,showContextPanel: function() {
		this.requestFocus();
		this.getContextPanel().getStyle().setMinWidth(this.getComputedStyle().getOffsetWidth());
		this.getContextPanel().setVisible(true);
		this.setKeyScrollingEnabled(false);
		this.addClass(com.wiris.util.ui.component.ContextPanelButton.CLASS_CONTEXT_MENU_BUTTON_PRESSED);
	}
	,focusLost: function(e) {
		var target = e.getTarget();
		if(this.isEnabled() && !this.isChild(target)) this.hideContextPanel();
	}
	,focusGained: function(e) {
	}
	,isContextPanelVisible: function() {
		return this.getContextPanel().isVisible();
	}
	,getContextPanel: function() {
		return this.contextPanel;
	}
	,isChild: function(component) {
		return component == this.getContextPanel() || this.getContextPanel().isChild(component);
	}
	,getComponentsByClassName: function(className) {
		var result = com.wiris.util.ui.component.Button.prototype.getComponentsByClassName.call(this,className);
		var partialResult = this.getContextPanel().getComponentsByClassName(className);
		var i = HxOverrides.iter(partialResult);
		while(i.hasNext()) result.push(i.next());
		return result;
	}
	,getComponentById: function(id) {
		var component = this.getContextPanel().getComponentById(id);
		if(component != null) return component;
		return com.wiris.util.ui.component.Button.prototype.getComponentById.call(this,id);
	}
	,getChildren: function() {
		var children = new Array();
		children.push(this.getContextPanel());
		return children;
	}
	,getHoveredComponent: function() {
		var component = this.getContextPanel().getHoveredComponent();
		if(component != null) return component;
		return com.wiris.util.ui.component.Button.prototype.getHoveredComponent.call(this);
	}
	,createContextPanel: function() {
		this.contextPanel = new com.wiris.util.ui.component.ContextPanel();
		this.contextPanel.addClass(com.wiris.util.ui.component.ContextPanelButton.CLASS_CONTEXT_PANEL_BUTTON_DIALOG);
		return this.contextPanel;
	}
	,contextPanel: null
	,__class__: com.wiris.util.ui.component.ContextPanelButton
});
com.wiris.util.ui.component.ColorPicker = $hxClasses["com.wiris.util.ui.component.ColorPicker"] = function() {
	com.wiris.util.ui.component.ContextPanelButton.call(this);
	this.getContextPanel().setAnchor(com.wiris.util.ui.component.ContextPanel.ANCHOR_TOP | com.wiris.util.ui.component.ContextPanel.ANCHOR_LEFT);
	this.getContextPanel().setParentAnchor(com.wiris.util.ui.component.ContextPanel.ANCHOR_BOTTOM | com.wiris.util.ui.component.ContextPanel.ANCHOR_LEFT);
	this.getContextPanel().setOpenAnimationMode(com.wiris.util.ui.component.ContextPanel.ANIMATION_MODE_LEFT_TO_RIGHT | com.wiris.util.ui.component.ContextPanel.ANIMATION_MODE_TOP_TO_BOTTOM);
	this.buttons = new Hash();
	this.lastSelectedButton = null;
	this.changingColors = false;
	this.addClass(com.wiris.util.ui.component.ColorPicker.CLASS_COLOR_PICKER).addClass(com.wiris.util.ui.component.Button.CLASS_BUTTON_OUTLINED);
	this.changeAction = null;
	this.color = com.wiris.util.graphics.Color.fromText("black");
	var contextPanel = this.getContextPanel();
	contextPanel.addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_SOLID).addClass(com.wiris.util.ui.component.ColorPicker.CLASS_COLOR_PICKER_DIALOG);
	var tabbedPanel = new com.wiris.util.ui.component.TabbedPanel();
	contextPanel.addComponent(tabbedPanel);
	this.paletteTab = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	tabbedPanel.createTabWithPanel("Palette",null,null,this.paletteTab);
	var materialDesignPalette = this.createPalette(com.wiris.util.ui.component.ColorPicker.PALETTE);
	materialDesignPalette.getStyle().setBorderSize(0,0,1,0);
	this.paletteTab.addComponent(materialDesignPalette);
	this.paletteTab.addComponent(this.createTone(com.wiris.util.ui.component.ColorPicker.RECOMMENDED_PALETTE,com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT));
	var advancedTab = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	advancedTab.getStyle().setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_CENTER);
	tabbedPanel.createTabWithPanel("Advanced",null,null,advancedTab);
	this.colorDisplay = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.colorDisplay.addClass(com.wiris.util.ui.component.ColorPicker.CLASS_COLOR_DISPLAY).addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_SOLID);
	this.colorDisplay.getStyle().setWidth(150).setHeight(150);
	var colorDisplayContainer = com.wiris.util.ui.component.FlowPanel.newWithChild(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT,this.colorDisplay);
	colorDisplayContainer.getStyle().setBorderSize(50,50,50,50);
	advancedTab.addComponent(colorDisplayContainer);
	this.colorForm = new com.wiris.util.ui.component.Form();
	this.colorForm.addField("hex","HEX",null,this.createTextField("hex"));
	this.colorForm.addField("red","Red",null,this.createTextField("red"));
	this.colorForm.addField("green","Green",null,this.createTextField("green"));
	this.colorForm.addField("blue","Blue",null,this.createTextField("blue"));
	advancedTab.addComponent(this.colorForm);
	this.recentTab = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT_WITH_WRAP);
	tabbedPanel.createTabWithPanel("Recent",null,null,this.recentTab);
	this.updateComponents(null);
};
com.wiris.util.ui.component.ColorPicker.__name__ = ["com","wiris","util","ui","component","ColorPicker"];
com.wiris.util.ui.component.ColorPicker.__interfaces__ = [com.wiris.util.ui.component.Field,com.wiris.util.ui.interaction.ActionListener];
com.wiris.util.ui.component.ColorPicker.newWithTooltip = function(tooltip) {
	var colorPicker = new com.wiris.util.ui.component.ColorPicker();
	colorPicker.setTooltip(tooltip);
	return colorPicker;
}
com.wiris.util.ui.component.ColorPicker.newWithIcon = function(icon) {
	var colorPicker = new com.wiris.util.ui.component.ColorPicker();
	colorPicker.setNormalIcon(icon);
	colorPicker.updateComponents(null);
	return colorPicker;
}
com.wiris.util.ui.component.ColorPicker.__super__ = com.wiris.util.ui.component.ContextPanelButton;
com.wiris.util.ui.component.ColorPicker.prototype = $extend(com.wiris.util.ui.component.ContextPanelButton.prototype,{
	actionPerformed: function(e) {
		var action = e.getAction();
		var actionId = action.getId();
		if(com.wiris.util.ui.component.ColorPicker.ACTION_PICK_COLOR_ID == actionId) {
			this.pickColor(com.wiris.util.graphics.Color.fromInt(Std.parseInt(action.getCommand())));
			this.hideContextPanel();
		} else {
			if(this.changingColors) return;
			this.changingColors = true;
			var textField = e.getSource();
			var key = action.getCommand();
			var value = textField.getValue();
			if("hex" == key) {
				if(com.wiris.util.graphics.Color.isValidTextColor(value)) this.pickColorImpl(com.wiris.util.graphics.Color.fromText(value),"hex");
			} else {
				var parsedValue = Std.parseInt(value) + 1;
				--parsedValue;
				if(parsedValue < 0) parsedValue = 0; else if(parsedValue > 255) parsedValue = 255;
				textField.setValue(parsedValue + "");
				var rgb = this.color.getRGB();
				if("red" == key) rgb[0] = parsedValue; else if("green" == key) rgb[1] = parsedValue; else if("blue" == key) rgb[2] = parsedValue;
				this.pickColorImpl(com.wiris.util.graphics.Color.fromRGB(rgb),key);
			}
			this.changingColors = false;
		}
	}
	,focusLost: function(e) {
	}
	,hideContextPanel: function() {
		com.wiris.util.ui.component.ContextPanelButton.prototype.hideContextPanel.call(this);
		if(this.changeAction != null) this.performAction(this.changeAction);
	}
	,getComponent: function() {
		return this;
	}
	,setValue: function(value) {
		this.pickColor(com.wiris.util.graphics.Color.fromText(value));
	}
	,getValue: function() {
		return this.color.toCSSHex();
	}
	,pickColorImpl: function(color,discardedValue) {
		if(color.isEqualTo(this.color)) return;
		this.color = color;
		this.updateComponents(discardedValue);
		this.changeState();
		if(this.changeAction != null) this.performAction(this.changeAction);
	}
	,pickColor: function(color) {
		this.pickColorImpl(color,null);
		com.wiris.util.ui.component.ColorPicker.recentColors.push(this.color.toInt() + "",1,com.wiris.util.ui.component.ColorPicker.PALETTE.length * (com.wiris.util.ui.component.ColorPicker.PALETTE[0].length + 1));
	}
	,setChangeAction: function(action) {
		this.changeAction = action;
	}
	,getColor: function() {
		return this.color;
	}
	,getChangeAction: function() {
		return this.changeAction;
	}
	,activate: function() {
		com.wiris.util.ui.component.ContextPanelButton.prototype.activate.call(this);
		this.updateComponents(null);
	}
	,updateComponents: function(discardedKey) {
		if(this.getIcon() == null) {
			this.getStyle().removeCSSVariable(com.wiris.util.ui.component.ColorPicker.CSS_COLOR_VARIABLE_NAME);
			this.getStyle().setBackgroundColor(this.color);
		} else {
			this.getStyle().setBackgroundColor(null);
			this.getStyle().setCSSVariable(com.wiris.util.ui.component.ColorPicker.CSS_COLOR_VARIABLE_NAME,this.color.toCSSHex());
		}
		if(this.lastSelectedButton != null) this.lastSelectedButton.setText(null);
		this.lastSelectedButton = this.buttons.get("" + this.color.toInt());
		if(this.lastSelectedButton != null) this.lastSelectedButton.setText(com.wiris.util.ui.component.ColorPicker.CHECK_MARK);
		this.colorDisplay.getStyle().setBackgroundColor(this.color);
		var values = new Hash();
		values.set("hex",this.color.toCSSHex());
		var rgb = this.color.getRGB();
		values.set("red",rgb[0] + "");
		values.set("green",rgb[1] + "");
		values.set("blue",rgb[2] + "");
		if(discardedKey != null) values.remove(discardedKey);
		this.colorForm.setValues(values);
		this.recentTab.removeAllComponents();
		var i = HxOverrides.iter(com.wiris.util.ui.component.ColorPicker.recentColors.getSortedKeys());
		while(i.hasNext()) {
			var usedColor = Std.parseInt(i.next());
			var colorButton = this.createColorButton(usedColor);
			if(this.color.toInt() == usedColor) colorButton.setText(com.wiris.util.ui.component.ColorPicker.CHECK_MARK);
			this.recentTab.insertComponentAt(colorButton,0);
		}
	}
	,createTextField: function(key) {
		var textField = new com.wiris.util.ui.component.TextField();
		textField.setChangeAction(new com.wiris.util.ui.Action("changeInput",key));
		textField.addActionListener(this);
		return textField;
	}
	,createColorButton: function(color) {
		var button = new com.wiris.util.ui.component.Button();
		button.setActivationAction(new com.wiris.util.ui.Action(com.wiris.util.ui.component.ColorPicker.ACTION_PICK_COLOR_ID,"" + color));
		button.addActionListener(this);
		var buttonColor = com.wiris.util.graphics.Color.fromInt(color);
		button.setTooltip(buttonColor.toCSSHex());
		button.getStyle().setBackgroundColor(buttonColor).setForegroundColor(buttonColor.getBlackOrWhiteOpposite());
		button.getStyle().setWidth(com.wiris.util.ui.component.ColorPicker.COLOR_BUTTON_SIZE).setHeight(com.wiris.util.ui.component.ColorPicker.COLOR_BUTTON_SIZE);
		return button;
	}
	,createTone: function(tone,direction) {
		var i = 0;
		var toneContainer = new com.wiris.util.ui.component.FlowPanel(direction);
		while(i < tone.length) {
			var colorButton = this.createColorButton(tone[i]);
			toneContainer.addComponent(colorButton);
			this.buttons.set("" + tone[i],colorButton);
			++i;
		}
		return toneContainer;
	}
	,createPalette: function(palette) {
		var container = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
		var i = 0;
		while(i < palette.length) {
			container.addComponent(this.createTone(palette[i],com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM));
			++i;
		}
		return container;
	}
	,recentTab: null
	,changingColors: null
	,colorDisplay: null
	,colorForm: null
	,paletteTab: null
	,lastSelectedButton: null
	,buttons: null
	,color: null
	,changeAction: null
	,__class__: com.wiris.util.ui.component.ColorPicker
});
com.wiris.util.ui.interaction.TouchListener = $hxClasses["com.wiris.util.ui.interaction.TouchListener"] = function() { }
com.wiris.util.ui.interaction.TouchListener.__name__ = ["com","wiris","util","ui","interaction","TouchListener"];
com.wiris.util.ui.interaction.TouchListener.prototype = {
	touchMove: null
	,touchRelease: null
	,touchPress: null
	,__class__: com.wiris.util.ui.interaction.TouchListener
}
com.wiris.util.ui.component.ComponentStateManager = $hxClasses["com.wiris.util.ui.component.ComponentStateManager"] = function(component) {
	this.component = component;
	this.hovered = false;
	this.focused = false;
	com.wiris.util.ui.component.ComponentStateManager.hadKeyboardInteraction = true;
};
com.wiris.util.ui.component.ComponentStateManager.__name__ = ["com","wiris","util","ui","component","ComponentStateManager"];
com.wiris.util.ui.component.ComponentStateManager.__interfaces__ = [com.wiris.util.ui.interaction.TouchListener,com.wiris.util.ui.interaction.KeyListener,com.wiris.util.ui.interaction.FocusListener,com.wiris.util.ui.interaction.MouseListener];
com.wiris.util.ui.component.ComponentStateManager.hadKeyboardInteraction = null;
com.wiris.util.ui.component.ComponentStateManager.prototype = {
	keyType: function(e) {
	}
	,keyRelease: function(e) {
	}
	,keyPress: function(e) {
		if(e.isCtrlLikeModifierPressed() || e.isAltPressed()) return;
		com.wiris.util.ui.component.ComponentStateManager.hadKeyboardInteraction = true;
		if(this.component == e.getTarget()) this.component.addClass(com.wiris.util.ui.component.Component.CLASS_FOCUSED);
	}
	,focusLost: function(e) {
		this.focused = false;
		this.component.removeClass(com.wiris.util.ui.component.Component.CLASS_FOCUSED);
	}
	,focusGained: function(e) {
		this.focused = true;
		if(com.wiris.util.ui.component.ComponentStateManager.hadKeyboardInteraction || js.Boot.__instanceof(this.component,com.wiris.util.ui.component.TextComponent)) this.component.addClass(com.wiris.util.ui.component.Component.CLASS_FOCUSED);
	}
	,touchMove: function(e) {
	}
	,touchRelease: function(e) {
	}
	,touchPress: function(e) {
		com.wiris.util.ui.component.ComponentStateManager.hadKeyboardInteraction = false;
	}
	,mouseExit: function(e) {
		this.hovered = false;
	}
	,mouseEnter: function(e) {
		this.hovered = true;
	}
	,mouseRelease: function(e) {
	}
	,mousePress: function(e) {
		com.wiris.util.ui.component.ComponentStateManager.hadKeyboardInteraction = false;
	}
	,mouseDoubleClick: function(e) {
	}
	,mouseClick: function(e) {
	}
	,hasFocus: function() {
		return this.focused;
	}
	,hasHover: function() {
		return this.hovered;
	}
	,focused: null
	,hovered: null
	,component: null
	,__class__: com.wiris.util.ui.component.ComponentStateManager
}
com.wiris.util.ui.component.CompositeLabel = $hxClasses["com.wiris.util.ui.component.CompositeLabel"] = function() {
	com.wiris.util.ui.component.Label.call(this);
	this.addClass(com.wiris.util.ui.component.CompositeLabel.CLASS_COMPOSITE_LABEL);
	this.labels = new Array();
	this.componentTreeListeners = new Array();
	this.defaultComponentTreeListeners = new Array();
};
com.wiris.util.ui.component.CompositeLabel.__name__ = ["com","wiris","util","ui","component","CompositeLabel"];
com.wiris.util.ui.component.CompositeLabel.newFromLabelArray = function(labels) {
	var label = new com.wiris.util.ui.component.CompositeLabel();
	var _g = 0;
	while(_g < labels.length) {
		var l = labels[_g];
		++_g;
		label.addLabel(l);
	}
	return label;
}
com.wiris.util.ui.component.CompositeLabel.newImportantFromLabelArray = function(labels) {
	var label = com.wiris.util.ui.component.CompositeLabel.newFromLabelArray(labels);
	label.addClass(com.wiris.util.ui.component.Label.CLASS_LABEL_IMPORTANT);
	return label;
}
com.wiris.util.ui.component.CompositeLabel.newHeaderFromLabelArray = function(labels) {
	var label = com.wiris.util.ui.component.CompositeLabel.newFromLabelArray(labels);
	label.addClass(com.wiris.util.ui.component.Label.CLASS_LABEL_HEADER);
	return label;
}
com.wiris.util.ui.component.CompositeLabel.newTinyFromLabelArray = function(labels) {
	var label = com.wiris.util.ui.component.CompositeLabel.newFromLabelArray(labels);
	label.addClass(com.wiris.util.ui.component.Label.CLASS_LABEL_TINY);
	return label;
}
com.wiris.util.ui.component.CompositeLabel.__super__ = com.wiris.util.ui.component.Label;
com.wiris.util.ui.component.CompositeLabel.prototype = $extend(com.wiris.util.ui.component.Label.prototype,{
	removeAllLabels: function() {
		var n = this.labels.length;
		while(n > 0) {
			this.removeLabel(0);
			--n;
		}
	}
	,removeLabel: function(index) {
		var label = this.labels.splice(index,1)[0];
		label.setParent(null);
		label.setChildIndex(-1);
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createComponentTreeEvent(this,com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT_CHILD_REMOVED,label,index,-1));
	}
	,moveLabel: function(index,destination) {
		if(index != destination) {
			var label = this.labels.splice(index,1)[0];
			var newDestination = index < destination?destination - 1:destination;
			this.labels.splice(newDestination,0,label);
			var i = Math.min(index,destination);
			var n = Math.max(index,destination);
			while(i <= n && i < this.labels.length) {
				this.labels[i].setChildIndex(i);
				++i;
			}
			this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createComponentTreeEvent(this,com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT_CHILD_MOVED,label,index,destination));
		}
	}
	,insertLabelAtImpl: function(label,index) {
		var i = this.labels.length - 1;
		while(i >= index) {
			this.labels[i].setChildIndex(i + 1);
			--i;
		}
		this.labels.splice(index,0,label);
		label.setParent(this);
		label.setChildIndex(index);
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createComponentTreeEvent(this,com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT_CHILD_ADDED,label,index,-1));
	}
	,insertLabelAt: function(label,index) {
		this.insertLabelAtImpl(label,index);
	}
	,addLabelImpl: function(label) {
		this.labels.push(label);
		label.setParent(this);
		label.setChildIndex(this.labels.length - 1);
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createComponentTreeEvent(this,com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT_CHILD_ADDED,label,this.labels.length - 1,-1));
	}
	,addLabel: function(label) {
		this.addLabelImpl(label);
	}
	,fireComponentTreeEvent: function(listener,e,componentTreeEventType) {
		if(listener == null) return;
		if(com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT_CHILD_ADDED == componentTreeEventType) listener.childAdded(e); else if(com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT_CHILD_MOVED == componentTreeEventType) listener.childMoved(e); else if(com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT_CHILD_REMOVED == componentTreeEventType) listener.childRemoved(e);
	}
	,fireEvent: function(e) {
		var eventType = e.getEventType();
		if(com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT == eventType) {
			var componentTreeEvent = e;
			var componentTreeEventType = componentTreeEvent.getComponentTreeEventType();
			var i = HxOverrides.iter(this.componentTreeListeners);
			while(i.hasNext() && e.isPropagating()) this.fireComponentTreeEvent(i.next(),componentTreeEvent,componentTreeEventType);
			i = HxOverrides.iter(this.defaultComponentTreeListeners);
			while(i.hasNext() && !e.defaultIsPrevented()) this.fireComponentTreeEvent(i.next(),componentTreeEvent,componentTreeEventType);
		} else com.wiris.util.ui.component.Label.prototype.fireEvent.call(this,e);
	}
	,addDefaultComponentTreeListener: function(listener) {
		this.defaultComponentTreeListeners.push(listener);
		return this;
	}
	,removeComponentTreeListener: function(listener) {
		HxOverrides.remove(this.componentTreeListeners,listener);
		return this;
	}
	,addComponentTreeListener: function(listener) {
		this.componentTreeListeners.push(listener);
		return this;
	}
	,getComponentsByClassName: function(className) {
		var result = com.wiris.util.ui.component.Label.prototype.getComponentsByClassName.call(this,className);
		var i = HxOverrides.iter(this.labels);
		while(i.hasNext()) {
			var label = i.next();
			var partialResult = label.getComponentsByClassName(className);
			var j = HxOverrides.iter(partialResult);
			while(j.hasNext()) result.push(j.next());
		}
		return result;
	}
	,isChild: function(component) {
		if(!js.Boot.__instanceof(component,com.wiris.util.ui.component.Label)) return false;
		var label = component;
		if(com.wiris.system.ArrayEx.contains(this.labels,label)) return true;
		var i = HxOverrides.iter(this.labels);
		while(i.hasNext()) {
			var candidate = i.next();
			if(candidate.isChild(component)) return true;
		}
		return false;
	}
	,getComponentById: function(id) {
		var i = HxOverrides.iter(this.labels);
		while(i.hasNext()) {
			var component = i.next().getComponentById(id);
			if(component != null) return component;
		}
		return com.wiris.util.ui.component.Label.prototype.getComponentById.call(this,id);
	}
	,getHoveredComponent: function() {
		var i = HxOverrides.iter(this.labels);
		while(i.hasNext()) {
			var component = i.next().getHoveredComponent();
			if(component != null) return component;
		}
		return com.wiris.util.ui.component.Label.prototype.getHoveredComponent.call(this);
	}
	,getChildren: function() {
		var children = new Array();
		var _g = 0, _g1 = this.labels;
		while(_g < _g1.length) {
			var label = _g1[_g];
			++_g;
			children.push(label);
		}
		return children;
	}
	,getLabels: function() {
		return this.labels;
	}
	,setText: function(text) {
		return;
	}
	,getText: function() {
		var sb = new StringBuf();
		var i = HxOverrides.iter(this.labels);
		while(i.hasNext()) sb.b += Std.string(i.next().getText());
		return sb.b;
	}
	,defaultComponentTreeListeners: null
	,componentTreeListeners: null
	,labels: null
	,__class__: com.wiris.util.ui.component.CompositeLabel
});
com.wiris.util.ui.component.CompoundComponentBuilder = $hxClasses["com.wiris.util.ui.component.CompoundComponentBuilder"] = function() {
	this.builders = new Array();
	this.mainBuilder = this;
};
com.wiris.util.ui.component.CompoundComponentBuilder.__name__ = ["com","wiris","util","ui","component","CompoundComponentBuilder"];
com.wiris.util.ui.component.CompoundComponentBuilder.__interfaces__ = [com.wiris.util.ui.component.ComponentBuilder];
com.wiris.util.ui.component.CompoundComponentBuilder.prototype = {
	setMainComponentBuilder: function(builder) {
		this.mainBuilder = builder;
		var _g1 = 0, _g = this.builders.length;
		while(_g1 < _g) {
			var i = _g1++;
			this.builders[i].setMainComponentBuilder(this.mainBuilder);
		}
	}
	,buildComponent: function(component,parent) {
		var _g1 = 0, _g = this.builders.length;
		while(_g1 < _g) {
			var i = _g1++;
			var element = this.builders[i].buildComponent(component,parent);
			if(element != null) return element;
		}
		if(this.mainBuilder == this) throw "Cannot build component " + Std.string(component);
		return null;
	}
	,addComponentBuilder: function(builder) {
		this.builders.push(builder);
		builder.setMainComponentBuilder(this.mainBuilder);
	}
	,mainBuilder: null
	,builders: null
	,__class__: com.wiris.util.ui.component.CompoundComponentBuilder
}
com.wiris.util.ui.component.ContextPanel = $hxClasses["com.wiris.util.ui.component.ContextPanel"] = function() {
	com.wiris.util.ui.component.Panel.call(this);
	this.addClass(com.wiris.util.ui.component.ContextPanel.CLASS_CONTEXT_PANEL);
	this.nested = false;
	this.anchor = com.wiris.util.ui.component.ContextPanel.ANCHOR_TOP | com.wiris.util.ui.component.ContextPanel.ANCHOR_LEFT;
	this.parentAnchor = com.wiris.util.ui.component.ContextPanel.ANCHOR_BOTTOM | com.wiris.util.ui.component.ContextPanel.ANCHOR_LEFT;
	this.openAnimationMode = com.wiris.util.ui.component.ContextPanel.ANIMATION_MODE_TOP_TO_BOTTOM;
	this.content = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addComponentImpl(this.content);
};
com.wiris.util.ui.component.ContextPanel.__name__ = ["com","wiris","util","ui","component","ContextPanel"];
com.wiris.util.ui.component.ContextPanel.__super__ = com.wiris.util.ui.component.Panel;
com.wiris.util.ui.component.ContextPanel.prototype = $extend(com.wiris.util.ui.component.Panel.prototype,{
	updateNestedImpl: function(component,nested) {
		if(js.Boot.__instanceof(component,com.wiris.util.ui.component.ContextPanelButton)) component.getContextPanel().setNested(nested); else if(js.Boot.__instanceof(component,com.wiris.util.ui.component.Panel)) {
			var children = component.getComponents();
			var _g = 0;
			while(_g < children.length) {
				var child = children[_g];
				++_g;
				this.updateNestedImpl(child,nested);
			}
		}
	}
	,setPanelDirection: function(direction) {
		this.content.setDirection(direction);
	}
	,setOpenAnimationMode: function(openAnimationMode) {
		this.openAnimationMode = openAnimationMode;
	}
	,setParentAnchor: function(parentAnchor) {
		this.parentAnchor = parentAnchor;
	}
	,setAnchor: function(anchor) {
		this.anchor = anchor;
	}
	,getOpenAnimationMode: function() {
		return this.openAnimationMode;
	}
	,getParentAnchor: function() {
		return this.parentAnchor;
	}
	,getAnchor: function() {
		return this.anchor;
	}
	,getClasses: function() {
		var result = com.wiris.util.ui.component.Panel.prototype.getClasses.call(this);
		var partialResult = this.content.getClasses();
		var i = HxOverrides.iter(partialResult);
		while(i.hasNext()) {
			var current = i.next();
			if(!com.wiris.system.ArrayEx.contains(result,current)) result.push(current);
		}
		return result;
	}
	,removeAllComponents: function() {
		this.content.removeAllComponents();
	}
	,removeComponent: function(index) {
		this.content.removeComponent(index);
	}
	,getComponentsByClassName: function(className) {
		var result = com.wiris.util.ui.component.Panel.prototype.getComponentsByClassName.call(this,className);
		var partialResult = this.content.getComponentsByClassName(className);
		var j = HxOverrides.iter(partialResult);
		while(j.hasNext()) result.push(j.next());
		return result;
	}
	,setNested: function(nested) {
		this.nested = nested;
	}
	,isNested: function() {
		return this.nested;
	}
	,isChild: function(component) {
		return this.content == component || this.content.isChild(component);
	}
	,getComponentById: function(id) {
		var component = this.content.getComponentById(id);
		if(component != null) return component;
		return com.wiris.util.ui.component.Panel.prototype.getComponentById.call(this,id);
	}
	,getComponents: function() {
		return this.content.getComponents();
	}
	,getPanel: function() {
		return this.content;
	}
	,addComponent: function(component) {
		this.content.addComponentImpl(component);
		this.updateNestedImpl(component,true);
	}
	,content: null
	,openAnimationMode: null
	,parentAnchor: null
	,anchor: null
	,nested: null
	,__class__: com.wiris.util.ui.component.ContextPanel
});
com.wiris.util.ui.component.ContextMenu = $hxClasses["com.wiris.util.ui.component.ContextMenu"] = function() {
	com.wiris.util.ui.component.ContextPanel.call(this);
	this.addClass(com.wiris.util.ui.component.ContextMenu.CLASS_CONTEXT_MENU);
	this.buttons = new Hash();
};
com.wiris.util.ui.component.ContextMenu.__name__ = ["com","wiris","util","ui","component","ContextMenu"];
com.wiris.util.ui.component.ContextMenu.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.util.ui.component.ContextMenu.__super__ = com.wiris.util.ui.component.ContextPanel;
com.wiris.util.ui.component.ContextMenu.prototype = $extend(com.wiris.util.ui.component.ContextPanel.prototype,{
	actionPerformed: function(e) {
		this.performAction(e.getAction());
	}
	,addDivider: function() {
		this.content.addComponentImpl(new com.wiris.util.ui.component.Divider(false));
	}
	,removeAllOptions: function() {
		this.removeAllComponents();
	}
	,removeOption: function(id) {
		this.content.removeComponent(this.buttons.get(id).getChildIndex());
		this.buttons.remove(id);
	}
	,addOptionFromButton: function(id,button) {
		this.content.addComponentImpl(button);
		this.buttons.set(id,button);
		button.addActionListener(this);
		this.updateNestedImpl(button,true);
		return button;
	}
	,addOption: function(id,label,tooltip,icon,url,activationAction) {
		var button = null;
		if(url != null) {
			if(label != null) {
				if(icon != null) button = com.wiris.util.ui.component.HyperlinkButton.newWithTextAndIcon(label,icon,url,activationAction,this); else button = com.wiris.util.ui.component.HyperlinkButton.newWithText(label,url,activationAction,this);
			} else button = com.wiris.util.ui.component.HyperlinkButton.newWithIcon(tooltip,icon,url,activationAction,this);
		} else if(label != null) {
			if(icon != null) button = com.wiris.util.ui.component.Button.newWithTextAndIcon(label,icon,activationAction,this); else button = com.wiris.util.ui.component.Button.newWithText(label,activationAction,this);
		} else button = com.wiris.util.ui.component.Button.newWithIcon(tooltip,icon,activationAction,this);
		this.buttons.set(id,button);
		this.content.addComponentImpl(button);
		this.updateNestedImpl(button,true);
		return button;
	}
	,buttons: null
	,__class__: com.wiris.util.ui.component.ContextMenu
});
com.wiris.util.ui.component.ContextMenuButton = $hxClasses["com.wiris.util.ui.component.ContextMenuButton"] = function() {
	com.wiris.util.ui.component.ContextPanelButton.call(this);
	this.addClass(com.wiris.util.ui.component.ContextMenuButton.CLASS_CONTEXT_MENU_BUTTON);
	this.getContextPanel().getStyle().setPadding(8,com.wiris.util.ui.Style.SIZE_AUTO,8,com.wiris.util.ui.Style.SIZE_AUTO);
	this.focusedOption = com.wiris.util.ui.component.ContextMenuButton.NONE;
	this.openOnHover = false;
	this.ids = new Array();
	this.options = new Hash();
	this.addKeyListener(this);
	this.addMouseListener(this);
};
com.wiris.util.ui.component.ContextMenuButton.__name__ = ["com","wiris","util","ui","component","ContextMenuButton"];
com.wiris.util.ui.component.ContextMenuButton.__interfaces__ = [com.wiris.util.ui.interaction.MouseListener,com.wiris.util.ui.interaction.KeyListener,com.wiris.util.ui.interaction.ActionListener];
com.wiris.util.ui.component.ContextMenuButton.newWithText = function(text) {
	var contextMenuButton = new com.wiris.util.ui.component.ContextMenuButton();
	contextMenuButton.setText(text);
	return contextMenuButton;
}
com.wiris.util.ui.component.ContextMenuButton.newWithIcon = function(icon,tooltip) {
	var contextMenuButton = new com.wiris.util.ui.component.ContextMenuButton();
	contextMenuButton.setNormalIcon(icon);
	contextMenuButton.setTooltip(tooltip);
	return contextMenuButton;
}
com.wiris.util.ui.component.ContextMenuButton.newWithTextAndIcon = function(text,icon) {
	var contextMenuButton = new com.wiris.util.ui.component.ContextMenuButton();
	contextMenuButton.setText(text);
	contextMenuButton.setNormalIcon(icon);
	return contextMenuButton;
}
com.wiris.util.ui.component.ContextMenuButton.__super__ = com.wiris.util.ui.component.ContextPanelButton;
com.wiris.util.ui.component.ContextMenuButton.prototype = $extend(com.wiris.util.ui.component.ContextPanelButton.prototype,{
	actionPerformed: function(e) {
		this.performAction(e.getAction());
		this.hideContextPanel();
	}
	,focusGained: function(e) {
		if(this.isContextPanelVisible() && this.focusedOption != com.wiris.util.ui.component.ContextMenuButton.NONE) this.getFocusedOption().addClass(com.wiris.util.ui.component.Component.CLASS_FOCUSED);
	}
	,mouseExit: function(e) {
		if(this.isOpenOnHover()) new com.wiris.util.ui.async.CloseOnHoverTask(this);
	}
	,mouseEnter: function(e) {
		if(this.isOpenOnHover()) {
			if(e.getTarget() == this) this.showContextPanel();
		}
	}
	,mouseRelease: function(e) {
	}
	,mousePress: function(e) {
	}
	,mouseDoubleClick: function(e) {
	}
	,mouseClick: function(e) {
	}
	,keyType: function(e) {
	}
	,keyRelease: function(e) {
	}
	,keyPress: function(e) {
		if(this.isEnabled()) {
			var keyCode = e.getKeyCode();
			if(this.isContextPanelVisible()) {
				if(com.wiris.util.ui.interaction.KeyCode.UP == keyCode || com.wiris.util.ui.interaction.KeyCode.DOWN == keyCode || com.wiris.util.ui.interaction.KeyCode.ESCAPE == keyCode) e.preventDefault();
				if(com.wiris.util.ui.interaction.KeyCode.UP == keyCode) this.focusPreviousOption(); else if(com.wiris.util.ui.interaction.KeyCode.DOWN == keyCode) this.focusNextOption(); else if(com.wiris.util.ui.interaction.KeyCode.RIGHT == keyCode) {
					if(js.Boot.__instanceof(this.getFocusedOption(),com.wiris.util.ui.component.ContextMenuButton)) {
						var focusedOption = this.getFocusedOption();
						if(focusedOption.getContextPanel().isNested()) {
							focusedOption.showContextPanel();
							focusedOption.requestFocus();
						}
					}
				} else if(com.wiris.util.ui.interaction.KeyCode.LEFT == keyCode) {
					if(this.getContextPanel().isNested()) {
						var parent = this.getParent().getParent().getParent();
						this.hideContextPanel();
						parent.requestFocus();
					}
				} else if(com.wiris.util.ui.interaction.KeyCode.ESCAPE == keyCode) {
					this.hideContextPanel();
					e.stopPropagation();
				}
			} else if(com.wiris.util.ui.interaction.KeyCode.UP == keyCode || com.wiris.util.ui.interaction.KeyCode.DOWN == keyCode) {
				this.showContextPanel();
				e.preventDefault();
			}
		}
	}
	,activate: function() {
		if(this.getContextPanel().isVisible()) this.activateFocusedOption(); else this.showContextPanel();
	}
	,focusPreviousOption: function() {
		if(this.focusedOption < 0) this.focusedOption = this.ids.length - 1; else {
			this.getFocusedOption().removeClass(com.wiris.util.ui.component.Component.CLASS_FOCUSED);
			if(this.focusedOption == 0) this.focusedOption = this.ids.length - 1; else this.focusedOption -= 1;
		}
		this.getFocusedOption().addClass(com.wiris.util.ui.component.Component.CLASS_FOCUSED);
	}
	,focusNextOption: function() {
		if(this.focusedOption < 0) this.focusedOption = 0; else {
			this.getFocusedOption().removeClass(com.wiris.util.ui.component.Component.CLASS_FOCUSED);
			if(this.focusedOption == this.ids.length - 1) this.focusedOption = 0; else this.focusedOption += 1;
		}
		this.getFocusedOption().addClass(com.wiris.util.ui.component.Component.CLASS_FOCUSED);
	}
	,activateFocusedOption: function() {
		var focused = this.getFocusedOption();
		if(focused != null) {
			focused.activate();
			if(js.Boot.__instanceof(focused,com.wiris.util.ui.component.ContextMenuButton)) {
				var focusedOption = focused;
				if(focusedOption.getContextPanel().isNested()) focusedOption.requestFocus(); else this.hideContextPanel();
			}
		}
	}
	,hideContextPanel: function() {
		if(this.isContextPanelVisible() && this.focusedOption != com.wiris.util.ui.component.ContextMenuButton.NONE) {
			this.getFocusedOption().removeClass(com.wiris.util.ui.component.Component.CLASS_FOCUSED);
			this.focusedOption = com.wiris.util.ui.component.ContextMenuButton.NONE;
		}
		com.wiris.util.ui.component.ContextPanelButton.prototype.hideContextPanel.call(this);
	}
	,addDivider: function() {
		this.contextMenu.addDivider();
	}
	,removeAllOptions: function() {
		this.contextMenu.removeAllOptions();
		this.ids = new Array();
		this.options = new Hash();
	}
	,removeOption: function(value) {
		var index;
		var _g1 = 0, _g = this.ids.length;
		while(_g1 < _g) {
			var index1 = _g1++;
			if(this.ids[index1] == value) this.getContextPanel().removeComponent(index1);
		}
		HxOverrides.remove(this.ids,value);
		this.options.remove(value);
	}
	,getOption: function(value) {
		return this.options.get(value);
	}
	,addOptionFromButton: function(value,button) {
		this.contextMenu.addOptionFromButton(value,button);
		button.addClass(com.wiris.util.ui.component.ContextMenuButton.CLASS_CONTEXT_MENU_BUTTON_DIALOG_ITEM);
		this.ids.push(value);
		this.options.set(value,button);
	}
	,addOptionImpl: function(value,text,tooltip,icon,url,activationAction) {
		var button = this.contextMenu.addOption(value,text,tooltip,icon,url,activationAction);
		button.addClass(com.wiris.util.ui.component.ContextMenuButton.CLASS_CONTEXT_MENU_BUTTON_DIALOG_ITEM);
		this.ids.push(value);
		this.options.set(value,button);
		return button;
	}
	,addHyperlinkOptionWithTextAndIcon: function(value,text,icon,url,activationAction) {
		return this.addOptionImpl(value,text,null,icon,url,activationAction);
	}
	,addHyperlinkOptionWithIcon: function(value,tooltip,icon,url,activationAction) {
		return this.addOptionImpl(value,null,tooltip,icon,url,activationAction);
	}
	,addHyperlinkOption: function(value,text,url,activationAction) {
		return this.addOptionImpl(value,text,null,null,url,activationAction);
	}
	,addOptionWithTextAndIcon: function(value,text,icon,activationAction) {
		return this.addOptionImpl(value,text,null,icon,null,activationAction);
	}
	,addOptionWithIcon: function(value,tooltip,icon,activationAction) {
		return this.addOptionImpl(value,null,tooltip,icon,null,activationAction);
	}
	,addOption: function(value,text,activationAction) {
		return this.addOptionImpl(value,text,null,null,null,activationAction);
	}
	,setOpenOnHover: function(openOnHover) {
		this.openOnHover = openOnHover;
	}
	,isOpenOnHover: function() {
		return this.openOnHover;
	}
	,getFocusedOption: function() {
		if(this.focusedOption != com.wiris.util.ui.component.ContextMenuButton.NONE) return this.options.get(this.ids[this.focusedOption]);
		return null;
	}
	,getContextPanel: function() {
		return this.contextMenu;
	}
	,createContextPanel: function() {
		this.contextMenu = new com.wiris.util.ui.component.ContextMenu();
		this.contextMenu.addClass(com.wiris.util.ui.component.ContextMenuButton.CLASS_CONTEXT_MENU_BUTTON_DIALOG);
		this.contextMenu.addActionListener(this);
		this.contextMenu.addMouseListener(this);
		return this.contextMenu;
	}
	,openOnHover: null
	,focusedOption: null
	,options: null
	,ids: null
	,contextMenu: null
	,__class__: com.wiris.util.ui.component.ContextMenuButton
});
com.wiris.util.ui.component.DataCell = $hxClasses["com.wiris.util.ui.component.DataCell"] = function(component) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.addClass(com.wiris.util.ui.component.DataCell.CLASS_DATA_TABLE_CELL);
	this.component = component;
	this.addComponent(component);
};
com.wiris.util.ui.component.DataCell.__name__ = ["com","wiris","util","ui","component","DataCell"];
com.wiris.util.ui.component.DataCell.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.util.ui.component.DataCell.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	setComponent: function(component) {
		this.removeAllComponents();
		this.component = component;
		this.addComponent(component);
	}
	,getComponent: function() {
		return this.component;
	}
	,component: null
	,__class__: com.wiris.util.ui.component.DataCell
});
com.wiris.util.ui.component.DataRow = $hxClasses["com.wiris.util.ui.component.DataRow"] = function() {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.addClass(com.wiris.util.ui.component.DataRow.CLASS_DATA_TABLE_ROW);
};
com.wiris.util.ui.component.DataRow.__name__ = ["com","wiris","util","ui","component","DataRow"];
com.wiris.util.ui.component.DataRow.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.util.ui.component.DataRow.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	addComponent: function(component) {
		com.wiris.util.ui.component.FlowPanel.prototype.addComponent.call(this,new com.wiris.util.ui.component.DataCell(component));
	}
	,__class__: com.wiris.util.ui.component.DataRow
});
com.wiris.util.ui.component.DataTable = $hxClasses["com.wiris.util.ui.component.DataTable"] = function(headers) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.util.ui.component.DataTable.CLASS_DATA_TABLE);
	this.header = new com.wiris.util.ui.component.DataRow();
	this.header.addClass(com.wiris.util.ui.component.DataTable.CLASS_DATA_TABLE_HEADER);
	var i = HxOverrides.iter(headers);
	while(i.hasNext()) this.header.addComponent(com.wiris.util.ui.component.Label.newImportantWithText(i.next()));
	this.body = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.body.addClass(com.wiris.util.ui.component.DataTable.CLASS_DATA_TABLE_BODY);
	this.addComponent(this.header);
	this.addComponent(this.body);
};
com.wiris.util.ui.component.DataTable.__name__ = ["com","wiris","util","ui","component","DataTable"];
com.wiris.util.ui.component.DataTable.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.util.ui.component.DataTable.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	removeAllRows: function() {
		this.body.removeAllComponents();
	}
	,removeRow: function(index) {
		this.body.removeComponent(index);
	}
	,insertRowAt: function(cells,index) {
		if(this.header.getComponents().length == cells.length) {
			var row = new com.wiris.util.ui.component.DataRow();
			var i = HxOverrides.iter(cells);
			while(i.hasNext()) row.addComponent(i.next());
			this.body.insertComponentAt(row,index);
			this.changeState();
		}
	}
	,addRow: function(cells) {
		if(this.header.getComponents().length == cells.length) {
			var row = new com.wiris.util.ui.component.DataRow();
			var i = HxOverrides.iter(cells);
			while(i.hasNext()) row.addComponent(i.next());
			this.body.addComponent(row);
			this.changeState();
		}
	}
	,getRows: function() {
		return this.body.getComponents();
	}
	,setHeader: function(headers) {
		if(this.header.getComponents().length != headers.length) this.body.removeAllComponents();
		this.header = new com.wiris.util.ui.component.DataRow();
		var i = HxOverrides.iter(headers);
		while(i.hasNext()) this.header.addComponent(com.wiris.util.ui.component.Label.newImportantWithText(i.next()));
		this.removeComponent(0);
		this.insertComponentAt(this.header,0);
		this.changeState();
	}
	,getHeader: function() {
		return this.header;
	}
	,body: null
	,header: null
	,__class__: com.wiris.util.ui.component.DataTable
});
com.wiris.util.ui.component.Dialog = $hxClasses["com.wiris.util.ui.component.Dialog"] = function() {
	com.wiris.util.ui.component.Window.call(this);
	this.setModal(true);
	this.setEasyModalCloseEnabled(true);
	this.addClass(com.wiris.util.ui.component.Dialog.CLASS_DIALOG);
	this.closingWithoutAction = false;
	this.message = new com.wiris.util.ui.component.Label();
	this.addComponent(this.message.addClass(com.wiris.util.ui.component.Dialog.CLASS_DIALOG_MESSAGE));
	this.controlSlot = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.controlSlot.getStyle().setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_CENTER);
	this.addComponent(this.controlSlot.addClass(com.wiris.util.ui.component.Dialog.CLASS_DIALOG_CONTROL));
	var buttons = new com.wiris.util.ui.component.BorderPanel(false);
	this.primarySlot = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_RIGHT_TO_LEFT_WITH_WRAP);
	this.secondarySlot = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT_WITH_WRAP);
	buttons.addComponent(this.primarySlot.addClass(com.wiris.util.ui.component.Dialog.CLASS_DIALOG_PRIMARY_BUTTONS),com.wiris.util.ui.component.BorderPanel.POSITION_SOUTH_EAST);
	buttons.addComponent(this.secondarySlot.addClass(com.wiris.util.ui.component.Dialog.CLASS_DIALOG_SECONDARY_BUTTONS),com.wiris.util.ui.component.BorderPanel.POSITION_SOUTH_WEST);
	this.addComponent(buttons);
	this.progressBar = new com.wiris.util.ui.component.ProgressBar();
	this.progressBar.setVisible(false);
	this.addComponent(this.progressBar);
	this.controls = new Hash();
	this.consumed = false;
	this.singleUse = true;
};
com.wiris.util.ui.component.Dialog.__name__ = ["com","wiris","util","ui","component","Dialog"];
com.wiris.util.ui.component.Dialog.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.util.ui.component.Dialog.newAcknowledgementDialog = function(title,messageText,acknowledgeText,acknowledgeAction) {
	var dialog = new com.wiris.util.ui.component.Dialog();
	dialog.setTitle(title);
	dialog.setMessageText(messageText);
	dialog.addPrimaryAction(acknowledgeText,acknowledgeAction,false);
	return dialog;
}
com.wiris.util.ui.component.Dialog.newConfirmDialog = function(title,messageText,confirmText,dismissText,confirmAction,dismissAction) {
	var dialog = new com.wiris.util.ui.component.Dialog();
	dialog.setTitle(title);
	dialog.setMessageText(messageText);
	dialog.addPrimaryAction(confirmText,confirmAction,false);
	dialog.addPrimaryAction(dismissText,dismissAction,false);
	return dialog;
}
com.wiris.util.ui.component.Dialog.newTextDialog = function(title,messageText,confirmText,cancelText,confirmAction,cancelAction,label,placeholder,defaultValue) {
	return com.wiris.util.ui.component.Dialog.newTextDialogImpl(title,messageText,confirmText,cancelText,confirmAction,cancelAction,label,placeholder,defaultValue,new com.wiris.util.ui.component.TextField());
}
com.wiris.util.ui.component.Dialog.newMultilineTextDialog = function(title,messageText,confirmText,cancelText,confirmAction,cancelAction,label,placeholder,defaultValue) {
	return com.wiris.util.ui.component.Dialog.newTextDialogImpl(title,messageText,confirmText,cancelText,confirmAction,cancelAction,label,placeholder,defaultValue,new com.wiris.util.ui.component.TextArea());
}
com.wiris.util.ui.component.Dialog.newNumberTextDialog = function(title,messageText,confirmText,cancelText,confirmAction,cancelAction,label,placeholder,defaultValue,min,max,step,suffix) {
	var tf = new com.wiris.util.ui.component.NumberTextField();
	tf.setMinimum(min);
	tf.setMaximum(max);
	tf.setStep(step);
	if(suffix != null) tf.setSuffix(suffix);
	return com.wiris.util.ui.component.Dialog.newTextDialogImpl(title,messageText,confirmText,cancelText,confirmAction,cancelAction,label,placeholder,defaultValue,tf);
}
com.wiris.util.ui.component.Dialog.newTextDialogImpl = function(title,messageText,confirmText,cancelText,confirmAction,cancelAction,label,placeholder,defaultValue,textComponent) {
	var dialog = new com.wiris.util.ui.component.Dialog();
	dialog.setTitle(title);
	dialog.setMessageText(messageText);
	if(label != null) textComponent.setLabel(label);
	if(placeholder != null) textComponent.setPlaceholder(placeholder);
	if(defaultValue != null) textComponent.setValue(defaultValue);
	dialog.addControlComponent("value",textComponent);
	dialog.addPrimaryAction(confirmText,confirmAction,true);
	dialog.addPrimaryAction(cancelText,cancelAction,false);
	return dialog;
}
com.wiris.util.ui.component.Dialog.__super__ = com.wiris.util.ui.component.Window;
com.wiris.util.ui.component.Dialog.prototype = $extend(com.wiris.util.ui.component.Window.prototype,{
	getMessageLabel: function() {
		return this.message;
	}
	,getPrimarySlot: function() {
		return this.primarySlot;
	}
	,getControlSlot: function() {
		return this.controlSlot;
	}
	,close: function() {
		if(!this.closingWithoutAction) {
			var primaryButtons = this.primarySlot.getComponents();
			if(primaryButtons.length > 0) {
				var cancelButton = primaryButtons[primaryButtons.length - 1];
				cancelButton.performAction(cancelButton.getActivationAction());
			}
		}
		com.wiris.util.ui.component.Window.prototype.close.call(this);
	}
	,keyType: function(e) {
		if(e.getKeyCode() == com.wiris.util.ui.interaction.KeyCode.ENTER) {
			if(e.getSource() == this) {
				var primaryButtons = this.primarySlot.getComponents();
				if(primaryButtons.length > 0) {
					var acceptButton = primaryButtons[0];
					acceptButton.performAction(acceptButton.getActivationAction());
				}
			} else e.stopPropagation();
		}
	}
	,actionPerformed: function(e) {
		if(!this.isVisible() || this.consumed && this.singleUse) return;
		this.consumed = true;
		if(e.getAction().getParameter("async") != null) {
			this.progressBar.setVisible(true);
			this.setChildrenEnabled(false);
		} else if(this.singleUse) {
			this.closingWithoutAction = true;
			this.close();
			this.closingWithoutAction = false;
		}
		var action = e.getAction().getParameter("originalAction");
		if(action != null) this.performAction(action);
	}
	,addAction: function(text,action,contained,slot,async) {
		var wrapperAction = new com.wiris.util.ui.Action(null,null);
		wrapperAction.setParameter("originalAction",action);
		if(async) wrapperAction.setParameter("async","true");
		var button = com.wiris.util.ui.component.Button.newWithText(text,wrapperAction,this);
		if(contained) button.addClass(com.wiris.util.ui.component.Button.CLASS_BUTTON_CONTAINED);
		slot.addComponent(button.addKeyListener(this));
		if(slot.getComponents().length > 2 || text.length >= com.wiris.util.ui.component.Dialog.LONG_ACTION_TEXT_LENGTH_LIMIT || text.split(" ").length >= com.wiris.util.ui.component.Dialog.LONG_ACTION_TEXT_WORDS_LIMIT) {
			slot.setDirection(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
			if(slot == this.primarySlot) slot.getStyle().setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_RIGHT); else if(slot == this.secondarySlot) slot.getStyle().setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_LEFT);
		}
		return button;
	}
	,endLoading: function() {
		this.progressBar.setVisible(false);
		this.setChildrenEnabled(false);
	}
	,startLoading: function() {
		this.progressBar.setVisible(true);
		this.setChildrenEnabled(false);
	}
	,cancelAsyncAction: function() {
		this.progressBar.setVisible(false);
		this.setChildrenEnabled(true);
		this.consumed = false;
	}
	,getSecondaryAction: function(index) {
		return this.secondarySlot.getComponents()[index];
	}
	,addAsyncSecondaryAction: function(text,action) {
		return this.addAction(text,action,false,this.secondarySlot,true);
	}
	,addSecondaryAction: function(text,action) {
		return this.addAction(text,action,false,this.secondarySlot,false);
	}
	,getPrimaryAction: function(index) {
		return this.primarySlot.getComponents()[index];
	}
	,addAsyncPrimaryAction: function(text,action,contained) {
		return this.addAction(text,action,contained,this.primarySlot,true);
	}
	,addPrimaryAction: function(text,action,contained) {
		return this.addAction(text,action,contained,this.primarySlot,false);
	}
	,getControlComponent: function(name) {
		return this.controls.get(name);
	}
	,addControlComponent: function(name,controlComponent) {
		this.controls.set(name,controlComponent);
		this.controlSlot.addComponent(controlComponent);
	}
	,setMessageText: function(messageText) {
		this.message.setText(messageText);
	}
	,open: function() {
		com.wiris.util.ui.component.Window.prototype.open.call(this);
		this.consumed = false;
	}
	,setSignleUse: function(singleUse) {
		this.singleUse = singleUse;
	}
	,singleUse: null
	,consumed: null
	,controls: null
	,closingWithoutAction: null
	,progressBar: null
	,secondarySlot: null
	,primarySlot: null
	,controlSlot: null
	,message: null
	,__class__: com.wiris.util.ui.component.Dialog
});
com.wiris.util.ui.component.DialogForm = $hxClasses["com.wiris.util.ui.component.DialogForm"] = function() {
	com.wiris.util.ui.component.Window.call(this);
	this.addClass(com.wiris.util.ui.component.DialogForm.CLASS_DIALOG_FORM);
	this.setModal(true);
	this.warnings = new Hash();
	this.componentsWithInformation = new Hash();
};
com.wiris.util.ui.component.DialogForm.__name__ = ["com","wiris","util","ui","component","DialogForm"];
com.wiris.util.ui.component.DialogForm.__super__ = com.wiris.util.ui.component.Window;
com.wiris.util.ui.component.DialogForm.prototype = $extend(com.wiris.util.ui.component.Window.prototype,{
	editComponentSubtitleWithId: function(id,text) {
		var formPanel = this.componentsWithInformation.get(id);
		var titleSubtitlPanel = formPanel.getComponents()[0];
		var subTitleLabel = titleSubtitlPanel.getComponents()[1];
		subTitleLabel.setText(text);
	}
	,editComponentTitleWithId: function(id,text) {
		var formPanel = this.componentsWithInformation.get(id);
		var titleSubtitlPanel = formPanel.getComponents()[0];
		var titleLabel = titleSubtitlPanel.getComponents()[0];
		titleLabel.setText(text);
	}
	,showWarningWithId: function(id) {
		this.warnings.get(id).setVisible(true);
	}
	,hideWarningWithId: function(id) {
		this.warnings.get(id).setVisible(false);
	}
	,addWarningWithId: function(id,comment,visible) {
		var warning = new com.wiris.util.ui.component.Label();
		warning.addClass("dialogForm_warning");
		warning.setText(comment);
		if(!visible) warning.setVisible(false);
		this.warnings.set(id,warning);
		this.addComponent(warning);
	}
	,addComponentWithInfo: function(id,title,subtitle,component) {
		var titleSubtitlePanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
		titleSubtitlePanel.addClass("dialogForm_titleSubtitlePanel");
		var titleLabel = new com.wiris.util.ui.component.Label();
		titleLabel.addClass("dialogForm_titleLabel");
		titleLabel.setText(title);
		var subtitleLabel = new com.wiris.util.ui.component.Label();
		subtitleLabel.addClass("dialogForm_subtitleLabel");
		subtitleLabel.setText(subtitle);
		titleSubtitlePanel.addComponent(titleLabel);
		titleSubtitlePanel.addComponent(subtitleLabel);
		var formPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
		formPanel.addClass("dialogForm_panel_with_info");
		formPanel.addComponent(titleSubtitlePanel);
		formPanel.addComponent(component);
		this.componentsWithInformation.set(id,formPanel);
		this.addComponent(formPanel);
	}
	,addLineSeparator: function(title) {
		var separator = new com.wiris.util.ui.component.Label();
		separator.setText(title);
		separator.addClass("dialogForm_separator");
		if(title == null) separator.addClass("dialogForm_separator_withoutTitle");
		this.addComponent(separator);
	}
	,warnings: null
	,componentsWithInformation: null
	,__class__: com.wiris.util.ui.component.DialogForm
});
com.wiris.util.ui.component.DialogStack = $hxClasses["com.wiris.util.ui.component.DialogStack"] = function() {
	com.wiris.util.ui.component.Window.call(this);
	this.setModal(true);
	this.addClass(com.wiris.util.ui.component.DialogStack.CLASS_DIALOG_STACK);
	this.addClass(com.wiris.util.ui.component.Dialog.CLASS_DIALOG);
	this.dialogs = new com.wiris.util.type.Stack();
};
com.wiris.util.ui.component.DialogStack.__name__ = ["com","wiris","util","ui","component","DialogStack"];
com.wiris.util.ui.component.DialogStack.__super__ = com.wiris.util.ui.component.Window;
com.wiris.util.ui.component.DialogStack.prototype = $extend(com.wiris.util.ui.component.Window.prototype,{
	close: function() {
		if(!this.dialogs.empty()) this.dialogs.top().setVisible(false);
		com.wiris.util.ui.component.Window.prototype.close.call(this);
	}
	,empty: function() {
		return this.dialogs.empty();
	}
	,clear: function() {
		while(!this.dialogs.empty()) this.popDialog();
		this.close();
	}
	,topDialog: function() {
		return this.dialogs.top();
	}
	,popDialog: function() {
		var action = new com.wiris.util.ui.Action("dialogPopped","dialogPopped");
		action.setParameter("dialog",this.dialogs.top());
		this.dialogs.top().removeFromParent();
		this.dialogs.top().endLoading();
		this.dialogs.pop();
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createActionEvent(this,action));
	}
	,pushDialog: function(dialog) {
		dialog.open();
		this.dialogs.push(dialog);
		var action = new com.wiris.util.ui.Action("dialogPushed","dialogPushed");
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createActionEvent(this,action));
	}
	,dialogs: null
	,__class__: com.wiris.util.ui.component.DialogStack
});
com.wiris.util.ui.component.Divider = $hxClasses["com.wiris.util.ui.component.Divider"] = function(vertical) {
	com.wiris.util.ui.component.Panel.call(this);
	this.addClass(com.wiris.util.ui.component.Divider.CLASS_DIVIDER);
	if(vertical) {
		this.addClass(com.wiris.util.ui.component.Divider.CLASS_DIVIDER_VERTICAL);
		this.getStyle().setHeight(com.wiris.util.ui.Style.SIZE_FULL);
	} else this.getStyle().setWidth(com.wiris.util.ui.Style.SIZE_FULL);
};
com.wiris.util.ui.component.Divider.__name__ = ["com","wiris","util","ui","component","Divider"];
com.wiris.util.ui.component.Divider.__super__ = com.wiris.util.ui.component.Panel;
com.wiris.util.ui.component.Divider.prototype = $extend(com.wiris.util.ui.component.Panel.prototype,{
	__class__: com.wiris.util.ui.component.Divider
});
com.wiris.util.ui.component.DrawerPanel = $hxClasses["com.wiris.util.ui.component.DrawerPanel"] = function() {
	com.wiris.util.ui.component.BorderPanel.call(this,true);
	this.addClass(com.wiris.util.ui.component.DrawerPanel.CLASS_DRAWER_PANEL);
	this.getStyle().setZIndex(com.wiris.util.ui.component.DrawerPanel.Z_INDEX);
	this.setVisible(false);
	this.addKeyListener(this);
};
com.wiris.util.ui.component.DrawerPanel.__name__ = ["com","wiris","util","ui","component","DrawerPanel"];
com.wiris.util.ui.component.DrawerPanel.__interfaces__ = [com.wiris.util.ui.interaction.KeyListener];
com.wiris.util.ui.component.DrawerPanel.newAtRight = function(persistent) {
	var panel = new com.wiris.util.ui.component.DrawerPanel();
	panel.addClass(com.wiris.util.ui.component.DrawerPanel.CLASS_DRAWER_PANEL_RIGHT_DRAWER);
	if(persistent) panel.addClass(com.wiris.util.ui.component.DrawerPanel.CLASS_DRAWER_PANEL_PERSISTENT_DRAWER_PANEL);
	return panel;
}
com.wiris.util.ui.component.DrawerPanel.newAtBottom = function(persistent) {
	var panel = new com.wiris.util.ui.component.DrawerPanel();
	panel.addClass(com.wiris.util.ui.component.DrawerPanel.CLASS_DRAWER_PANEL_BOTTOM_DRAWER);
	if(persistent) panel.addClass(com.wiris.util.ui.component.DrawerPanel.CLASS_DRAWER_PANEL_PERSISTENT_DRAWER_PANEL);
	return panel;
}
com.wiris.util.ui.component.DrawerPanel.__super__ = com.wiris.util.ui.component.BorderPanel;
com.wiris.util.ui.component.DrawerPanel.prototype = $extend(com.wiris.util.ui.component.BorderPanel.prototype,{
	keyType: function(e) {
	}
	,keyRelease: function(e) {
	}
	,keyPress: function(e) {
		if(!this.isVisible()) return;
		if(e.getKeyCode() == com.wiris.util.ui.interaction.KeyCode.ESCAPE) {
			this.close();
			e.stopPropagation();
		}
	}
	,close: function() {
		this.setVisible(false);
	}
	,open: function() {
		this.setVisible(true);
	}
	,__class__: com.wiris.util.ui.component.DrawerPanel
});
com.wiris.util.ui.interaction.MouseMotionListener = $hxClasses["com.wiris.util.ui.interaction.MouseMotionListener"] = function() { }
com.wiris.util.ui.interaction.MouseMotionListener.__name__ = ["com","wiris","util","ui","interaction","MouseMotionListener"];
com.wiris.util.ui.interaction.MouseMotionListener.prototype = {
	mouseMove: null
	,__class__: com.wiris.util.ui.interaction.MouseMotionListener
}
com.wiris.util.ui.component.DrawingPanel = $hxClasses["com.wiris.util.ui.component.DrawingPanel"] = function() {
	com.wiris.util.ui.component.BorderPanel.call(this,true);
	this.addClass(com.wiris.util.ui.component.DrawingPanel.CLASS_DRAWING_PANEL).addClass(com.wiris.util.ui.component.DrawingPanel.CLASS_DRAWING_PANEL_EMPTY);
	this.strokes = this.newStrokeBuffer(null);
	this.resetUndoBuffer();
	this.strokesZoom = 1;
	this.strokesDX = 0;
	this.strokesDY = 0;
	this.canvasWidth = -1;
	this.canvasHeight = -1;
	this.painting = false;
	this.playing = false;
	this.readOnly = false;
	this.listeningToDisplayChanges = true;
	this.listeners = new Array();
	this.lineWidth = com.wiris.util.ui.component.DrawingPanel.DEFAULT_LINE_WIDTH;
	this.lineColor = com.wiris.util.ui.component.DrawingPanel.DEFAULT_LINE_COLOR;
	this.deletionLineColor = com.wiris.util.ui.component.DrawingPanel.DEFAULT_DELETION_LINE_COLOR;
	this.deletedStrokeColor = com.wiris.util.ui.component.DrawingPanel.DEFAULT_DELETED_STROKE_COLOR;
	this.deletionGestureEnabled = true;
	this.emptyStyleShown = true;
	this.addDefaultMouseListener(this);
	this.addDefaultMouseMotionListener(this);
	this.addDefaultTouchListener(this);
	this.addChangeListener(this);
};
com.wiris.util.ui.component.DrawingPanel.__name__ = ["com","wiris","util","ui","component","DrawingPanel"];
com.wiris.util.ui.component.DrawingPanel.__interfaces__ = [com.wiris.util.graphics.DisplayDrawingListener,com.wiris.util.ui.interaction.TouchListener,com.wiris.util.ui.interaction.ChangeListener,com.wiris.util.ui.interaction.MouseMotionListener,com.wiris.util.ui.interaction.MouseListener];
com.wiris.util.ui.component.DrawingPanel.getScribblePolygon = function(stroke,minimumDiagonalIntersections,diagonalOffset,rectangleThickness,safeMargin) {
	if(stroke.length == 0) return null;
	var i = HxOverrides.iter(stroke);
	var deletionPoint = i.next();
	var minX = deletionPoint[0];
	var maxX = deletionPoint[0];
	var minY = deletionPoint[1];
	var maxY = deletionPoint[1];
	var isDeletionGesture = false;
	var m = minimumDiagonalIntersections;
	while(i.hasNext()) {
		deletionPoint = i.next();
		if(deletionPoint[0] < minX) minX = deletionPoint[0];
		if(deletionPoint[0] > maxX) maxX = deletionPoint[0];
		if(deletionPoint[1] < minY) minY = deletionPoint[1];
		if(deletionPoint[1] > maxY) maxY = deletionPoint[1];
		if(!isDeletionGesture) {
			var leftTopToRightBottomIntersections1 = 0;
			var leftTopToRightBottomIntersections2 = 0;
			var rightTopToLeftBottomIntersections1 = 0;
			var rightTopToLeftBottomIntersections2 = 0;
			var hOffset = (maxX - minX) * diagonalOffset;
			var vOffset = (maxY - minY) * diagonalOffset;
			var j = HxOverrides.iter(stroke);
			var deletionStrokePointA = j.next();
			while(j.hasNext()) {
				var deletionStrokePointB = j.next();
				if(com.wiris.util.geometry.GeometryTools.segmentsIntersect(deletionStrokePointA,deletionStrokePointB,[minX + hOffset,minY],[maxX,maxY - vOffset])) ++leftTopToRightBottomIntersections1;
				if(com.wiris.util.geometry.GeometryTools.segmentsIntersect(deletionStrokePointA,deletionStrokePointB,[minX,minY + vOffset],[maxX - hOffset,maxY])) ++leftTopToRightBottomIntersections2;
				if(com.wiris.util.geometry.GeometryTools.segmentsIntersect(deletionStrokePointA,deletionStrokePointB,[maxX - hOffset,minY],[minX,maxY - vOffset])) ++rightTopToLeftBottomIntersections1;
				if(com.wiris.util.geometry.GeometryTools.segmentsIntersect(deletionStrokePointA,deletionStrokePointB,[maxX,minY + vOffset],[minX + hOffset,maxY])) ++rightTopToLeftBottomIntersections2;
				deletionStrokePointA = deletionStrokePointB;
			}
			if(leftTopToRightBottomIntersections1 >= m && leftTopToRightBottomIntersections2 >= m || rightTopToLeftBottomIntersections1 >= m && rightTopToLeftBottomIntersections2 >= m) isDeletionGesture = true;
		}
	}
	if(!isDeletionGesture) return null;
	return com.wiris.util.geometry.GeometryTools.polyineToPolygonImpl(stroke,rectangleThickness,minX,minY,maxX,maxY,safeMargin);
}
com.wiris.util.ui.component.DrawingPanel.__super__ = com.wiris.util.ui.component.BorderPanel;
com.wiris.util.ui.component.DrawingPanel.prototype = $extend(com.wiris.util.ui.component.BorderPanel.prototype,{
	setReadOnly: function(readOnly) {
		this.readOnly = readOnly;
	}
	,fireDrawingStrokesChangedEvent: function() {
		var i = HxOverrides.iter(this.listeners);
		this.listeningToDisplayChanges = false;
		while(i.hasNext()) i.next().drawingStrokesChanged(this);
		this.listeningToDisplayChanges = true;
	}
	,handwritingChanged: function(strokes) {
		if(this.listeningToDisplayChanges) {
			if(strokes != null) this.setStrokes(strokes); else this.clear();
		}
	}
	,updateEmptyStyle: function() {
		if(this.strokes.length == 0 && this.emptyStyleShown && !this.readOnly) this.addClass(com.wiris.util.ui.component.DrawingPanel.CLASS_DRAWING_PANEL_EMPTY); else this.removeClass(com.wiris.util.ui.component.DrawingPanel.CLASS_DRAWING_PANEL_EMPTY);
	}
	,stateChanged: function(e) {
		this.updateEmptyStyle();
	}
	,discardLastUndoItem: function() {
		this.undoBuffer.splice(this.undoPosition - 1,1);
		--this.undoPosition;
	}
	,insertUndoItem: function(undoItem) {
		this.undoBuffer.splice(this.undoPosition,0,undoItem);
		++this.undoPosition;
		this.deleteRedoBuffer();
	}
	,deleteRedoBuffer: function() {
		this.undoBuffer.splice(this.undoPosition,this.undoBuffer.length - this.undoPosition);
	}
	,resetUndoBuffer: function() {
		this.undoBuffer = new Array();
		this.undoPosition = 0;
	}
	,strokeIsDeleted: function(stroke,deletionPolygon) {
		if(stroke.length == 0) return false;
		var i = HxOverrides.iter(stroke);
		var strokeSegmentPointA = i.next();
		if(com.wiris.util.geometry.GeometryTools.pointInsidePolygon(strokeSegmentPointA,deletionPolygon)) return true;
		while(i.hasNext()) {
			var strokeSegmentPointB = i.next();
			if(com.wiris.util.geometry.GeometryTools.pointInsidePolygon(strokeSegmentPointB,deletionPolygon)) return true;
			var j = HxOverrides.iter(deletionPolygon);
			var deletionPolygonSegmentPointA = j.next();
			while(j.hasNext()) {
				var deletionPolygonSegmentPointB = j.next();
				if(com.wiris.util.geometry.GeometryTools.segmentsIntersect(strokeSegmentPointA,strokeSegmentPointB,deletionPolygonSegmentPointA,deletionPolygonSegmentPointB)) return true;
				deletionPolygonSegmentPointA = deletionPolygonSegmentPointB;
			}
			strokeSegmentPointA = strokeSegmentPointB;
		}
		return false;
	}
	,strokeIsContained: function(stroke,stack) {
		if(stroke == null || stack == null) return false;
		var i = HxOverrides.iter(stack);
		while(i.hasNext()) if(i.next() == stroke) return true;
		return false;
	}
	,applyDeletionGesture: function() {
		this.strokes.pop();
		this.discardLastUndoItem();
		var i = 0;
		while(i < this.strokes.length) if(this.strokeIsContained(this.strokes[i],this.lastDeletedStrokes)) {
			var undoItem = new Hash();
			undoItem.set("type",com.wiris.util.ui.component.DrawingPanel.UNDO_TYPE_REMOVE);
			undoItem.set("stroke",this.strokes[i]);
			undoItem.set("position",i);
			this.insertUndoItem(undoItem);
			this.strokes.splice(i,1);
		} else ++i;
	}
	,addPoint: function(point) {
		if(this.strokes.length == 0) return;
		if(point[0] < 0 || point[1] < 0 || point[0] > this.canvasWidth || point[1] > this.canvasHeight) return;
		this.strokes[this.strokes.length - 1].push(this.realToVirtualPoint(point));
		this.changeState();
		var i = HxOverrides.iter(this.listeners);
		while(i.hasNext()) i.next().drawingPointsChanged(this);
	}
	,startStroke: function() {
		var stroke = new Array();
		this.strokes.push(stroke);
		var undoItem = new Hash();
		undoItem.set("type",com.wiris.util.ui.component.DrawingPanel.UNDO_TYPE_ADD);
		undoItem.set("stroke",stroke);
		this.insertUndoItem(undoItem);
		return stroke;
	}
	,newStrokeBuffer: function(source) {
		var result = new Array();
		if(source != null) {
			var i = HxOverrides.iter(source);
			while(i.hasNext()) result.push(i.next());
		}
		return result;
	}
	,touchMove: function(e) {
		if(e.getTouches().length > 1) return;
		if(this.painting) {
			e.preventDefault();
			var touch = e.getTouches()[0];
			this.addPoint([touch.getX(),touch.getY()]);
		}
	}
	,touchRelease: function(e) {
		this.mouseRelease(null);
		e.preventDefault();
	}
	,touchPress: function(e) {
		if(this.readOnly) return;
		if(e.getTouches().length > 1) {
			if(this.painting && e.getTouches().length == 2) {
				this.painting = false;
				this.undo();
			}
			return;
		}
		this.startStroke();
		var touch = e.getTouches()[0];
		this.addPoint([touch.getX(),touch.getY()]);
		this.painting = true;
	}
	,mouseExit: function(e) {
		this.mouseRelease(e);
	}
	,mouseEnter: function(e) {
	}
	,mouseRelease: function(e) {
		var wasPainting = this.painting;
		if(this.getDeletionPolygon() != null) {
			this.applyDeletionGesture();
			this.painting = false;
			this.changeState();
		} else this.painting = false;
		if(wasPainting) this.fireDrawingStrokesChangedEvent();
	}
	,mouseMove: function(e) {
		if(this.painting) {
			e.preventDefault();
			this.addPoint([e.getX(),e.getY()]);
		}
	}
	,mousePress: function(e) {
		if(e.getButton() != com.wiris.util.ui.interaction.MouseButtonCode.LEFT_BUTTON || this.readOnly) return;
		e.preventDefault();
		this.startStroke();
		this.addPoint([e.getX(),e.getY()]);
		this.painting = true;
	}
	,mouseDoubleClick: function(e) {
	}
	,mouseClick: function(e) {
	}
	,canRedo: function() {
		return this.undoPosition < this.undoBuffer.length;
	}
	,canUndo: function() {
		return this.undoPosition > 0;
	}
	,isEmpty: function() {
		return this.strokes.length == 0;
	}
	,clear: function() {
		var undoItem = new Hash();
		undoItem.set("type",com.wiris.util.ui.component.DrawingPanel.UNDO_TYPE_CLEAR);
		undoItem.set("strokes",this.newStrokeBuffer(this.strokes));
		this.insertUndoItem(undoItem);
		this.strokes = this.newStrokeBuffer(null);
		this.fireDrawingStrokesChangedEvent();
		this.changeState();
	}
	,redo: function() {
		if(this.undoPosition >= this.undoBuffer.length) return;
		var undoItem = this.undoBuffer[this.undoPosition];
		++this.undoPosition;
		var undoType = undoItem.get("type");
		if(undoType == com.wiris.util.ui.component.DrawingPanel.UNDO_TYPE_ADD) this.strokes.push(undoItem.get("stroke")); else if(undoType == com.wiris.util.ui.component.DrawingPanel.UNDO_TYPE_REMOVE) this.strokes.splice(undoItem.get("position"),1); else if(undoType == com.wiris.util.ui.component.DrawingPanel.UNDO_TYPE_CLEAR) this.strokes = this.newStrokeBuffer(null);
		this.fireDrawingStrokesChangedEvent();
		this.changeState();
	}
	,undo: function() {
		if(this.undoPosition == 0) return;
		--this.undoPosition;
		var undoItem = this.undoBuffer[this.undoPosition];
		var undoType = undoItem.get("type");
		if(undoType == com.wiris.util.ui.component.DrawingPanel.UNDO_TYPE_ADD) this.strokes.pop(); else if(undoType == com.wiris.util.ui.component.DrawingPanel.UNDO_TYPE_REMOVE) this.strokes.splice(undoItem.get("position"),0,undoItem.get("stroke")); else if(undoType == com.wiris.util.ui.component.DrawingPanel.UNDO_TYPE_CLEAR) this.strokes = this.newStrokeBuffer(undoItem.get("strokes"));
		this.fireDrawingStrokesChangedEvent();
		this.changeState();
	}
	,realToVirtualPointY: function(y) {
		return (y - this.strokesDY) / this.strokesZoom;
	}
	,realToVirtualPointX: function(x) {
		return (x - this.strokesDX) / this.strokesZoom;
	}
	,realToVirtualPoint: function(point) {
		return [this.realToVirtualPointX(point[0]),this.realToVirtualPointY(point[1])];
	}
	,virtualToRealPointY: function(y) {
		return this.strokesDY + y * this.strokesZoom;
	}
	,virtualToRealPointX: function(x) {
		return this.strokesDX + x * this.strokesZoom;
	}
	,virtualToRealPoint: function(point) {
		return [this.virtualToRealPointX(point[0]),this.virtualToRealPointY(point[1])];
	}
	,strokeWillBeDeleted: function(stroke) {
		return this.strokeIsContained(stroke,this.lastDeletedStrokes);
	}
	,getDeletionPolygon: function() {
		if(!this.deletionGestureEnabled || !this.painting && !this.playing || this.strokes.length == 0) return null;
		var deletionPolygon = com.wiris.util.ui.component.DrawingPanel.getScribblePolygon(this.strokes[this.strokes.length - 1],com.wiris.util.ui.component.DrawingPanel.DELETION_GESTURE_INTERSECTIONS,com.wiris.util.ui.component.DrawingPanel.DELETION_DIAGONAL_OFFSET,com.wiris.util.ui.component.DrawingPanel.DELETION_RECTANGLE_THICKNESS / this.strokesZoom,com.wiris.util.ui.component.DrawingPanel.DELETION_SAFE_MARGIN / this.strokesZoom);
		if(deletionPolygon == null) return null;
		var i = 0;
		var n = this.strokes.length - 1;
		this.lastDeletedStrokes = this.newStrokeBuffer(null);
		while(i < n) {
			var stroke = this.strokes[i];
			if(!this.strokeIsContained(stroke,this.lastDeletedStrokes) && this.strokeIsDeleted(stroke,deletionPolygon)) this.lastDeletedStrokes.push(stroke);
			++i;
		}
		if(this.lastDeletedStrokes.length == 0) return null;
		return deletionPolygon;
	}
	,isEmptyStyleShown: function() {
		return this.emptyStyleShown;
	}
	,showEmptyStyle: function(enabled) {
		this.emptyStyleShown = enabled;
		this.updateEmptyStyle();
	}
	,isDeletionGestureEnabled: function() {
		return this.deletionGestureEnabled;
	}
	,setDeletionGestureEnabled: function(enabled) {
		this.deletionGestureEnabled = enabled;
	}
	,setDeletedStrokeColor: function(deletedStrokeColor) {
		this.deletedStrokeColor = deletedStrokeColor;
	}
	,getDeletedStrokeColor: function() {
		return this.deletedStrokeColor;
	}
	,setDeletionLineColor: function(deletionLineColor) {
		this.deletionLineColor = deletionLineColor;
	}
	,getDeletionLineColor: function() {
		return this.deletionLineColor;
	}
	,setLineColor: function(lineColor) {
		this.lineColor = lineColor;
	}
	,getLineColor: function() {
		return this.lineColor;
	}
	,setLineWidth: function(lineWidth) {
		this.lineWidth = lineWidth;
	}
	,getLineWidth: function() {
		return this.lineWidth;
	}
	,setStrokes: function(strokes) {
		this.strokes = strokes;
		this.resetUndoBuffer();
		this.changeState();
	}
	,getStrokesAsString: function() {
		if(this.strokes == null || this.strokes.length == 0) return "[]";
		var strokesResult = new Array();
		var i = HxOverrides.iter(this.strokes);
		while(i.hasNext()) {
			var stroke = i.next();
			var strokeResult = new Array();
			var j = HxOverrides.iter(stroke);
			while(j.hasNext()) {
				var point = j.next();
				strokeResult.push("[" + point[0] + "," + point[1] + "]");
			}
			strokesResult.push("[" + strokeResult.join(",") + "]");
		}
		return "[" + strokesResult.join(",") + "]";
	}
	,getStrokes: function() {
		return this.strokes;
	}
	,setCanvasSize: function(width,height) {
		this.canvasWidth = width;
		this.canvasHeight = height;
	}
	,getCanvasHeight: function() {
		return this.canvasHeight;
	}
	,getCanvasWidth: function() {
		return this.canvasWidth;
	}
	,addDrawingListener: function(listener) {
		this.listeners.push(listener);
	}
	,listeningToDisplayChanges: null
	,emptyStyleShown: null
	,deletionGestureEnabled: null
	,deletedStrokeColor: null
	,deletionLineColor: null
	,lineColor: null
	,lineWidth: null
	,listeners: null
	,undoPosition: null
	,undoBuffer: null
	,lastDeletedStrokes: null
	,readOnly: null
	,playing: null
	,painting: null
	,canvasHeight: null
	,canvasWidth: null
	,strokesDY: null
	,strokesDX: null
	,strokesZoom: null
	,strokes: null
	,__class__: com.wiris.util.ui.component.DrawingPanel
});
com.wiris.util.ui.component.Dropdown = $hxClasses["com.wiris.util.ui.component.Dropdown"] = function() {
	com.wiris.util.ui.component.ContextMenuButton.call(this);
	this.addClass(com.wiris.util.ui.component.Dropdown.CLASS_DROPDOWN);
	this.getStyle().setWidth(com.wiris.util.ui.Style.SIZE_FULL).setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_LEFT);
	this.getContextPanel().addClass(com.wiris.util.ui.component.Dropdown.CLASS_DROPDOWN_DIALOG);
	this.getContextPanel().addClass(com.wiris.util.ui.component.Dropdown.CLASS_DROPDOWN_TICKABLE);
	this.currentValue = null;
	this.title = null;
	this.helperText = null;
	this.changeValueAction = null;
	this.visibleSelectionText = true;
};
com.wiris.util.ui.component.Dropdown.__name__ = ["com","wiris","util","ui","component","Dropdown"];
com.wiris.util.ui.component.Dropdown.__interfaces__ = [com.wiris.util.ui.component.Field];
com.wiris.util.ui.component.Dropdown.__super__ = com.wiris.util.ui.component.ContextMenuButton;
com.wiris.util.ui.component.Dropdown.prototype = $extend(com.wiris.util.ui.component.ContextMenuButton.prototype,{
	actionPerformed: function(e) {
		this.pickValue(e.getAction().getId());
		this.hideContextPanel();
	}
	,getComponent: function() {
		return this;
	}
	,updateVisibleValue: function() {
		if(this.visibleSelectionText) this.setText(this.options.get(this.currentValue).getText());
		if(this.visibleSelectionIcon) this.setNormalIcon(this.options.get(this.currentValue).getNormalIcon());
	}
	,hasValue: function(value) {
		return value != null && this.options.exists(value);
	}
	,pickValue: function(value) {
		if(value == null || value == this.currentValue) return;
		if(this.options.get(value) != null) {
			if(this.currentValue != null && this.options.get(this.currentValue) != null) this.getCurrentOption().removeClass(com.wiris.util.ui.component.Dropdown.CLASS_DROPDOWN_BUTTON_TICKED);
			this.currentValue = value;
			this.getCurrentOption().addClass(com.wiris.util.ui.component.Dropdown.CLASS_DROPDOWN_BUTTON_TICKED);
			this.updateVisibleValue();
			this.changeState();
			if(this.changeValueAction != null) this.performAction(this.changeValueAction);
		}
	}
	,setVisibleSelection: function(visibleText,visibleIcon) {
		this.visibleSelectionText = visibleText;
		this.visibleSelectionIcon = visibleIcon;
		if((visibleIcon || visibleText) && this.currentValue != null && this.options.get(this.currentValue) != null) this.updateVisibleValue(); else {
			this.setText(null);
			if(this.currentValue != null && this.options.get(this.currentValue) != null) this.getCurrentOption().addClass(com.wiris.util.ui.component.Dropdown.CLASS_DROPDOWN_BUTTON_TICKED);
		}
	}
	,getActiveElement: function() {
		return this.options.get(this.getValue());
	}
	,isVisibleSelection: function() {
		return this.visibleSelectionText;
	}
	,setTickable: function(tickable) {
		if(tickable) this.getContextPanel().addClass(com.wiris.util.ui.component.Dropdown.CLASS_DROPDOWN_TICKABLE); else this.getContextPanel().removeClass(com.wiris.util.ui.component.Dropdown.CLASS_DROPDOWN_TICKABLE);
	}
	,isTickable: function() {
		return this.getContextPanel().hasClass(com.wiris.util.ui.component.Dropdown.CLASS_DROPDOWN_TICKABLE);
	}
	,getChangeValueAction: function() {
		return this.changeValueAction;
	}
	,setChangeValueAction: function(action) {
		this.changeValueAction = action;
	}
	,getHelperText: function() {
		return this.helperText;
	}
	,setHelperText: function(helperText) {
		this.helperText = helperText;
	}
	,getTitle: function() {
		return this.title;
	}
	,setTitle: function(title) {
		this.title = title;
		this.changeState();
	}
	,getCurrentOption: function() {
		return this.getOption(this.currentValue);
	}
	,resetValue: function() {
		this.setValue(this.ids[0]);
	}
	,getValue: function() {
		return this.currentValue;
	}
	,setValue: function(value) {
		this.pickValue(value);
	}
	,disableValue: function(value) {
		var button = this.options.get(value);
		if(button != null) button.setEnabled(false);
	}
	,enableValue: function(value) {
		var button = this.options.get(value);
		if(button != null) button.setEnabled(true);
	}
	,removeAllValues: function() {
		this.removeAllOptions();
	}
	,removeValue: function(value) {
		this.removeOption(value);
	}
	,addValueWithTextAndIcon: function(value,label,icon) {
		var button = this.addOptionWithTextAndIcon(value,label,icon,new com.wiris.util.ui.Action(value,null));
		if(this.currentValue == null) this.pickValue(value);
		return button;
	}
	,addValueWithIcon: function(value,tooltip,icon) {
		var button = this.addOptionWithIcon(value,tooltip,icon,new com.wiris.util.ui.Action(value,null));
		if(this.currentValue == null) this.pickValue(value);
		return button;
	}
	,addValue: function(value,text) {
		var button = this.addOption(value,text,new com.wiris.util.ui.Action(value,null));
		if(this.currentValue == null) this.pickValue(value);
		return button;
	}
	,visibleSelectionIcon: null
	,visibleSelectionText: null
	,changeValueAction: null
	,helperText: null
	,title: null
	,currentValue: null
	,__class__: com.wiris.util.ui.component.Dropdown
});
com.wiris.util.ui.component.DropdownTextField = $hxClasses["com.wiris.util.ui.component.DropdownTextField"] = function() {
	com.wiris.util.ui.component.TextField.call(this);
	this.addClass(com.wiris.util.ui.component.DropdownTextField.CLASS_DROPDOWN_TEXT_FIELD);
	this.getStyle().setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_LEFT);
	this.focusedOption = -1;
	this.autocomplete = false;
	this.values = new Array();
	this.buttons = new com.wiris.util.type.SortedHash();
	this.contextMenu = new com.wiris.util.ui.component.ContextMenu();
	this.contextMenu.addClass(com.wiris.util.ui.component.DropdownTextField.CLASS_DROPDOWN_TEXT_FIELD_DIALOG);
	this.contextMenu.setParent(this);
	this.contextMenu.setVisible(false);
	this.contextMenu.setOpenAnimationMode(com.wiris.util.ui.component.ContextPanel.ANIMATION_MODE_TOP_TO_BOTTOM);
	this.contextMenu.setAnchor(com.wiris.util.ui.component.ContextPanel.ANCHOR_TOP | com.wiris.util.ui.component.ContextPanel.ANCHOR_LEFT);
	this.contextMenu.setParentAnchor(com.wiris.util.ui.component.ContextPanel.ANCHOR_BOTTOM | com.wiris.util.ui.component.ContextPanel.ANCHOR_LEFT);
	this.contextMenu.addActionListener(this);
	this.contextMenu.addComponentListener(this);
	this.addFocusListener(this);
	this.addKeyListener(this);
};
com.wiris.util.ui.component.DropdownTextField.__name__ = ["com","wiris","util","ui","component","DropdownTextField"];
com.wiris.util.ui.component.DropdownTextField.__interfaces__ = [com.wiris.util.sys.TimerTask,com.wiris.util.ui.interaction.KeyListener,com.wiris.util.ui.interaction.FocusListener,com.wiris.util.ui.interaction.ComponentListener,com.wiris.util.ui.interaction.ActionListener];
com.wiris.util.ui.component.DropdownTextField.__super__ = com.wiris.util.ui.component.TextField;
com.wiris.util.ui.component.DropdownTextField.prototype = $extend(com.wiris.util.ui.component.TextField.prototype,{
	run: function(timer) {
		this.hideContextPanel();
	}
	,keyType: function(e) {
	}
	,keyRelease: function(e) {
	}
	,keyPress: function(e) {
		if(this.isEnabled()) {
			if(this.getContextMenu().isVisible()) {
				var keyCode = e.getKeyCode();
				if(com.wiris.util.ui.interaction.KeyCode.UP == keyCode) {
					if(this.isOptionVisible()) {
						do if(this.focusedOption < 0) this.focusedOption = this.values.length - 1; else {
							this.buttons.get(this.values[this.focusedOption]).removeClass(com.wiris.util.ui.component.Component.CLASS_FOCUSED);
							if(this.focusedOption == 0) this.focusedOption = this.values.length - 1; else this.focusedOption -= 1;
						} while(!this.buttons.get(this.values[this.focusedOption]).isVisible());
						this.buttons.get(this.values[this.focusedOption]).addClass(com.wiris.util.ui.component.Component.CLASS_FOCUSED);
					}
				} else if(com.wiris.util.ui.interaction.KeyCode.DOWN == keyCode) {
					if(this.isOptionVisible()) {
						do if(this.focusedOption < 0) this.focusedOption = 0; else {
							this.buttons.get(this.values[this.focusedOption]).removeClass(com.wiris.util.ui.component.Component.CLASS_FOCUSED);
							if(this.focusedOption == this.values.length - 1) this.focusedOption = 0; else this.focusedOption += 1;
						} while(!this.buttons.get(this.values[this.focusedOption]).isVisible());
						this.buttons.get(this.values[this.focusedOption]).addClass(com.wiris.util.ui.component.Component.CLASS_FOCUSED);
					}
				} else if(com.wiris.util.ui.interaction.KeyCode.ENTER == keyCode) {
					this.pickFocusedOption();
					this.hideContextPanel();
				} else if(com.wiris.util.ui.interaction.KeyCode.ESCAPE == keyCode) {
					this.hideContextPanel();
					e.stopPropagation();
				}
			} else if(this.isOptionVisible()) this.showContextPanel();
		}
	}
	,actionPerformed: function(e) {
		var action = e.getAction();
		var actionId = action.getId();
		this.pickOption(actionId);
		this.hideContextPanel();
	}
	,styleChanged: function(e) {
	}
	,blurRequested: function(e) {
	}
	,focusRequested: function(e) {
	}
	,draggableChanged: function(e) {
	}
	,enabledChanged: function(e) {
	}
	,visibilityChanged: function(e) {
		if(e.getSource().isVisible()) this.addClass(com.wiris.util.ui.component.DropdownTextField.CLASS_DROPDOWN_TEXT_FIELD_PRESSED); else {
			if(this.focusedOption != -1) {
				this.buttons.get(this.values[this.focusedOption]).removeClass(com.wiris.util.ui.component.Component.CLASS_FOCUSED);
				this.focusedOption = -1;
			}
			this.removeClass(com.wiris.util.ui.component.DropdownTextField.CLASS_DROPDOWN_TEXT_FIELD_PRESSED);
		}
	}
	,focusLost: function(e) {
		if(this.isEnabled()) new com.wiris.util.sys.TimerProxy(150,true,this);
	}
	,focusGained: function(e) {
		if(this.isEnabled()) this.showContextPanel();
	}
	,setValue: function(value) {
		com.wiris.util.ui.component.TextField.prototype.setValue.call(this,value);
		if(!(value == "") && this.autocomplete) {
			var buttons = this.getMatchingButtons(value);
			var i = this.buttons.keys();
			while(i.hasNext()) {
				var button = this.buttons.get(i.next());
				button.setVisible(com.wiris.system.ArrayEx.contains(buttons,button));
			}
			if(buttons.length > 0) this.showContextPanel(); else this.hideContextPanel();
		} else {
			var i = this.buttons.keys();
			while(i.hasNext()) this.buttons.get(i.next()).setVisible(true);
		}
	}
	,hideContextPanel: function() {
		this.getContextMenu().setVisible(false);
	}
	,showContextPanel: function() {
		this.getContextMenu().getStyle().setMinWidth(this.getComputedStyle().getOffsetWidth());
		this.getContextMenu().setVisible(true);
	}
	,pickFocusedOption: function() {
		if(this.focusedOption < 0) return;
		this.pickOption(this.values[this.focusedOption]);
	}
	,pickOption: function(value) {
		if(value == null || value == this.getValue()) return;
		if(this.buttons.exists(value)) {
			this.setValue(value);
			this.hideContextPanel();
		}
		this.requestFocus();
	}
	,removeAllOptions: function() {
		this.contextMenu.removeAllOptions();
		this.values = new Array();
		this.buttons = new com.wiris.util.type.SortedHash();
	}
	,removeOption: function(value) {
		this.contextMenu.removeOption(value);
		var index = com.wiris.util.type.Arrays.indexOfElement(this.values,value);
		HxOverrides.remove(this.values,value);
		this.buttons.remove(value);
	}
	,addOption: function(value,text) {
		var button = this.contextMenu.addOption(value,text,null,null,null,new com.wiris.util.ui.Action(value,null));
		this.buttons.set(value,button);
		this.values.push(value);
		return this;
	}
	,isOptionVisible: function() {
		return this.getMatchingButtons(this.getValue()).length > 0;
	}
	,getMatchingButtons: function(value) {
		var buttons = new Array();
		var i = HxOverrides.iter(this.values);
		while(i.hasNext()) {
			var button = this.buttons.get(i.next());
			var text = button.getText();
			if(StringTools.startsWith(text,value) && text == value) buttons.push(button);
		}
		return buttons;
	}
	,setAutocomplete: function(autocomplete) {
		this.autocomplete = autocomplete;
		if(!this.autocomplete) {
			var i = this.buttons.keys();
			while(i.hasNext()) this.buttons.get(i.next()).setVisible(true);
		}
		return this;
	}
	,isAutocomplete: function() {
		return this.autocomplete;
	}
	,getContextMenu: function() {
		return this.contextMenu;
	}
	,buttons: null
	,values: null
	,contextMenu: null
	,autocomplete: null
	,focusedOption: null
	,__class__: com.wiris.util.ui.component.DropdownTextField
});
com.wiris.util.ui.component.ExpansionPanel = $hxClasses["com.wiris.util.ui.component.ExpansionPanel"] = function() {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.getStyle().setHorizontalAlignment(com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_STRETCH);
	this.addClass(com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL);
	this.addClass(com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL_COLLAPSED);
	this.expanded = false;
	this.summary = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.summary.addClass(com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL_SUMMARY);
	this.content = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.content.addClass(com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL_CONTENT);
	this.primaryLabel = null;
	this.secondaryLabels = new Array();
	this.summary.addDefaultMouseListener(this);
	this.summary.addKeyListener(this);
};
com.wiris.util.ui.component.ExpansionPanel.__name__ = ["com","wiris","util","ui","component","ExpansionPanel"];
com.wiris.util.ui.component.ExpansionPanel.__interfaces__ = [com.wiris.util.ui.interaction.KeyListener,com.wiris.util.ui.interaction.MouseListener];
com.wiris.util.ui.component.ExpansionPanel.newExpansionPanel = function(primaryLabel,secondaryLabels,expandCollapseAction,listener) {
	var expansionPanel = new com.wiris.util.ui.component.ExpansionPanel();
	if(primaryLabel != null) expansionPanel.setPrimaryTextLabel(primaryLabel);
	if(secondaryLabels != null) {
		var secondaryLabelsIterator = HxOverrides.iter(secondaryLabels);
		while(secondaryLabelsIterator.hasNext()) expansionPanel.addSecondaryTextLabel(secondaryLabelsIterator.next());
	}
	expansionPanel.setExpandCollapseAction(expandCollapseAction);
	expansionPanel.addActionListener(listener);
	return expansionPanel;
}
com.wiris.util.ui.component.ExpansionPanel.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.util.ui.component.ExpansionPanel.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	keyType: function(e) {
	}
	,keyRelease: function(e) {
		if(e.getSource() == this.summary) {
			var code = e.getKeyCode();
			if(code == 10 || code == 13 || code == 32) {
				if(!this.isEnabled()) return;
				e.preventDefault();
				if(!this.isExpanded()) this.expand(); else this.collapse();
				if(this.expandCollapseAction != null) this.performAction(this.expandCollapseAction);
			}
		}
	}
	,keyPress: function(e) {
	}
	,mouseExit: function(e) {
	}
	,mouseEnter: function(e) {
	}
	,mouseRelease: function(e) {
	}
	,mousePress: function(e) {
	}
	,mouseDoubleClick: function(e) {
	}
	,mouseClick: function(e) {
		if(e.getSource() == this.summary && e.getTarget() != this.helpActionButton) {
			if(!this.isEnabled()) return;
			e.preventDefault();
			if(!this.isExpanded()) this.expand(); else this.collapse();
			if(this.expandCollapseAction != null) this.performAction(this.expandCollapseAction);
		}
	}
	,addSecondaryTextLabel: function(text) {
		var secondaryLabel = com.wiris.util.ui.component.Label.newWithText(text);
		return this.addSecondaryLabel(secondaryLabel);
	}
	,setHoverIcon: function(icon,action,tooltip,listener) {
		this.helpActionButton = com.wiris.util.ui.component.Button.newWithIcon(tooltip,icon,action,listener);
		this.helpActionButton.addClass(com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL_HOVER_ICON);
		this.summary.addComponent(this.helpActionButton);
	}
	,addSecondaryLabel: function(secondaryLabel) {
		secondaryLabel.addClass(com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL_SECONDARY_LABEL);
		this.summary.addComponent(secondaryLabel);
		this.secondaryLabels.push(secondaryLabel);
		this.changeState();
		return secondaryLabel;
	}
	,setPrimaryTextLabel: function(text) {
		var primaryLabel = com.wiris.util.ui.component.Label.newWithText(text);
		primaryLabel.addClass(com.wiris.util.ui.component.Label.CLASS_LABEL_IMPORTANT);
		this.setPrimaryLabel(primaryLabel);
	}
	,setPrimaryLabel: function(primaryLabel) {
		if(this.primaryLabel != null) this.summary.removeComponent(0);
		primaryLabel.addClass(com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL_PRIMARY_LABEL);
		this.summary.insertComponentAt(primaryLabel,0);
		this.primaryLabel = primaryLabel;
		this.changeState();
	}
	,addComponent: function(component) {
		this.content.addComponent(component);
	}
	,getSecondaryLabels: function() {
		return this.secondaryLabels;
	}
	,getPrimaryLabel: function() {
		return this.primaryLabel;
	}
	,getContent: function() {
		return this.content;
	}
	,getSummary: function() {
		return this.summary;
	}
	,setExpandCollapseAction: function(action) {
		this.expandCollapseAction = action;
	}
	,getExpandCollapseAction: function() {
		return this.expandCollapseAction;
	}
	,isExpanded: function() {
		return this.expanded;
	}
	,collapse: function() {
		if(!this.isExpanded()) return;
		this.expanded = false;
		this.removeClass(com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL_EXPANDED);
		this.addClass(com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL_COLLAPSED);
		this.changeState();
	}
	,expand: function() {
		if(this.isExpanded()) return;
		this.expanded = true;
		this.removeClass(com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL_COLLAPSED);
		this.addClass(com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL_EXPANDED);
		this.changeState();
	}
	,getComponentById: function(id) {
		if(this.content.getComponentById(id) != null) return this.content.getComponentById(id);
		if(this.summary.getComponentById(id) != null) return this.summary.getComponentById(id);
		return com.wiris.util.ui.component.FlowPanel.prototype.getComponentById.call(this,id);
	}
	,expandCollapseAction: null
	,secondaryLabels: null
	,primaryLabel: null
	,helpActionButton: null
	,content: null
	,summary: null
	,expanded: null
	,__class__: com.wiris.util.ui.component.ExpansionPanel
});
com.wiris.util.ui.component.ExpansionCheckbox = $hxClasses["com.wiris.util.ui.component.ExpansionCheckbox"] = function() {
	this.listening = true;
	com.wiris.util.ui.component.ExpansionPanel.call(this);
	this.addClass(com.wiris.util.ui.component.ExpansionCheckbox.CLASS_CHECKBOX_EXPANSION_PANEL);
	this.controller = new com.wiris.util.ui.controller.ExpansionCheckboxController(this);
	this.iconBox = new com.wiris.util.ui.component.IconBox();
	this.checkBox = com.wiris.util.ui.component.CheckBox.newCheckBox("",com.wiris.util.ui.component.ExpansionCheckbox.CHECKBOX_ID,new com.wiris.util.ui.Action("",""),this);
	this.divider = new com.wiris.util.ui.component.Divider(true);
	this.text = new com.wiris.util.ui.component.Label();
	this.wrapper = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.wrapper.addClass(com.wiris.util.ui.component.ExpansionCheckbox.CLASS_EXPANSION_CHECKBOX_WRAPPER);
	this.wrapper.addDefaultMouseListener(this);
	this.wrapper.addKeyListener(this);
	this.summary.addClass(com.wiris.util.ui.component.ExpansionCheckbox.CLASS_CHECKBOX_EXPANSION_PANEL_SUMMARY);
};
com.wiris.util.ui.component.ExpansionCheckbox.__name__ = ["com","wiris","util","ui","component","ExpansionCheckbox"];
com.wiris.util.ui.component.ExpansionCheckbox.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.util.ui.component.ExpansionCheckbox.createExpansionCheckbox = function(level,icon,title) {
	var expansionCheckbox = new com.wiris.util.ui.component.ExpansionCheckbox();
	expansionCheckbox.setLevel(level);
	expansionCheckbox.setIcon(icon);
	expansionCheckbox.setTitle(title);
	expansionCheckbox.refreshView();
	return expansionCheckbox;
}
com.wiris.util.ui.component.ExpansionCheckbox.__super__ = com.wiris.util.ui.component.ExpansionPanel;
com.wiris.util.ui.component.ExpansionCheckbox.prototype = $extend(com.wiris.util.ui.component.ExpansionPanel.prototype,{
	actionPerformed: function(e) {
		if(this.listening && e.getTarget() == this.checkBox) {
			this.controller.directUpdateState();
			this.performAction(new com.wiris.util.ui.Action(this.getId(),com.wiris.util.ui.component.ExpansionCheckbox.ACTION_CHECKBOX));
		}
	}
	,mouseClick: function(e) {
		if(e.getSource() == this.wrapper) {
			if(!this.isEnabled()) return;
			e.preventDefault();
			if(!this.isExpanded()) this.expand(); else this.collapse();
			if(this.expandCollapseAction != null) this.performAction(this.expandCollapseAction);
		}
	}
	,collapse: function() {
		if(this.controller.isParent()) {
			if(!this.isExpanded()) return;
			this.expanded = false;
			this.iconBox.setIcon(new com.wiris.util.ui.MaterialIcon(com.wiris.util.ui.component.ExpansionCheckbox.ICON_EXPAND_LESS));
			this.removeClass(com.wiris.util.ui.component.ExpansionCheckbox.CLASS_EXPANSION_PANEL_EXPANDED);
			this.addClass(com.wiris.util.ui.component.ExpansionCheckbox.CLASS_EXPANSION_PANEL_COLLAPSED);
			this.changeState();
		}
	}
	,expand: function() {
		if(this.controller.isParent()) {
			if(this.isExpanded()) return;
			this.expanded = true;
			this.iconBox.setIcon(new com.wiris.util.ui.MaterialIcon(com.wiris.util.ui.component.ExpansionCheckbox.ICON_EXPAND_MORE));
			this.removeClass(com.wiris.util.ui.component.ExpansionCheckbox.CLASS_EXPANSION_PANEL_COLLAPSED);
			this.addClass(com.wiris.util.ui.component.ExpansionCheckbox.CLASS_EXPANSION_PANEL_EXPANDED);
			this.changeState();
		}
	}
	,setState: function(state) {
		this.listening = false;
		if(state == com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_UNSELECTED) {
			this.checkBox.setSelected(false);
			this.checkBox.removeClass(com.wiris.util.ui.component.ExpansionCheckbox.CLASS_UNDETERMINED);
		} else if(state == com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_UNDETERMINED) {
			this.checkBox.addClass(com.wiris.util.ui.controller.SelectionController.CLASS_SELECTED);
			this.checkBox.addClass(com.wiris.util.ui.component.ExpansionCheckbox.CLASS_UNDETERMINED);
		} else if(state == com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_SELECTED) {
			this.checkBox.removeClass(com.wiris.util.ui.component.ExpansionCheckbox.CLASS_UNDETERMINED);
			this.checkBox.setSelected(true);
		}
		this.listening = true;
	}
	,getValue: function() {
		return this.value;
	}
	,setValue: function(value) {
		this.value = value;
	}
	,setLevel: function(level) {
		this.level = level;
	}
	,setTitle: function(title) {
		this.title = title;
	}
	,getTitle: function() {
		return this.title;
	}
	,setIcon: function(icon) {
		this.iconBox.setIcon(icon);
	}
	,getIcon: function() {
		return this.iconBox.getIcon();
	}
	,getController: function() {
		return this.controller;
	}
	,addExpansionCheckbox: function(expansionCheckbox) {
		this.getContent().addComponent(expansionCheckbox);
	}
	,refreshView: function() {
		this.wrapper.removeAllComponents();
		this.summary.removeAllComponents();
		this.text.setText(this.title);
		this.wrapper.setIndentationLevel(this.level);
		if(this.iconBox.getIcon() != null) this.wrapper.addComponent(this.iconBox); else this.text.getStyle().setMargin(0,0,0,20);
		this.wrapper.addComponent(this.text);
		this.summary.addComponent(this.checkBox);
		this.summary.addComponent(this.divider);
		this.summary.addComponent(this.wrapper);
	}
	,getCheckbox: function() {
		return this.checkBox;
	}
	,listening: null
	,wrapper: null
	,iconBox: null
	,divider: null
	,checkBox: null
	,value: null
	,title: null
	,text: null
	,level: null
	,controller: null
	,__class__: com.wiris.util.ui.component.ExpansionCheckbox
});
com.wiris.util.ui.component.FilterChip = $hxClasses["com.wiris.util.ui.component.FilterChip"] = function(id) {
	com.wiris.util.ui.component.Chip.call(this);
	this.addClass(com.wiris.util.ui.component.FilterChip.CLASS_FILTER_CHIP);
	this.selectableId = id;
	this.changeAction = null;
	this.selectionController = new com.wiris.util.ui.controller.SelectionController(id);
	this.selectionController.addSelectable(this,false);
};
com.wiris.util.ui.component.FilterChip.__name__ = ["com","wiris","util","ui","component","FilterChip"];
com.wiris.util.ui.component.FilterChip.__interfaces__ = [com.wiris.util.ui.controller.Selectable,com.wiris.util.ui.component.Field];
com.wiris.util.ui.component.FilterChip.newFilterChip = function(text,id,changeAction,listener) {
	var filterChip = new com.wiris.util.ui.component.FilterChip(id);
	filterChip.setText(text);
	filterChip.setChangeAction(changeAction);
	filterChip.addActionListener(listener);
	return filterChip;
}
com.wiris.util.ui.component.FilterChip.__super__ = com.wiris.util.ui.component.Chip;
com.wiris.util.ui.component.FilterChip.prototype = $extend(com.wiris.util.ui.component.Chip.prototype,{
	setSelected: function(selected) {
		this.selectionController.setSelected(this.selectableId,selected);
	}
	,isSelected: function() {
		return this.selectionController.isSelected(this.selectableId);
	}
	,setChangeAction: function(changeAction) {
		this.changeAction = changeAction;
	}
	,getChangeAction: function() {
		return this.changeAction;
	}
	,getSelectableId: function() {
		return this.selectableId;
	}
	,getComponent: function() {
		return this;
	}
	,setSelectionController: function(selectionController) {
		var selected = this.selectionController.isSelected(this.selectableId);
		if(this.selectionController != null) this.selectionController.removeSelectable(this.selectableId);
		this.selectionController = selectionController;
		this.selectionController.addSelectable(this,selected);
	}
	,getSelectionController: function() {
		return this.selectionController;
	}
	,setValue: function(value) {
		this.setSelected(!(value == "false"));
	}
	,getValue: function() {
		if(this.isSelected()) return "true";
		return "false";
	}
	,selectionController: null
	,changeAction: null
	,selectableId: null
	,__class__: com.wiris.util.ui.component.FilterChip
});
com.wiris.util.ui.component.FloatingPanel = $hxClasses["com.wiris.util.ui.component.FloatingPanel"] = function(x,y,direction,anchor) {
	com.wiris.util.ui.component.FlowPanel.call(this,direction);
	this.setPosition(x,y);
	this.anchor = anchor;
	this.addClass(com.wiris.util.ui.component.FloatingPanel.CLASS_FLOATING_PANEL);
};
com.wiris.util.ui.component.FloatingPanel.__name__ = ["com","wiris","util","ui","component","FloatingPanel"];
com.wiris.util.ui.component.FloatingPanel.__interfaces__ = [com.wiris.util.sys.TimerTask];
com.wiris.util.ui.component.FloatingPanel.newWithChild = function(x,y,direction,child) {
	var panel = new com.wiris.util.ui.component.FloatingPanel(x,y,direction,com.wiris.util.ui.component.FloatingPanel.defaultAnchor);
	panel.addComponent(child);
	return panel;
}
com.wiris.util.ui.component.FloatingPanel.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.util.ui.component.FloatingPanel.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	run: function(timer) {
		this.setVisible(false);
	}
	,getAnchor: function() {
		return this.anchor;
	}
	,setAnchor: function(anchor) {
		this.anchor = anchor;
		this.changeState();
	}
	,setPosition: function(x,y) {
		this.x = x;
		this.y = y;
		this.changeState();
	}
	,setY: function(y) {
		this.y = y;
		this.changeState();
	}
	,getAnchoredY: function() {
		return this.y;
	}
	,getY: function() {
		if(this.anchor.length < 2 || this.anchor[1] == null || this.anchor[1] == "" || this.anchor[1] == com.wiris.util.ui.component.FloatingPanel.ANCHOR_VERTICAL_TOP) return this.y; else if(this.anchor[1] == com.wiris.util.ui.component.FloatingPanel.ANCHOR_VERTICAL_CENTER) return this.y - this.getComputedStyle().getHeight() / 2; else if(this.anchor[1] == com.wiris.util.ui.component.FloatingPanel.ANCHOR_VERTICAL_BOTTOM) return this.y - this.getComputedStyle().getHeight();
		return this.y;
	}
	,setX: function(x) {
		this.x = x;
		this.changeState();
	}
	,getAnchoredX: function() {
		return this.x;
	}
	,getX: function() {
		if(this.anchor.length < 1 || this.anchor[0] == null || this.anchor[0] == "" || this.anchor[0] == com.wiris.util.ui.component.FloatingPanel.ANCHOR_HORIZONTAL_LEFT) return this.x; else if(this.anchor[0] == com.wiris.util.ui.component.FloatingPanel.ANCHOR_HORIZONTAL_CENTER) return this.x - this.getComputedStyle().getWidth() / 2; else if(this.anchor[0] == com.wiris.util.ui.component.FloatingPanel.ANCHOR_HORIZONTAL_RIGHT) return this.x - this.getComputedStyle().getWidth();
		return this.x;
	}
	,anchor: null
	,y: null
	,x: null
	,__class__: com.wiris.util.ui.component.FloatingPanel
});
com.wiris.util.ui.component.Form = $hxClasses["com.wiris.util.ui.component.Form"] = function() {
	com.wiris.util.ui.component.List.call(this);
	this.addClass(com.wiris.util.ui.component.Form.CLASS_FORM);
	this.fields = new Hash();
};
com.wiris.util.ui.component.Form.__name__ = ["com","wiris","util","ui","component","Form"];
com.wiris.util.ui.component.Form.__super__ = com.wiris.util.ui.component.List;
com.wiris.util.ui.component.Form.prototype = $extend(com.wiris.util.ui.component.List.prototype,{
	getField: function(name) {
		return this.fields.get(name);
	}
	,setValues: function(values) {
		var i = values.keys();
		while(i.hasNext()) {
			var key = i.next();
			var field = this.fields.get(key);
			if(field != null) this.fields.get(key).setValue(values.get(key));
		}
	}
	,getValues: function() {
		var values = new Hash();
		var i = this.fields.keys();
		while(i.hasNext()) {
			var key = i.next();
			values.set(key,this.fields.get(key).getValue());
		}
		return values;
	}
	,addField: function(name,text,description,field) {
		if(text == null) this.addCustomItem(null,field.getComponent(),null,0); else this.addItem(null,text,field.getComponent());
		this.fields.set(name,field);
	}
	,fields: null
	,__class__: com.wiris.util.ui.component.Form
});
com.wiris.util.ui.component.FormulaViewer = $hxClasses["com.wiris.util.ui.component.FormulaViewer"] = function() {
	com.wiris.util.ui.component.Component.call(this);
	this.addClass(com.wiris.util.ui.component.FormulaViewer.CLASS_FORMULA_VIEWER);
	this.mathML = null;
};
com.wiris.util.ui.component.FormulaViewer.__name__ = ["com","wiris","util","ui","component","FormulaViewer"];
com.wiris.util.ui.component.FormulaViewer.__super__ = com.wiris.util.ui.component.Component;
com.wiris.util.ui.component.FormulaViewer.prototype = $extend(com.wiris.util.ui.component.Component.prototype,{
	setMathML: function(mathML) {
		if(mathML != null && mathML == this.mathML || mathML == null && this.mathML == null) return;
		this.mathML = mathML;
		this.changeState();
	}
	,setParameter: function(key,value) {
		if(this.parameters == null) this.parameters = new Hash();
		this.parameters.set(key,value);
		this.changeState();
	}
	,setParameters: function(parameters) {
		this.parameters = parameters;
		this.changeState();
	}
	,getMathML: function() {
		return this.mathML;
	}
	,getParameters: function() {
		return this.parameters;
	}
	,parameters: null
	,mathML: null
	,__class__: com.wiris.util.ui.component.FormulaViewer
});
com.wiris.util.ui.component.HyperlinkButton = $hxClasses["com.wiris.util.ui.component.HyperlinkButton"] = function() {
	com.wiris.util.ui.component.Button.call(this);
	this.url = "";
	this.newWindowLink = true;
};
com.wiris.util.ui.component.HyperlinkButton.__name__ = ["com","wiris","util","ui","component","HyperlinkButton"];
com.wiris.util.ui.component.HyperlinkButton.newWithText = function(text,url,activationAction,listener) {
	var button = new com.wiris.util.ui.component.HyperlinkButton();
	button.setText(text);
	button.setUrl(url);
	button.setActivationAction(activationAction);
	button.addActionListener(listener);
	return button;
}
com.wiris.util.ui.component.HyperlinkButton.newWithIcon = function(tooltip,icon,url,activationAction,listener) {
	var button = new com.wiris.util.ui.component.HyperlinkButton();
	button.setTooltip(tooltip);
	button.setNormalIcon(icon);
	button.setUrl(url);
	button.setActivationAction(activationAction);
	button.addActionListener(listener);
	return button;
}
com.wiris.util.ui.component.HyperlinkButton.newWithTextAndIcon = function(text,icon,url,activationAction,listener) {
	var button = new com.wiris.util.ui.component.HyperlinkButton();
	button.setText(text);
	button.setNormalIcon(icon);
	button.setUrl(url);
	button.setActivationAction(activationAction);
	button.addActionListener(listener);
	return button;
}
com.wiris.util.ui.component.HyperlinkButton.__super__ = com.wiris.util.ui.component.Button;
com.wiris.util.ui.component.HyperlinkButton.prototype = $extend(com.wiris.util.ui.component.Button.prototype,{
	isNewWindowLink: function() {
		return this.newWindowLink;
	}
	,setNewWindowLink: function(newWindowLink) {
		if(this.newWindowLink == newWindowLink) return;
		this.newWindowLink = newWindowLink;
		this.changeState();
	}
	,getUrl: function() {
		return this.url;
	}
	,setUrl: function(url) {
		if(this.url == url) return;
		this.url = url;
		this.changeState();
	}
	,newWindowLink: null
	,url: null
	,__class__: com.wiris.util.ui.component.HyperlinkButton
});
com.wiris.util.ui.component.HyperlinkLabel = $hxClasses["com.wiris.util.ui.component.HyperlinkLabel"] = function() {
	com.wiris.util.ui.component.Label.call(this);
	this.addClass(com.wiris.util.ui.component.HyperlinkLabel.CLASS_HYPERLINK_LABEL);
	this.url = null;
	this.setNewWindowLink(true);
};
com.wiris.util.ui.component.HyperlinkLabel.__name__ = ["com","wiris","util","ui","component","HyperlinkLabel"];
com.wiris.util.ui.component.HyperlinkLabel.newWithText = function(text,url) {
	var label = new com.wiris.util.ui.component.HyperlinkLabel();
	label.setText(text);
	label.setUrl(url);
	return label;
}
com.wiris.util.ui.component.HyperlinkLabel.__super__ = com.wiris.util.ui.component.Label;
com.wiris.util.ui.component.HyperlinkLabel.prototype = $extend(com.wiris.util.ui.component.Label.prototype,{
	isNewWindowLink: function() {
		return this.newWindowLink;
	}
	,setNewWindowLink: function(newWindowLink) {
		if(this.newWindowLink == newWindowLink) return;
		this.newWindowLink = newWindowLink;
		if(this.newWindowLink) this.addClass(com.wiris.util.ui.component.HyperlinkLabel.CLASS_HYPERLINK_LABEL_EXTERNAL); else this.removeClass(com.wiris.util.ui.component.HyperlinkLabel.CLASS_HYPERLINK_LABEL_EXTERNAL);
		this.changeState();
	}
	,getUrl: function() {
		return this.url;
	}
	,setUrl: function(url) {
		if(this.url != null && this.url == url) return;
		this.url = url;
		this.changeState();
	}
	,newWindowLink: null
	,url: null
	,__class__: com.wiris.util.ui.component.HyperlinkLabel
});
com.wiris.util.ui.component.IconBox = $hxClasses["com.wiris.util.ui.component.IconBox"] = function() {
	com.wiris.util.ui.component.Component.call(this);
	this.addClass(com.wiris.util.ui.component.IconBox.CLASS_ICON_BOX);
	this.icon = null;
};
com.wiris.util.ui.component.IconBox.__name__ = ["com","wiris","util","ui","component","IconBox"];
com.wiris.util.ui.component.IconBox.newIconBox = function(icon) {
	var iconBox = new com.wiris.util.ui.component.IconBox();
	iconBox.setIcon(icon);
	return iconBox;
}
com.wiris.util.ui.component.IconBox.newWithMaterialIcon = function(materialId) {
	var iconBox = new com.wiris.util.ui.component.IconBox();
	iconBox.setIcon(new com.wiris.util.ui.MaterialIcon(materialId));
	return iconBox;
}
com.wiris.util.ui.component.IconBox.__super__ = com.wiris.util.ui.component.Component;
com.wiris.util.ui.component.IconBox.prototype = $extend(com.wiris.util.ui.component.Component.prototype,{
	setIcon: function(icon) {
		this.icon = icon;
		this.changeState();
	}
	,getIcon: function() {
		return this.icon;
	}
	,icon: null
	,__class__: com.wiris.util.ui.component.IconBox
});
com.wiris.util.ui.component.ImageContainer = $hxClasses["com.wiris.util.ui.component.ImageContainer"] = function() {
	com.wiris.util.ui.component.Component.call(this);
	this.addClass(com.wiris.util.ui.component.ImageContainer.CLASS_IMAGE_CONTAINER);
	this.source = null;
	this.tooltip = null;
};
com.wiris.util.ui.component.ImageContainer.__name__ = ["com","wiris","util","ui","component","ImageContainer"];
com.wiris.util.ui.component.ImageContainer.newWithSource = function(source) {
	var image = new com.wiris.util.ui.component.ImageContainer();
	image.setSource(source);
	return image;
}
com.wiris.util.ui.component.ImageContainer.newWithSourceAndTooltip = function(source,tooltip) {
	var image = new com.wiris.util.ui.component.ImageContainer();
	image.setSource(source);
	image.setTooltip(tooltip);
	return image;
}
com.wiris.util.ui.component.ImageContainer.__super__ = com.wiris.util.ui.component.Component;
com.wiris.util.ui.component.ImageContainer.prototype = $extend(com.wiris.util.ui.component.Component.prototype,{
	setTooltip: function(tooltip) {
		this.tooltip = tooltip;
		this.changeState();
	}
	,getTooltip: function() {
		return this.tooltip;
	}
	,setSource: function(source) {
		this.source = source;
		this.changeState();
	}
	,getSource: function() {
		return this.source;
	}
	,tooltip: null
	,source: null
	,__class__: com.wiris.util.ui.component.ImageContainer
});
com.wiris.util.ui.component.TabbedPanel = $hxClasses["com.wiris.util.ui.component.TabbedPanel"] = function() {
	com.wiris.util.ui.component.Panel.call(this);
	this.addClass(com.wiris.util.ui.component.TabbedPanel.CLASS_TABBED_PANEL);
	this.texts = new Array();
	this.tabs = new Array();
	this.selectedTab = 0;
};
com.wiris.util.ui.component.TabbedPanel.__name__ = ["com","wiris","util","ui","component","TabbedPanel"];
com.wiris.util.ui.component.TabbedPanel.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.util.ui.component.TabbedPanel.__super__ = com.wiris.util.ui.component.Panel;
com.wiris.util.ui.component.TabbedPanel.prototype = $extend(com.wiris.util.ui.component.Panel.prototype,{
	actionPerformed: function(e) {
		this.selectTab(com.wiris.util.type.Arrays.indexOfElement(this.texts,e.getAction().getId()));
	}
	,selectTab: function(index) {
		this.selectedTab = index;
		this.changeState();
	}
	,getSelectedTab: function() {
		return this.selectedTab;
	}
	,getTabs: function() {
		return this.tabs;
	}
	,createTabWithPanel: function(text,icon,tooltip,panel) {
		var tabButton = com.wiris.util.ui.component.ButtonPanel.newBasicButtonPanel(null,text,com.wiris.util.ui.component.IconBox.newIconBox(icon),new com.wiris.util.ui.Action(text,null));
		tabButton.addClass(com.wiris.util.ui.component.TabbedPanel.CLASS_TABBED_PANEL_TAB);
		tabButton.addActionListener(this);
		this.tabs.push(tabButton);
		this.texts.push(text);
		this.addComponentImpl(panel);
	}
	,createTab: function(text,icon,tooltip) {
		var panel = new com.wiris.util.ui.component.BorderPanel(true);
		this.createTabWithPanel(text,icon,tooltip,panel);
		return panel;
	}
	,getTabPanel: function(index) {
		return this.getComponents()[index];
	}
	,selectedTab: null
	,tabs: null
	,texts: null
	,__class__: com.wiris.util.ui.component.TabbedPanel
});
com.wiris.util.ui.component.NavigationBar = $hxClasses["com.wiris.util.ui.component.NavigationBar"] = function() {
	com.wiris.util.ui.component.TabbedPanel.call(this);
	this.addClass(com.wiris.util.ui.component.NavigationBar.CLASS_NAVIGATION_BAR);
};
com.wiris.util.ui.component.NavigationBar.__name__ = ["com","wiris","util","ui","component","NavigationBar"];
com.wiris.util.ui.component.NavigationBar.newAtLeft = function() {
	var tabbedPanel = new com.wiris.util.ui.component.TabbedPanel();
	tabbedPanel.addClass(com.wiris.util.ui.component.NavigationBar.CLASS_NAVIGATION_BAR_AT_LEFT);
	return tabbedPanel;
}
com.wiris.util.ui.component.NavigationBar.newAtRight = function() {
	var tabbedPanel = new com.wiris.util.ui.component.TabbedPanel();
	tabbedPanel.addClass(com.wiris.util.ui.component.NavigationBar.CLASS_NAVIGATION_BAR_AT_RIGHT);
	return tabbedPanel;
}
com.wiris.util.ui.component.NavigationBar.__super__ = com.wiris.util.ui.component.TabbedPanel;
com.wiris.util.ui.component.NavigationBar.prototype = $extend(com.wiris.util.ui.component.TabbedPanel.prototype,{
	__class__: com.wiris.util.ui.component.NavigationBar
});
com.wiris.util.ui.component.NumberDropdownTextField = $hxClasses["com.wiris.util.ui.component.NumberDropdownTextField"] = function() {
	com.wiris.util.ui.component.DropdownTextField.call(this);
	this.addClass(com.wiris.util.ui.component.NumberDropdownTextField.CLASS_NUMBER_DROPDOWN_TEXT_FIELD);
	this.minimum = 0;
	this.maximum = 100;
	this.step = 0.1;
};
com.wiris.util.ui.component.NumberDropdownTextField.__name__ = ["com","wiris","util","ui","component","NumberDropdownTextField"];
com.wiris.util.ui.component.NumberDropdownTextField.newWithLabel = function(label) {
	var numberTextField = new com.wiris.util.ui.component.NumberDropdownTextField();
	numberTextField.setLabel(label);
	return numberTextField;
}
com.wiris.util.ui.component.NumberDropdownTextField.newWithPlaceholder = function(placeholder) {
	var numberTextField = new com.wiris.util.ui.component.NumberDropdownTextField();
	numberTextField.setPlaceholder(placeholder);
	return numberTextField;
}
com.wiris.util.ui.component.NumberDropdownTextField.newWithLabelAndPlaceholder = function(label,placeholder) {
	var numberTextField = new com.wiris.util.ui.component.NumberDropdownTextField();
	numberTextField.setPlaceholder(placeholder);
	numberTextField.setLabel(label);
	return numberTextField;
}
com.wiris.util.ui.component.NumberDropdownTextField.__super__ = com.wiris.util.ui.component.DropdownTextField;
com.wiris.util.ui.component.NumberDropdownTextField.prototype = $extend(com.wiris.util.ui.component.DropdownTextField.prototype,{
	setStep: function(step) {
		this.step = step;
	}
	,getStep: function() {
		return "" + this.step;
	}
	,setMaximum: function(maximum) {
		this.maximum = maximum;
	}
	,getMaximum: function() {
		return "" + this.maximum;
	}
	,setMinimum: function(minimum) {
		this.minimum = minimum;
	}
	,getMinimum: function() {
		return "" + this.minimum;
	}
	,step: null
	,maximum: null
	,minimum: null
	,__class__: com.wiris.util.ui.component.NumberDropdownTextField
});
com.wiris.util.ui.component.NumberTextField = $hxClasses["com.wiris.util.ui.component.NumberTextField"] = function() {
	com.wiris.util.ui.component.TextField.call(this);
	this.addClass(com.wiris.util.ui.component.NumberTextField.CLASS_NUMBER_TEXT_FIELD);
	this.minimum = 0;
	this.maximum = 0;
	this.useMaximum = false;
	this.useMinimum = false;
	this.step = 10e-10;
};
com.wiris.util.ui.component.NumberTextField.__name__ = ["com","wiris","util","ui","component","NumberTextField"];
com.wiris.util.ui.component.NumberTextField.newWithLabel = function(label) {
	var numberTextField = new com.wiris.util.ui.component.NumberTextField();
	numberTextField.setLabel(label);
	return numberTextField;
}
com.wiris.util.ui.component.NumberTextField.newWithPlaceholder = function(placeholder) {
	var numberTextField = new com.wiris.util.ui.component.NumberTextField();
	numberTextField.setPlaceholder(placeholder);
	return numberTextField;
}
com.wiris.util.ui.component.NumberTextField.newWithLabelAndPlaceholder = function(label,placeholder) {
	var numberTextField = new com.wiris.util.ui.component.NumberTextField();
	numberTextField.setPlaceholder(placeholder);
	numberTextField.setLabel(label);
	return numberTextField;
}
com.wiris.util.ui.component.NumberTextField.newWithConstraints = function(min,max,step) {
	var numberTextField = new com.wiris.util.ui.component.NumberTextField();
	numberTextField.setMinimum(min);
	numberTextField.setMaximum(max);
	numberTextField.setStep(step);
	return numberTextField;
}
com.wiris.util.ui.component.NumberTextField.__super__ = com.wiris.util.ui.component.TextField;
com.wiris.util.ui.component.NumberTextField.prototype = $extend(com.wiris.util.ui.component.TextField.prototype,{
	setStep: function(step) {
		this.step = step;
	}
	,getStep: function() {
		return "" + this.step;
	}
	,usesMaximum: function() {
		return this.useMaximum;
	}
	,usesMinimum: function() {
		return this.useMinimum;
	}
	,setMaximum: function(maximum) {
		this.maximum = maximum;
		this.useMaximum = true;
	}
	,getMaximum: function() {
		return "" + this.maximum;
	}
	,setMinimum: function(minimum) {
		this.minimum = minimum;
		this.useMinimum = true;
	}
	,getMinimum: function() {
		return "" + this.minimum;
	}
	,step: null
	,useMaximum: null
	,maximum: null
	,useMinimum: null
	,minimum: null
	,__class__: com.wiris.util.ui.component.NumberTextField
});
com.wiris.util.ui.component.OpenFileDialog = $hxClasses["com.wiris.util.ui.component.OpenFileDialog"] = function(acceptFilter) {
	com.wiris.util.ui.component.Panel.call(this);
	this.addClass(com.wiris.util.ui.component.OpenFileDialog.CLASS_OPEN_FILE_DIALOG);
	this.setVisible(false);
	this.acceptFilter = acceptFilter;
	this.fileContent = null;
};
com.wiris.util.ui.component.OpenFileDialog.__name__ = ["com","wiris","util","ui","component","OpenFileDialog"];
com.wiris.util.ui.component.OpenFileDialog.__super__ = com.wiris.util.ui.component.Panel;
com.wiris.util.ui.component.OpenFileDialog.prototype = $extend(com.wiris.util.ui.component.Panel.prototype,{
	setVisible: function(visible) {
		if(visible) this.fileContent = null;
		return com.wiris.util.ui.component.Panel.prototype.setVisible.call(this,visible);
	}
	,getAcceptFilter: function() {
		return this.acceptFilter;
	}
	,setAcceptFilter: function(acceptFilter) {
		this.acceptFilter = acceptFilter;
	}
	,setFileContent: function(content) {
		this.fileContent = content;
		this.changeState();
	}
	,getFileContent: function() {
		return this.fileContent;
	}
	,fileContent: null
	,acceptFilter: null
	,__class__: com.wiris.util.ui.component.OpenFileDialog
});
com.wiris.util.ui.component.OpenIdSignInPanel = $hxClasses["com.wiris.util.ui.component.OpenIdSignInPanel"] = function() {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.util.ui.component.OpenIdSignInPanel.CLASS_SIGN_IN_PANEL);
	this.signInGoogle = false;
	this.signInMicrosoft = false;
};
com.wiris.util.ui.component.OpenIdSignInPanel.__name__ = ["com","wiris","util","ui","component","OpenIdSignInPanel"];
com.wiris.util.ui.component.OpenIdSignInPanel.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.util.ui.component.OpenIdSignInPanel.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.util.ui.component.OpenIdSignInPanel.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	signOut: function() {
		var action = new com.wiris.util.ui.Action("haxeSignOut","haxeSignOut");
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createActionEvent(this,action));
	}
	,providerSignInFlowCancelled: function() {
		var action = new com.wiris.util.ui.Action("providerSignInFlowCancelled","providerSignInFlowCancelled");
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createActionEvent(this,action));
	}
	,renderGoogleSignInButton: function() {
		var action = new com.wiris.util.ui.Action(null,"renderGoogleSignInButton");
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createActionEvent(this,action));
	}
	,providerSignInFlowStarted: function() {
		var action = new com.wiris.util.ui.Action("providerSignInFlowStarted","providerSignInFlowStarted");
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createActionEvent(this,action));
	}
	,providerSignInFlowCompleted: function(jwt,userPhotoURL) {
		var action = new com.wiris.util.ui.Action("providerSingInFlowCompleted","providerSignInFlowCompleted");
		action.setParameter("jwt",jwt);
		action.setParameter("userPhotoURL",userPhotoURL);
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createActionEvent(this,action));
	}
	,actionPerformed: function(e) {
		this.fireEvent(e);
	}
	,getMicrosoftClientId: function() {
		return this.microsoftClientId;
	}
	,setMicrosoftClientId: function(clientId) {
		this.microsoftClientId = clientId;
	}
	,getGoogleClientId: function() {
		return this.googleClientId;
	}
	,setGoogleClientId: function(clientId) {
		this.googleClientId = clientId;
	}
	,getMicrosoftIcon: function() {
		return new com.wiris.util.ui.SVGIcon("-license/signin_microsoft");
	}
	,getSignInMicrosoft: function() {
		return this.signInMicrosoft;
	}
	,getSignInGoogle: function() {
		return this.signInGoogle;
	}
	,setSignInMicrosoft: function(signInMicrosoft) {
		this.signInMicrosoft = signInMicrosoft;
	}
	,setSignInGoogle: function(signInGoogle) {
		this.signInGoogle = signInGoogle;
	}
	,signInMicrosoft: null
	,signInGoogle: null
	,microsoftClientId: null
	,googleClientId: null
	,__class__: com.wiris.util.ui.component.OpenIdSignInPanel
});
com.wiris.util.ui.component.PasswordTextField = $hxClasses["com.wiris.util.ui.component.PasswordTextField"] = function() {
	com.wiris.util.ui.component.TextField.call(this);
	this.addClass(com.wiris.util.ui.component.PasswordTextField.CLASS_PASSWORD_TEXT_FIELD);
};
com.wiris.util.ui.component.PasswordTextField.__name__ = ["com","wiris","util","ui","component","PasswordTextField"];
com.wiris.util.ui.component.PasswordTextField.newWithLabel = function(label) {
	var passwordTextField = new com.wiris.util.ui.component.PasswordTextField();
	passwordTextField.setLabel(label);
	return passwordTextField;
}
com.wiris.util.ui.component.PasswordTextField.newWithPlaceholder = function(placeholder) {
	var passwordTextField = new com.wiris.util.ui.component.PasswordTextField();
	passwordTextField.setPlaceholder(placeholder);
	return passwordTextField;
}
com.wiris.util.ui.component.PasswordTextField.newWithLabelAndPlaceholder = function(label,placeholder) {
	var passwordTextField = new com.wiris.util.ui.component.PasswordTextField();
	passwordTextField.setPlaceholder(placeholder);
	passwordTextField.setLabel(label);
	return passwordTextField;
}
com.wiris.util.ui.component.PasswordTextField.__super__ = com.wiris.util.ui.component.TextField;
com.wiris.util.ui.component.PasswordTextField.prototype = $extend(com.wiris.util.ui.component.TextField.prototype,{
	__class__: com.wiris.util.ui.component.PasswordTextField
});
com.wiris.util.ui.component.PlotterPanel = $hxClasses["com.wiris.util.ui.component.PlotterPanel"] = function(display) {
	com.wiris.util.ui.component.BorderPanel.call(this,true);
	this.addClass(com.wiris.util.ui.component.PlotterPanel.CLASS_PLOTTER_PANEL);
	this.setDisplay(display);
	this.addClass(com.wiris.util.ui.component.PlotterPanel.CLASS_PLOTTER_PANEL);
	this.addDefaultMouseListener(this);
	this.addDefaultMouseMotionListener(this);
	this.addDefaultTouchListener(this);
	this.mouseWasPressed = false;
	this.touchWasPressed = false;
	this.dragging = false;
	this.pointerOutside = false;
	this.firstTouch = null;
	this.firstClick = null;
	this.padding = [0,0,0,0];
};
com.wiris.util.ui.component.PlotterPanel.__name__ = ["com","wiris","util","ui","component","PlotterPanel"];
com.wiris.util.ui.component.PlotterPanel.__interfaces__ = [com.wiris.util.graphics.DisplayListener,com.wiris.util.ui.interaction.TouchListener,com.wiris.util.ui.interaction.MouseMotionListener,com.wiris.util.ui.interaction.MouseListener];
com.wiris.util.ui.component.PlotterPanel.__super__ = com.wiris.util.ui.component.BorderPanel;
com.wiris.util.ui.component.PlotterPanel.prototype = $extend(com.wiris.util.ui.component.BorderPanel.prototype,{
	actionCanceled: function() {
	}
	,actionFinished: function() {
	}
	,showHelperText: function(text,name) {
	}
	,getClientGraphicsContext: function() {
		return this.cgc;
	}
	,setClientGraphicsContext: function(cgc) {
		this.cgc = cgc;
	}
	,getPadding: function() {
		return [this.padding[0],this.padding[1],this.padding[2],this.padding[3]];
	}
	,plotterPadding: function(top,right,bottom,left) {
		this.padding[0] = top;
		this.padding[1] = right;
		this.padding[2] = bottom;
		this.padding[3] = left;
	}
	,dist: function(a,b) {
		return Math.sqrt((a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]));
	}
	,elementVisibilityChanged: function() {
	}
	,initialContentChanged: function() {
	}
	,changeMode: function(mode) {
	}
	,cursorRequested: function(cursor) {
	}
	,contentChanged: function() {
		this.changeState();
	}
	,disposed: function() {
	}
	,undoredoQueueChanged: function(canUndo,canRedo) {
	}
	,updatePaths: function() {
	}
	,elementUnselected: function() {
	}
	,displayResized: function() {
	}
	,elementSelected: function() {
	}
	,repaint: function() {
		this.changeState();
	}
	,animationEnded: function() {
		this.setAnimated(false);
	}
	,animationStarted: function() {
		this.setAnimated(true);
	}
	,touchMove: function(e) {
		if(this.touchWasPressed) {
			var touch = e.getTouches()[0];
			var d = this.dist(this.firstTouch,[touch.getX(),touch.getY()]);
			try {
				if(!this.dragging && d > com.wiris.util.ui.component.PlotterPanel.THRESHOLD_DRAG) {
					this.display.pointerDrag();
					this.dragging = true;
				}
			} catch( f ) {
				if( js.Boot.__instanceof(f,com.wiris.system.Exception) ) {
					throw "Error dragging: " + f.getMessage();
				} else throw(f);
			}
			try {
				if(this.dragging) this.display.pointerMove(touch.getX(),touch.getY());
			} catch( f ) {
				if( js.Boot.__instanceof(f,com.wiris.system.Exception) ) {
					throw "Error moving mouse: " + f.getMessage();
				} else throw(f);
			}
			this.changeState();
			e.preventDefault();
		}
	}
	,touchRelease: function(e) {
		if(this.touchWasPressed) {
			try {
				this.display.pointerUp();
			} catch( f ) {
				if( js.Boot.__instanceof(f,com.wiris.system.Exception) ) {
					throw "Error pressing mouse: " + f.getMessage();
				} else throw(f);
			}
			this.changeState();
		}
		this.dragging = false;
		this.touchWasPressed = false;
	}
	,touchPress: function(e) {
		var touch = e.getTouches()[0];
		this.firstTouch = [touch.getX(),touch.getY()];
		try {
			this.display.pointerMove(this.firstTouch[0],this.firstTouch[1]);
			if(this.pointerOutside) {
				this.pointerOutside = false;
				this.display.pointerEnter();
			}
			this.display.pointerDown();
		} catch( f ) {
			if( js.Boot.__instanceof(f,com.wiris.system.Exception) ) {
				throw "Error pressing mouse: " + f.getMessage();
			} else throw(f);
		}
		this.changeState();
		e.preventDefault();
		this.touchWasPressed = true;
	}
	,mouseExit: function(e) {
		try {
			this.display.pointerLeave();
		} catch( f ) {
			if( js.Boot.__instanceof(f,com.wiris.system.Exception) ) {
				throw "Error when mouse leaves viewport: " + f.getMessage();
			} else throw(f);
		}
		this.pointerOutside = true;
		this.changeState();
	}
	,mouseEnter: function(e) {
		try {
			this.display.pointerEnter();
		} catch( f ) {
			if( js.Boot.__instanceof(f,com.wiris.system.Exception) ) {
				throw "Error when mouse enters viewport: " + f.getMessage();
			} else throw(f);
		}
		this.pointerOutside = false;
		this.changeState();
	}
	,mouseMove: function(e) {
		var d = !this.mouseWasPressed?0:this.dist(this.firstClick,[e.getX(),e.getY()]);
		try {
			if(this.mouseWasPressed && !this.dragging && d > com.wiris.util.ui.component.PlotterPanel.THRESHOLD_DRAG) {
				this.display.pointerDrag();
				this.dragging = true;
			}
		} catch( f ) {
			if( js.Boot.__instanceof(f,com.wiris.system.Exception) ) {
				throw "Error dragging: " + f.getMessage();
			} else throw(f);
		}
		try {
			if(!this.mouseWasPressed || this.mouseWasPressed && this.dragging) this.display.pointerMove(e.getX(),e.getY());
		} catch( f ) {
			if( js.Boot.__instanceof(f,com.wiris.system.Exception) ) {
				throw "Error moving mouse: " + f.getMessage();
			} else throw(f);
		}
		this.changeState();
		e.preventDefault();
	}
	,mouseRelease: function(e) {
		if(this.mouseWasPressed && !this.touchWasPressed) {
			try {
				this.display.pointerUp();
			} catch( f ) {
				if( js.Boot.__instanceof(f,com.wiris.system.Exception) ) {
					throw "Error releasing mouse: " + f.getMessage();
				} else throw(f);
			}
			this.changeState();
		}
		this.dragging = false;
		this.mouseWasPressed = false;
	}
	,mousePress: function(e) {
		if(e.getButton() != com.wiris.util.ui.interaction.MouseButtonCode.LEFT_BUTTON) return;
		this.firstClick = [e.getX(),e.getY()];
		this.mouseWasPressed = true;
		try {
			this.display.pointerDown();
		} catch( f ) {
			if( js.Boot.__instanceof(f,com.wiris.system.Exception) ) {
				throw "Error pressing mouse: " + f.getMessage();
			} else throw(f);
		}
		this.changeState();
	}
	,mouseDoubleClick: function(e) {
	}
	,mouseClick: function(e) {
	}
	,isAnimated: function() {
		return this.animated;
	}
	,setAnimated: function(animated) {
		this.animated = animated;
	}
	,setDisplay: function(display) {
		this.display = display;
	}
	,getDisplay: function() {
		return this.display;
	}
	,cgc: null
	,padding: null
	,animated: null
	,pointerOutside: null
	,dragging: null
	,firstClick: null
	,firstTouch: null
	,touchWasPressed: null
	,mouseWasPressed: null
	,display: null
	,__class__: com.wiris.util.ui.component.PlotterPanel
});
com.wiris.util.ui.component.ProgressBar = $hxClasses["com.wiris.util.ui.component.ProgressBar"] = function() {
	com.wiris.util.ui.component.Component.call(this);
	this.addClass(com.wiris.util.ui.component.ProgressBar.CLASS_PROGRESS_BAR);
	this.getStyle().setWidth(com.wiris.util.ui.Style.SIZE_FULL);
};
com.wiris.util.ui.component.ProgressBar.__name__ = ["com","wiris","util","ui","component","ProgressBar"];
com.wiris.util.ui.component.ProgressBar.__super__ = com.wiris.util.ui.component.Component;
com.wiris.util.ui.component.ProgressBar.prototype = $extend(com.wiris.util.ui.component.Component.prototype,{
	__class__: com.wiris.util.ui.component.ProgressBar
});
com.wiris.util.ui.component.ProgressCircle = $hxClasses["com.wiris.util.ui.component.ProgressCircle"] = function() {
	com.wiris.util.ui.component.Component.call(this);
	this.addClass(com.wiris.util.ui.component.ProgressCircle.CLASS_PROGRESS_CIRCLE);
	this.progress = 0;
	this.indeterminate = false;
};
com.wiris.util.ui.component.ProgressCircle.__name__ = ["com","wiris","util","ui","component","ProgressCircle"];
com.wiris.util.ui.component.ProgressCircle.newIndeterminate = function() {
	var circle = new com.wiris.util.ui.component.ProgressCircle();
	circle.setIndeterminate(true);
	return circle;
}
com.wiris.util.ui.component.ProgressCircle.__super__ = com.wiris.util.ui.component.Component;
com.wiris.util.ui.component.ProgressCircle.prototype = $extend(com.wiris.util.ui.component.Component.prototype,{
	isIndeterminate: function() {
		return this.indeterminate;
	}
	,setIndeterminate: function(indeterminate) {
		if(this.isIndeterminate() != indeterminate) {
			this.indeterminate = indeterminate;
			if(this.isIndeterminate()) {
				this.addClass(com.wiris.util.ui.component.ProgressCircle.CLASS_PROGRESS_CIRCLE_INDETERMINATE);
				this.changeState();
			} else {
				this.removeClass(com.wiris.util.ui.component.ProgressCircle.CLASS_PROGRESS_CIRCLE_INDETERMINATE);
				this.changeState();
			}
		}
	}
	,getProgress: function() {
		return this.progress;
	}
	,setProgress: function(progress) {
		if(this.getProgress() != progress) {
			if(progress < 0 || progress > 100) return;
			this.progress = progress;
			this.changeState();
		}
	}
	,indeterminate: null
	,progress: null
	,__class__: com.wiris.util.ui.component.ProgressCircle
});
com.wiris.util.ui.component.RadioButton = $hxClasses["com.wiris.util.ui.component.RadioButton"] = function(id) {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM);
	this.addClass(com.wiris.util.ui.component.RadioButton.CLASS_RADIO_BUTTON);
	this.selectableId = id;
	this.text = null;
	this.helperText = null;
	this.changeAction = null;
	this.textPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.textPanel.addClass(com.wiris.util.ui.component.RadioButton.CLASS_RADIO_BUTTON_TEXT);
	this.helperTextPanel = new com.wiris.util.ui.component.FlowPanel(com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.helperTextPanel.addClass(com.wiris.util.ui.component.RadioButton.CLASS_RADIO_BUTTON_HELPER_TEXT);
	this.selectionController = com.wiris.util.ui.controller.SelectionController.newMutuallyExclusive(id);
	this.selectionController.addSelectable(this,false);
};
com.wiris.util.ui.component.RadioButton.__name__ = ["com","wiris","util","ui","component","RadioButton"];
com.wiris.util.ui.component.RadioButton.__interfaces__ = [com.wiris.util.ui.controller.Selectable,com.wiris.util.ui.component.Field];
com.wiris.util.ui.component.RadioButton.newRadioButton = function(text,id,changeAction,listener) {
	var radioButton = new com.wiris.util.ui.component.RadioButton(id);
	radioButton.setText(text);
	radioButton.setChangeAction(changeAction);
	radioButton.addActionListener(listener);
	return radioButton;
}
com.wiris.util.ui.component.RadioButton.newWithHelperText = function(text,helperText,id,changeAction,listener) {
	var radioButton = new com.wiris.util.ui.component.RadioButton(id);
	radioButton.setText(text);
	radioButton.setHelperText(helperText);
	radioButton.setChangeAction(changeAction);
	radioButton.addActionListener(listener);
	return radioButton;
}
com.wiris.util.ui.component.RadioButton.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.util.ui.component.RadioButton.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	setSelected: function(selected) {
		this.selectionController.setSelected(this.selectableId,selected);
	}
	,isSelected: function() {
		return this.selectionController.isSelected(this.selectableId);
	}
	,setChangeAction: function(changeAction) {
		this.changeAction = changeAction;
	}
	,getChangeAction: function() {
		return this.changeAction;
	}
	,getSelectableId: function() {
		return this.selectableId;
	}
	,getHelperTextPanel: function() {
		return this.helperTextPanel;
	}
	,setHelperTextPanel: function(helperTextPanel) {
		this.helperTextPanel = helperTextPanel;
	}
	,getTextPanel: function() {
		return this.textPanel;
	}
	,setTextPanel: function(textPanel) {
		this.textPanel = textPanel;
	}
	,getComponent: function() {
		return this;
	}
	,setSelectionController: function(selectionController) {
		var selected = this.selectionController.isSelected(this.selectableId);
		if(this.selectionController != null) this.selectionController.removeSelectable(this.selectableId);
		this.selectionController = selectionController;
		this.selectionController.addSelectable(this,selected);
	}
	,getSelectionController: function() {
		return this.selectionController;
	}
	,setValue: function(value) {
		this.setSelected(!(value == "false"));
	}
	,getValue: function() {
		if(this.isSelected()) return "true";
		return "false";
	}
	,setHelperText: function(helperText) {
		this.helperText = helperText;
		if(this.helperTextLabel == null) {
			this.helperTextLabel = new com.wiris.util.ui.component.Label();
			this.addComponent(this.helperTextPanel);
			this.helperTextPanel.addComponent(this.helperTextLabel);
		}
		this.helperTextLabel.setText(helperText);
	}
	,getHelperText: function() {
		return this.helperText;
	}
	,setText: function(text) {
		this.text = text;
		if(this.textLabel == null) {
			this.textLabel = new com.wiris.util.ui.component.Label();
			this.addComponent(this.textPanel);
			this.textPanel.addComponent(this.textLabel);
		}
		this.textLabel.setText(text);
	}
	,getText: function() {
		return this.text;
	}
	,selectionController: null
	,changeAction: null
	,helperTextPanel: null
	,helperTextLabel: null
	,helperText: null
	,textPanel: null
	,textLabel: null
	,text: null
	,selectableId: null
	,__class__: com.wiris.util.ui.component.RadioButton
});
com.wiris.util.ui.component.ResponsiveToolbar = $hxClasses["com.wiris.util.ui.component.ResponsiveToolbar"] = function(responsiveLocation,responsiveMenuDirection) {
	com.wiris.util.ui.component.ToolBar.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.addClass(com.wiris.util.ui.component.ResponsiveToolbar.CLASS_RESPONSIVE_TOOLBAR);
	this.responsiveLocation = responsiveLocation;
	this.responsiveDirection = responsiveMenuDirection;
	this.responsiveSections = new Array();
	this.contextPanelButton = new com.wiris.util.ui.component.ContextPanelButton();
	this.contextPanelButton.setTooltip(com.wiris.util.ui.component.ResponsiveToolbar.TOOLTIP_RESPONSIVE_TOOLBAR_CONTEXT_PANEL);
	this.contextPanelButton.getContextPanel().addClass(com.wiris.util.ui.component.ToolBar.CLASS_TOOL_BAR).addClass(com.wiris.util.ui.component.ToolBar.CLASS_TOOL_BAR_COMPACT).addClass(com.wiris.util.ui.component.ResponsiveToolbar.CLASS_RESPONSIVE_TOOLBAR_CONTEXT_PANEL).addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_SOLID);
	this.contextPanelButton.setParent(this);
	var vertical = this.responsiveDirection == com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM;
	this.contextPanelButton.getContextPanel().setPanelDirection(this.responsiveDirection);
	this.contextPanelButton.getContextPanel().addClass(vertical?com.wiris.util.ui.component.ResponsiveToolbar.CLASS_RESPONSIVE_TOOLBAR_VERTICAL_CONTEXT_PANEL:com.wiris.util.ui.component.ResponsiveToolbar.CLASS_RESPONSIVE_TOOLBAR_HORIZONTAL_CONTEXT_PANEL);
	this.contextPanelButton.setNormalIcon(new com.wiris.util.ui.MaterialIcon(vertical?"more_vert":"more_horiz"));
	this.contextPanelButton.getContextPanel().setAnchor(com.wiris.util.ui.component.ContextPanel.ANCHOR_TOP | com.wiris.util.ui.component.ContextPanel.ANCHOR_RIGHT);
	this.contextPanelButton.getContextPanel().setParentAnchor(com.wiris.util.ui.component.ContextPanel.ANCHOR_BOTTOM | com.wiris.util.ui.component.ContextPanel.ANCHOR_RIGHT);
	if(responsiveLocation == com.wiris.util.ui.component.ResponsiveToolbar.RESPONSIVE_SECTION_LAST) this.sectionsAtEnd.addClass(com.wiris.util.ui.component.ResponsiveToolbar.CLASS_RESPONSIVE_TOOLBAR_BLOCK); else this.sections.addClass(com.wiris.util.ui.component.ResponsiveToolbar.CLASS_RESPONSIVE_TOOLBAR_BLOCK);
	this.lastMaxWidth = 0;
	this.lastResponsiveWidth = 0;
	this.listeners = new Array();
};
com.wiris.util.ui.component.ResponsiveToolbar.__name__ = ["com","wiris","util","ui","component","ResponsiveToolbar"];
com.wiris.util.ui.component.ResponsiveToolbar.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.util.ui.component.ResponsiveToolbar.__super__ = com.wiris.util.ui.component.ToolBar;
com.wiris.util.ui.component.ResponsiveToolbar.prototype = $extend(com.wiris.util.ui.component.ToolBar.prototype,{
	actionPerformed: function(e) {
		this.contextPanelButton.hideContextPanel();
	}
	,hideAllElements: function() {
		com.wiris.util.ui.component.ToolBar.prototype.hideAllElements.call(this);
		var _g = 0, _g1 = this.responsiveSections;
		while(_g < _g1.length) {
			var section = _g1[_g];
			++_g;
			var components = section.getChildren();
			var _g2 = 0;
			while(_g2 < components.length) {
				var component = components[_g2];
				++_g2;
				component.setVisible(false);
			}
		}
	}
	,firePanelVisibilityChangedEvent: function(panel,visibility) {
		var _g = 0, _g1 = this.listeners;
		while(_g < _g1.length) {
			var l = _g1[_g];
			++_g;
			l.panelInResponsiveSectionVisibilityChanged(panel,visibility);
		}
	}
	,removeResponsiveToolbarListener: function(l) {
		HxOverrides.remove(this.listeners,l);
	}
	,addResponsiveToolbarListener: function(l) {
		if(!com.wiris.system.ArrayEx.contains(this.listeners,l)) this.listeners.push(l);
	}
	,getComponentById: function(id) {
		var component = this.contextPanelButton.getComponentById(id);
		if(component != null) return component;
		return com.wiris.util.ui.component.ToolBar.prototype.getComponentById.call(this,id);
	}
	,removeAllComponents: function() {
		com.wiris.util.ui.component.ToolBar.prototype.removeAllComponents.call(this);
		this.contextPanelButton.getContextPanel().removeAllComponents();
	}
	,setListening: function(panel,listening) {
		var panelComponents = panel.getComponents();
		var _g = 0;
		while(_g < panelComponents.length) {
			var c = panelComponents[_g];
			++_g;
			if(js.Boot.__instanceof(c,com.wiris.util.ui.component.ContextPanelButton)) {
				var contextPanelButton = c;
				this.setListening(contextPanelButton.getContextPanel(),listening);
			} else if(listening) c.addActionListener(this); else c.removeActionListener(this);
		}
	}
	,updateGUI: function() {
		if(this.isVisible()) {
			var computedWidth = this.getComputedStyle().getOffsetWidth();
			var contextPanelWidth = this.contextPanelButton.getComputedStyle().getOffsetWidth();
			var nonResponsiveWidth = this.getNonResponsiveSection().getComputedStyle().getOffsetWidth();
			var responsiveWidth = this.getResponsiveSection().getComputedStyle().getWidth();
			var maxWidth = computedWidth - contextPanelWidth - nonResponsiveWidth;
			if(maxWidth != this.lastMaxWidth || responsiveWidth != this.lastResponsiveWidth) {
				this.lastMaxWidth = maxWidth;
				this.lastResponsiveWidth = responsiveWidth;
				while(this.contextPanelButton.getContextPanel().getComponents().length > 0) {
					var panel = this.contextPanelButton.getContextPanel().getComponents()[0];
					this.contextPanelButton.getContextPanel().removeComponent(0);
					panel.setDirection(this.getDirection());
					this.getResponsiveSection().addComponent(panel);
					this.firePanelVisibilityChangedEvent(panel,true);
					this.setListening(panel,false);
				}
				var currentWidth = 0;
				var indexToHideFrom = 0;
				var _g = 0, _g1 = this.responsiveSections;
				while(_g < _g1.length) {
					var panel = _g1[_g];
					++_g;
					currentWidth += panel.getComputedStyle().getOffsetWidth();
					if(currentWidth < maxWidth) indexToHideFrom++; else break;
				}
				var _g1 = indexToHideFrom, _g = this.responsiveSections.length;
				while(_g1 < _g) {
					var i = _g1++;
					var panel = this.responsiveSections[i];
					var index = 0;
					while(this.getResponsiveSection().getComponents()[index] != panel) ++index;
					this.getResponsiveSection().removeComponent(index);
					this.contextPanelButton.getContextPanel().addComponent(panel);
					this.firePanelVisibilityChangedEvent(panel,false);
					panel.setDirection(this.responsiveDirection);
					this.setListening(panel,true);
				}
				this.contextPanelButton.setVisible(indexToHideFrom < this.responsiveSections.length);
			}
		}
	}
	,createSectionImpl: function(sectionContainer) {
		var section = com.wiris.util.ui.component.ToolBar.prototype.createSectionImpl.call(this,sectionContainer);
		section.addClass(com.wiris.util.ui.component.ResponsiveToolbar.CLASS_RESPONSIVE_TOOLBAR_SECTION);
		if(sectionContainer == this.sections && this.responsiveLocation == com.wiris.util.ui.component.ResponsiveToolbar.RESPONSIVE_SECTION_FIRST || sectionContainer == this.sectionsAtEnd && this.responsiveLocation == com.wiris.util.ui.component.ResponsiveToolbar.RESPONSIVE_SECTION_LAST) this.responsiveSections.push(section);
		return section;
	}
	,getContextPanelButton: function() {
		return this.contextPanelButton;
	}
	,getNonResponsiveSection: function() {
		return this.responsiveLocation == com.wiris.util.ui.component.ResponsiveToolbar.RESPONSIVE_SECTION_FIRST?this.sectionsAtEnd:this.sections;
	}
	,getResponsiveSection: function() {
		return this.responsiveLocation == com.wiris.util.ui.component.ResponsiveToolbar.RESPONSIVE_SECTION_FIRST?this.sections:this.sectionsAtEnd;
	}
	,listeners: null
	,lastResponsiveWidth: null
	,lastMaxWidth: null
	,contextPanelButton: null
	,responsiveSections: null
	,responsiveDirection: null
	,responsiveLocation: null
	,__class__: com.wiris.util.ui.component.ResponsiveToolbar
});
com.wiris.util.ui.component.SelectableButtonPanel = $hxClasses["com.wiris.util.ui.component.SelectableButtonPanel"] = function(selectableId) {
	com.wiris.util.ui.component.ButtonPanel.call(this);
	this.selectableId = selectableId;
	this.selectionController = new com.wiris.util.ui.controller.SelectionController(selectableId);
	this.selectionController.addSelectable(this,false);
};
com.wiris.util.ui.component.SelectableButtonPanel.__name__ = ["com","wiris","util","ui","component","SelectableButtonPanel"];
com.wiris.util.ui.component.SelectableButtonPanel.__interfaces__ = [com.wiris.util.ui.controller.Selectable];
com.wiris.util.ui.component.SelectableButtonPanel.newBasicSelectableButtonPanel = function(selectableId,primary,label,secondary,changeAction) {
	return com.wiris.util.ui.component.SelectableButtonPanel.newIndentedSelectableButtonPanel(selectableId,primary,label,secondary,0,changeAction);
}
com.wiris.util.ui.component.SelectableButtonPanel.newIndentedSelectableButtonPanel = function(selectableId,primary,label,secondary,indentationLevel,changeAction) {
	return com.wiris.util.ui.component.SelectableButtonPanel.newCustomSelectableButtonPanel(selectableId,primary,label == null?null:com.wiris.util.ui.component.Label.newWithText(label),secondary,indentationLevel,changeAction);
}
com.wiris.util.ui.component.SelectableButtonPanel.newCustomSelectableButtonPanel = function(selectableId,primary,label,secondary,indentationLevel,changeAction) {
	var buttonPanel = new com.wiris.util.ui.component.SelectableButtonPanel(selectableId);
	com.wiris.util.ui.component.ButtonPanel.configureButtonPanel(buttonPanel,primary,label,secondary,indentationLevel,null);
	buttonPanel.setChangeAction(changeAction);
	return buttonPanel;
}
com.wiris.util.ui.component.SelectableButtonPanel.__super__ = com.wiris.util.ui.component.ButtonPanel;
com.wiris.util.ui.component.SelectableButtonPanel.prototype = $extend(com.wiris.util.ui.component.ButtonPanel.prototype,{
	setSelected: function(selected) {
		this.selectionController.setSelected(this.selectableId,selected);
	}
	,isSelected: function() {
		return this.selectionController != null && this.selectionController.isSelected(this.selectableId);
	}
	,setChangeAction: function(changeAction) {
		this.changeAction = changeAction;
	}
	,getChangeAction: function() {
		return this.changeAction;
	}
	,getSelectableId: function() {
		return this.selectableId;
	}
	,getComponent: function() {
		return this;
	}
	,setSelectionController: function(selectionController) {
		var selected = this.isSelected();
		if(this.selectionController != null) this.selectionController.removeSelectable(this.selectableId);
		this.selectionController = selectionController;
		this.selectionController.addSelectable(this,selected);
	}
	,getSelectionController: function() {
		return this.selectionController;
	}
	,changeAction: null
	,selectableId: null
	,selectionController: null
	,__class__: com.wiris.util.ui.component.SelectableButtonPanel
});
com.wiris.util.ui.component.SignInButton = $hxClasses["com.wiris.util.ui.component.SignInButton"] = function() {
	com.wiris.util.ui.component.ContextMenuButton.call(this);
	this.addClass(com.wiris.util.ui.component.SignInButton.CLASS_SIGNIN_BUTTON);
	this.setTooltip("Sign in");
	this.setNormalIcon(new com.wiris.util.ui.MaterialIcon("account_circle"));
	this.addOptionWithTextAndIcon("Log out","Log out",new com.wiris.util.ui.MaterialIcon("power_settings_new"),new com.wiris.util.ui.Action(null,"signOut"));
	this.isSignedIn = false;
	this.profilePictureURL = null;
};
com.wiris.util.ui.component.SignInButton.__name__ = ["com","wiris","util","ui","component","SignInButton"];
com.wiris.util.ui.component.SignInButton.__super__ = com.wiris.util.ui.component.ContextMenuButton;
com.wiris.util.ui.component.SignInButton.prototype = $extend(com.wiris.util.ui.component.ContextMenuButton.prototype,{
	activate: function() {
		if(this.isSignedIn) com.wiris.util.ui.component.ContextMenuButton.prototype.activate.call(this); else {
			var action = new com.wiris.util.ui.Action(null,"openFirstDialog");
			this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createActionEvent(this,action));
		}
	}
	,setNormalIcon: function(icon) {
		com.wiris.util.ui.component.ContextMenuButton.prototype.setNormalIcon.call(this,icon);
		var action = new com.wiris.util.ui.Action(null,"profilePhotoChanged");
		this.fireEvent(com.wiris.util.ui.interaction.GenericEvent.createActionEvent(this,action));
	}
	,setProfilePictureURL: function(profilePictureURL) {
		this.profilePictureURL = profilePictureURL;
	}
	,setSignedIn: function(signedIn) {
		this.isSignedIn = signedIn;
		if(this.isSignedIn) {
			if(this.profilePictureURL != null) this.setNormalIcon(com.wiris.util.ui.ImageIcon.newFromFile(this.profilePictureURL));
		} else this.setNormalIcon(new com.wiris.util.ui.MaterialIcon("account_circle"));
	}
	,profilePictureURL: null
	,isSignedIn: null
	,__class__: com.wiris.util.ui.component.SignInButton
});
com.wiris.util.ui.component.Slider = $hxClasses["com.wiris.util.ui.component.Slider"] = function(text,readOnlyTextField) {
	this.maxSet = false;
	this.minSet = false;
	com.wiris.util.ui.component.Component.call(this);
	this.addClass(com.wiris.util.ui.component.Slider.CLASS_SLIDER);
	this.text = text;
	if(this.text != null && !(this.text == "")) this.label = com.wiris.util.ui.component.Label.newWithText(this.text);
	this.textField = new com.wiris.util.ui.component.NumberTextField();
	this.textField.setPlaceholder("0");
	this.textField.setReadOnly(readOnlyTextField);
	this.textField.getStyle().setWidth(92);
	this.textField.addChangeListener(this);
	this.steps = com.wiris.util.ui.component.Slider.DEFAULT_STEPS;
	this.setValue("0");
	this.setRange(0,100);
	this.addKeyListener(this);
};
com.wiris.util.ui.component.Slider.__name__ = ["com","wiris","util","ui","component","Slider"];
com.wiris.util.ui.component.Slider.__interfaces__ = [com.wiris.util.ui.interaction.KeyListener,com.wiris.util.ui.interaction.ChangeListener,com.wiris.util.ui.component.Field];
com.wiris.util.ui.component.Slider.newWithValue = function(text,readOnlyTextField,value,changeAction,listener) {
	var slider = new com.wiris.util.ui.component.Slider(text,readOnlyTextField);
	slider.setValue("" + value);
	slider.setChangeAction(changeAction);
	slider.addActionListener(listener);
	return slider;
}
com.wiris.util.ui.component.Slider.newWithValueAndRange = function(text,readOnlyTextField,value,min,max,changeAction,listener) {
	var slider = new com.wiris.util.ui.component.Slider(text,readOnlyTextField);
	slider.setRange(min,max);
	slider.setValue("" + value);
	slider.setChangeAction(changeAction);
	slider.addActionListener(listener);
	return slider;
}
com.wiris.util.ui.component.Slider.__super__ = com.wiris.util.ui.component.Component;
com.wiris.util.ui.component.Slider.prototype = $extend(com.wiris.util.ui.component.Component.prototype,{
	keyType: function(e) {
	}
	,keyRelease: function(e) {
	}
	,keyPress: function(e) {
		if(e.getKeyCode() == com.wiris.util.ui.interaction.KeyCode.LEFT) this.setValue("" + (this.value - (this.max - this.min) / 100)); else if(e.getKeyCode() == com.wiris.util.ui.interaction.KeyCode.RIGHT) this.setValue("" + (this.value + (this.max - this.min) / 100));
	}
	,stateChanged: function(e) {
		var val = this.textField.getValue();
		var textValue = !(val == "")?Std.parseFloat(this.textField.getValue()):-1;
		if(textValue == this.value) return; else if(textValue > this.max) textValue = this.max; else if(textValue < this.min) textValue = this.min; else textValue = Math.round(textValue / this.step) * this.step;
		this.setValue("" + textValue);
	}
	,getComponent: function() {
		return this;
	}
	,setChangeAction: function(changeAction) {
		this.changeAction = changeAction;
		return this;
	}
	,setText: function(text) {
		this.text = text;
		if(this.label != null) this.label.setText(this.text); else this.label = com.wiris.util.ui.component.Label.newWithText(this.text);
		return this;
	}
	,updateStep: function() {
		this.step = (this.max - this.min) / this.steps;
		this.textField.setStep(this.step);
	}
	,setSteps: function(steps) {
		this.steps = steps;
		this.updateStep();
		return this;
	}
	,setRange: function(min,max) {
		if(!this.minSet || this.min != min) {
			this.min = min;
			this.textField.setMinimum(this.min);
			this.getStyle().setCSSVariable("--slider-min","" + min);
			this.minSet = true;
		}
		if(!this.maxSet || this.max != max) {
			this.max = max;
			this.textField.setMaximum(this.max);
			this.getStyle().setCSSVariable("--slider-max","" + max);
			this.maxSet = true;
		}
		this.updateStep();
		return this;
	}
	,setMax: function(max) {
		return this.setRange(this.min,max);
	}
	,setMin: function(min) {
		return this.setRange(min,this.max);
	}
	,getTextField: function() {
		return this.textField;
	}
	,setEnabled: function(enabled) {
		com.wiris.util.ui.component.Component.prototype.setEnabled.call(this,enabled);
		this.changeState();
		return this;
	}
	,setValue: function(value) {
		if(value == null) value = "0";
		var val = Std.parseFloat(value);
		if(val == this.value) return; else if(val > this.max) this.value = this.max; else if(val < this.min) this.value = this.min; else {
			var correctionFactor = Math.pow(10,("" + this.step).length - (this.step > 0 && this.step < 1?2:0)) | 0;
			var delta = val - this.value;
			this.value = Math.round(this.value * correctionFactor + delta * correctionFactor) / correctionFactor;
		}
		this.textField.setValue("" + this.value);
		this.getStyle().setCSSVariable("--slider-value","" + this.value);
		this.changeState();
		if(this.changeAction != null) this.performAction(this.changeAction);
	}
	,getLabel: function() {
		return this.label;
	}
	,getText: function() {
		return this.text;
	}
	,getStep: function() {
		return this.step;
	}
	,getMax: function() {
		return this.max;
	}
	,getMin: function() {
		return this.min;
	}
	,getValue: function() {
		return "" + this.value;
	}
	,maxSet: null
	,minSet: null
	,changeAction: null
	,textField: null
	,label: null
	,text: null
	,step: null
	,steps: null
	,max: null
	,min: null
	,value: null
	,__class__: com.wiris.util.ui.component.Slider
});
com.wiris.util.ui.component.Switch = $hxClasses["com.wiris.util.ui.component.Switch"] = function(id) {
	com.wiris.util.ui.component.Component.call(this);
	this.addClass(com.wiris.util.ui.component.Switch.CLASS_SWITCH);
	this.selectableId = id;
	this.changeAction = null;
	this.selectionController = new com.wiris.util.ui.controller.SelectionController(this.selectableId);
	this.selectionController.addSelectable(this,false);
};
com.wiris.util.ui.component.Switch.__name__ = ["com","wiris","util","ui","component","Switch"];
com.wiris.util.ui.component.Switch.__interfaces__ = [com.wiris.util.ui.controller.Selectable,com.wiris.util.ui.component.Field];
com.wiris.util.ui.component.Switch.newWithTooltip = function(tooltip,id) {
	var switchButton = new com.wiris.util.ui.component.Switch(id);
	switchButton.setTooltip(tooltip);
	return switchButton;
}
com.wiris.util.ui.component.Switch.__super__ = com.wiris.util.ui.component.Component;
com.wiris.util.ui.component.Switch.prototype = $extend(com.wiris.util.ui.component.Component.prototype,{
	setSelected: function(selected) {
		this.selectionController.setSelected(this.selectableId,selected);
	}
	,isSelected: function() {
		return this.selectionController.isSelected(this.selectableId);
	}
	,setChangeAction: function(changeAction) {
		this.changeAction = changeAction;
	}
	,getChangeAction: function() {
		return this.changeAction;
	}
	,getSelectableId: function() {
		return this.selectableId;
	}
	,getComponent: function() {
		return this;
	}
	,setSelectionController: function(selectionController) {
		var selected = this.selectionController.isSelected(this.selectableId);
		if(this.selectionController != null) this.selectionController.removeSelectable(this.selectableId);
		this.selectionController = selectionController;
		this.selectionController.addSelectable(this,selected);
	}
	,getSelectionController: function() {
		return this.selectionController;
	}
	,setValue: function(value) {
		this.setSelected(!(value == "false"));
	}
	,getValue: function() {
		if(this.isSelected()) return "true";
		return "false";
	}
	,getTooltip: function() {
		return this.tooltip;
	}
	,setTooltip: function(tooltip) {
		this.tooltip = tooltip;
	}
	,selectionController: null
	,changeAction: null
	,tooltip: null
	,selectableId: null
	,__class__: com.wiris.util.ui.component.Switch
});
com.wiris.util.ui.component.TextArea = $hxClasses["com.wiris.util.ui.component.TextArea"] = function() {
	com.wiris.util.ui.component.TextComponent.call(this);
	this.addClass(com.wiris.util.ui.component.TextArea.CLASS_TEXT_AREA);
};
com.wiris.util.ui.component.TextArea.__name__ = ["com","wiris","util","ui","component","TextArea"];
com.wiris.util.ui.component.TextArea.newWithLabel = function(label) {
	var textArea = new com.wiris.util.ui.component.TextArea();
	textArea.setLabel(label);
	return textArea;
}
com.wiris.util.ui.component.TextArea.newWithPlaceholder = function(placeholder) {
	var textArea = new com.wiris.util.ui.component.TextArea();
	textArea.setPlaceholder(placeholder);
	return textArea;
}
com.wiris.util.ui.component.TextArea.newWithLabelAndPlaceholder = function(label,placeholder) {
	var textArea = new com.wiris.util.ui.component.TextArea();
	textArea.setPlaceholder(placeholder);
	textArea.setLabel(label);
	return textArea;
}
com.wiris.util.ui.component.TextArea.__super__ = com.wiris.util.ui.component.TextComponent;
com.wiris.util.ui.component.TextArea.prototype = $extend(com.wiris.util.ui.component.TextComponent.prototype,{
	__class__: com.wiris.util.ui.component.TextArea
});
com.wiris.util.ui.component.ToggleButton = $hxClasses["com.wiris.util.ui.component.ToggleButton"] = function(id) {
	com.wiris.util.ui.component.Button.call(this);
	this.addClass(com.wiris.util.ui.component.ToggleButton.CLASS_TOGGLE_BUTTON);
	this.selectableId = id;
	this.changeAction = null;
	this.selectionController = new com.wiris.util.ui.controller.SelectionController(id);
	this.selectionController.addSelectable(this,false);
};
com.wiris.util.ui.component.ToggleButton.__name__ = ["com","wiris","util","ui","component","ToggleButton"];
com.wiris.util.ui.component.ToggleButton.__interfaces__ = [com.wiris.util.ui.controller.Selectable,com.wiris.util.ui.component.Field];
com.wiris.util.ui.component.ToggleButton.newWithText = function(text,id,changeAction,listener) {
	var button = new com.wiris.util.ui.component.ToggleButton(id);
	button.setText(text);
	button.setChangeAction(changeAction);
	button.addActionListener(listener);
	return button;
}
com.wiris.util.ui.component.ToggleButton.newWithIcon = function(tooltip,icon,id,changeAction,listener) {
	var button = new com.wiris.util.ui.component.ToggleButton(id);
	button.setTooltip(tooltip);
	button.setNormalIcon(icon);
	button.setChangeAction(changeAction);
	button.addActionListener(listener);
	button.setId(id + "Button");
	return button;
}
com.wiris.util.ui.component.ToggleButton.__super__ = com.wiris.util.ui.component.Button;
com.wiris.util.ui.component.ToggleButton.prototype = $extend(com.wiris.util.ui.component.Button.prototype,{
	getSelectableId: function() {
		return this.selectableId;
	}
	,setSelectionController: function(selectionController) {
		var selected = this.selectionController.isSelected(this.selectableId);
		if(this.selectionController != null) this.selectionController.removeSelectable(this.selectableId);
		this.selectionController = selectionController;
		this.selectionController.addSelectable(this,selected);
	}
	,getSelectionController: function() {
		return this.selectionController;
	}
	,getComponent: function() {
		return this;
	}
	,setValue: function(value) {
		this.setSelected(!(value == "false"));
	}
	,getValue: function() {
		if(this.isSelected()) return "true";
		return "false";
	}
	,setChangeAction: function(changeAction) {
		this.changeAction = changeAction;
	}
	,setSelected: function(selected) {
		this.selectionController.setSelected(this.selectableId,selected);
	}
	,getChangeAction: function() {
		return this.changeAction;
	}
	,isSelected: function() {
		return this.selectionController.isSelected(this.selectableId);
	}
	,selectionController: null
	,changeAction: null
	,selectableId: null
	,__class__: com.wiris.util.ui.component.ToggleButton
});
com.wiris.util.ui.component.ToggleButtonsPanel = $hxClasses["com.wiris.util.ui.component.ToggleButtonsPanel"] = function() {
	com.wiris.util.ui.component.FlowPanel.call(this,com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT);
	this.addClass(com.wiris.util.ui.component.ToggleButtonsPanel.CLASS_TOGGLE_BUTTONS_PANEL);
	this.selectionController = com.wiris.util.ui.controller.SelectionController.newMutuallyExclusive("id");
	this.buttons = new Hash();
};
com.wiris.util.ui.component.ToggleButtonsPanel.__name__ = ["com","wiris","util","ui","component","ToggleButtonsPanel"];
com.wiris.util.ui.component.ToggleButtonsPanel.__super__ = com.wiris.util.ui.component.FlowPanel;
com.wiris.util.ui.component.ToggleButtonsPanel.prototype = $extend(com.wiris.util.ui.component.FlowPanel.prototype,{
	getSelectionController: function() {
		return this.selectionController;
	}
	,newToggleButtonWithText: function(text,id,selected,action,listener,enabled) {
		var toggleButton = com.wiris.util.ui.component.ToggleButton.newWithText(text,id,action,listener);
		this.addToggleButton(toggleButton,selected,enabled);
	}
	,addToggleButton: function(toggleButton,selected,enabled) {
		toggleButton.setSelectionController(this.selectionController);
		this.buttons.set(toggleButton.getSelectableId(),toggleButton);
		if(!enabled) this.disableToggleButtonWithId(toggleButton.getSelectableId());
		if(selected && !enabled) selected = false;
		this.selectionController.setSelected(toggleButton.getSelectableId(),selected);
		this.addComponent(toggleButton);
	}
	,getIds: function() {
		return this.buttons.keys();
	}
	,getFirstEnabledId: function() {
		var keys = this.buttons.keys();
		while(keys.hasNext()) {
			var key = keys.next();
			if(this.buttons.get(key).isEnabled()) return key;
		}
		return null;
	}
	,enableAll: function() {
		var keys = this.buttons.keys();
		while(keys.hasNext()) this.enableToggleButtonWithId(keys.next());
	}
	,isToggleButtonWithIdEnabled: function(id) {
		var button = this.buttons.get(id);
		return button != null && button.isEnabled();
	}
	,disableToggleButtonWithId: function(id) {
		var button = this.buttons.get(id);
		if(button != null) button.setEnabled(false);
	}
	,enableToggleButtonWithId: function(id) {
		var button = this.buttons.get(id);
		if(button != null) button.setEnabled(true);
	}
	,pickTogglebuttonWithId: function(id) {
		this.selectionController.setSelected(id,true);
	}
	,getToggleButtonById: function(id) {
		return this.buttons.get(id);
	}
	,buttons: null
	,selectionController: null
	,__class__: com.wiris.util.ui.component.ToggleButtonsPanel
});
com.wiris.util.ui.component.ToggleDropdown = $hxClasses["com.wiris.util.ui.component.ToggleDropdown"] = function(id) {
	com.wiris.util.ui.component.Dropdown.call(this);
	this.addClass(com.wiris.util.ui.component.ToggleDropdown.CLASS_TOGGLE_DROPDOWN);
	this.getContextPanel().addClass(com.wiris.util.ui.component.ToggleDropdown.CLASS_TOGGLE_DROPDOWN_DIALOG).addClass(com.wiris.util.ui.component.Panel.CLASS_PANEL_SOLID);
	this.getContextPanel().getStyle().setPadding(com.wiris.util.ui.Style.SIZE_AUTO,com.wiris.util.ui.Style.SIZE_AUTO,com.wiris.util.ui.Style.SIZE_AUTO,com.wiris.util.ui.Style.SIZE_AUTO);
	this.setTickable(false);
	this.selectableId = id;
	this.selectionController = new com.wiris.util.ui.controller.SelectionController(id);
	this.selectionController.addSelectable(this,false);
};
com.wiris.util.ui.component.ToggleDropdown.__name__ = ["com","wiris","util","ui","component","ToggleDropdown"];
com.wiris.util.ui.component.ToggleDropdown.__interfaces__ = [com.wiris.util.ui.controller.Selectable];
com.wiris.util.ui.component.ToggleDropdown.__super__ = com.wiris.util.ui.component.Dropdown;
com.wiris.util.ui.component.ToggleDropdown.prototype = $extend(com.wiris.util.ui.component.Dropdown.prototype,{
	pickValue: function(value) {
		com.wiris.util.ui.component.Dropdown.prototype.pickValue.call(this,value);
		if(value != null && value == this.currentValue && this.changeValueAction != null) this.performAction(this.changeValueAction);
	}
	,setChangeAction: function(changeAction) {
		this.changeAction = changeAction;
	}
	,getChangeAction: function() {
		return this.changeAction;
	}
	,setSelected: function(selected) {
		this.selectionController.setSelected(this.selectableId,selected);
	}
	,isSelected: function() {
		return this.selectionController.isSelected(this.selectableId);
	}
	,getSelectableId: function() {
		return this.selectableId;
	}
	,setSelectionController: function(selectionController) {
		var selected = this.selectionController.isSelected(this.selectableId);
		if(this.selectionController != null) this.selectionController.removeSelectable(this.selectableId);
		this.selectionController = selectionController;
		this.selectionController.addSelectable(this,selected);
	}
	,getSelectionController: function() {
		return this.selectionController;
	}
	,changeAction: null
	,selectionController: null
	,selectableId: null
	,__class__: com.wiris.util.ui.component.ToggleDropdown
});
com.wiris.util.ui.controller.ActivationController = $hxClasses["com.wiris.util.ui.controller.ActivationController"] = function(target,hasHover) {
	this.target = target;
	this.hasHover = hasHover;
	this.hovering = false;
	this.activateOnRelease = true;
	this.target.addDefaultKeyListener(this);
	this.target.addDefaultMouseListener(this);
};
com.wiris.util.ui.controller.ActivationController.__name__ = ["com","wiris","util","ui","controller","ActivationController"];
com.wiris.util.ui.controller.ActivationController.__interfaces__ = [com.wiris.util.ui.interaction.MouseListener,com.wiris.util.ui.interaction.KeyListener];
com.wiris.util.ui.controller.ActivationController.prototype = {
	activateTarget: function(e) {
		var target = this.getTarget();
		if(target.isEnabled()) target.activate();
	}
	,keyType: function(e) {
	}
	,performKeyAction: function(e) {
		var keyCode = e.getKeyCode();
		if(com.wiris.util.ui.interaction.KeyCode.ENTER == keyCode || com.wiris.util.ui.interaction.KeyCode.SPACE == keyCode) this.activateTarget(e);
	}
	,keyRelease: function(e) {
		if(this.isActivateOnRelease()) this.performKeyAction(e);
	}
	,keyPress: function(e) {
		if(!this.isActivateOnRelease()) this.performKeyAction(e);
	}
	,mouseExit: function(e) {
		if(!this.getTarget().isEnabled()) return;
		if(this.hasHover && this.hovering) {
			this.getTarget().changeState();
			this.hovering = false;
		}
	}
	,mouseEnter: function(e) {
		if(!this.getTarget().isEnabled()) return;
		if(this.hasHover && !this.hovering) {
			this.getTarget().changeState();
			this.hovering = true;
		}
	}
	,mouseRelease: function(e) {
	}
	,mousePress: function(e) {
		if(!this.isActivateOnRelease()) {
			this.activateTarget(e);
			e.stopPropagation();
		}
	}
	,mouseDoubleClick: function(e) {
	}
	,mouseClick: function(e) {
		if(this.isActivateOnRelease()) this.activateTarget(e);
	}
	,isActivateOnRelease: function() {
		return this.activateOnRelease;
	}
	,setActivateOnRelease: function(activateOnRelease) {
		this.activateOnRelease = activateOnRelease;
	}
	,getTarget: function() {
		return this.target;
	}
	,setTarget: function(target) {
		this.target = target;
	}
	,activateOnRelease: null
	,hovering: null
	,hasHover: null
	,target: null
	,__class__: com.wiris.util.ui.controller.ActivationController
}
com.wiris.util.ui.controller.ExpansionCheckboxController = $hxClasses["com.wiris.util.ui.controller.ExpansionCheckboxController"] = function(expansionCheckbox) {
	this.component = expansionCheckbox;
	this.parent = null;
	this.items = new Array();
	this.state = com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_SELECTED;
};
com.wiris.util.ui.controller.ExpansionCheckboxController.__name__ = ["com","wiris","util","ui","controller","ExpansionCheckboxController"];
com.wiris.util.ui.controller.ExpansionCheckboxController.prototype = {
	updateState: function() {
		var activated = 0;
		var undetermined = 0;
		var _g = 0, _g1 = this.items;
		while(_g < _g1.length) {
			var item = _g1[_g];
			++_g;
			if(item.getController().getState() == com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_SELECTED) activated++; else if(item.getController().getState() == com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_UNDETERMINED) undetermined++;
		}
		if(activated == this.items.length) this.setState(com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_SELECTED,true,false); else if(activated > 0 || undetermined > 0) this.setUndeterminedState(); else this.setState(com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_UNSELECTED,true,false);
	}
	,directUpdateState: function() {
		if(this.state == com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_SELECTED || this.state == com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_UNDETERMINED) this.setState(com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_UNSELECTED,true,true); else this.setState(com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_SELECTED,true,true);
	}
	,setUndeterminedState: function() {
		this.state = com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_UNDETERMINED;
		this.component.setState(com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_UNDETERMINED);
		if(this.parent != null) this.parent.getController().updateState();
	}
	,getState: function() {
		return this.state;
	}
	,setState: function(state,checkParent,checkChildren) {
		this.state = state;
		this.component.setState(state);
		if(this.parent != null && checkParent) this.parent.getController().updateState();
		if(checkChildren) {
			var _g = 0, _g1 = this.items;
			while(_g < _g1.length) {
				var expansionCheckbox = _g1[_g];
				++_g;
				expansionCheckbox.getController().setState(state,false,true);
			}
		}
	}
	,isParent: function() {
		return this.items.length > 0;
	}
	,setParent: function(parent) {
		this.parent = parent;
	}
	,getItems: function() {
		return this.items;
	}
	,addItem: function(expansionCheckbox) {
		expansionCheckbox.getController().setParent(this.component);
		this.component.addExpansionCheckbox(expansionCheckbox);
		this.items.push(expansionCheckbox);
	}
	,items: null
	,parent: null
	,component: null
	,state: null
	,__class__: com.wiris.util.ui.controller.ExpansionCheckboxController
}
com.wiris.util.ui.controller.ExpansionController = $hxClasses["com.wiris.util.ui.controller.ExpansionController"] = function(controlComponent,contentPanel,expanded) {
	this.controlComponent = controlComponent;
	this.contentPanel = contentPanel;
	this.expanded = expanded;
	this.contentPanel.setVisible(expanded);
	this.controlComponent.addActionListener(this);
};
com.wiris.util.ui.controller.ExpansionController.__name__ = ["com","wiris","util","ui","controller","ExpansionController"];
com.wiris.util.ui.controller.ExpansionController.__interfaces__ = [com.wiris.util.ui.interaction.ActionListener];
com.wiris.util.ui.controller.ExpansionController.prototype = {
	actionPerformed: function(e) {
		var action = e.getAction();
		var actionId = action.getId();
		if("expand" == actionId) this.expand(); else if("collapse" == actionId) this.collapse(); else if("toggle" == actionId) this.toggle();
	}
	,isExpanded: function() {
		return this.expanded;
	}
	,collapse: function() {
		if(!this.isExpanded()) return;
		this.expanded = false;
		this.contentPanel.setVisible(false);
		this.contentPanel.changeState();
	}
	,expand: function() {
		if(this.isExpanded()) return;
		this.expanded = true;
		this.contentPanel.setVisible(true);
		this.contentPanel.changeState();
	}
	,toggle: function() {
		if(this.isExpanded()) this.collapse(); else this.expand();
	}
	,expanded: null
	,contentPanel: null
	,controlComponent: null
	,__class__: com.wiris.util.ui.controller.ExpansionController
}
com.wiris.util.ui.controller.ResponsiveToolbarListener = $hxClasses["com.wiris.util.ui.controller.ResponsiveToolbarListener"] = function() { }
com.wiris.util.ui.controller.ResponsiveToolbarListener.__name__ = ["com","wiris","util","ui","controller","ResponsiveToolbarListener"];
com.wiris.util.ui.controller.ResponsiveToolbarListener.prototype = {
	panelInResponsiveSectionVisibilityChanged: null
	,__class__: com.wiris.util.ui.controller.ResponsiveToolbarListener
}
com.wiris.util.ui.controller.SelectionController = $hxClasses["com.wiris.util.ui.controller.SelectionController"] = function(groupId) {
	this.groupId = groupId;
	this.minSelections = 0;
	this.maxSelections = 0;
	this.preventNewSelectionsAtMax = true;
	this.targets = new Hash();
	this.activeTargets = new Array();
	this.firesChangeActions = true;
};
com.wiris.util.ui.controller.SelectionController.__name__ = ["com","wiris","util","ui","controller","SelectionController"];
com.wiris.util.ui.controller.SelectionController.__interfaces__ = [com.wiris.util.ui.interaction.KeyListener,com.wiris.util.ui.interaction.MouseListener];
com.wiris.util.ui.controller.SelectionController.newMutuallyExclusive = function(groupId) {
	var selectionController = new com.wiris.util.ui.controller.SelectionController(groupId);
	selectionController.setMinSelections(1);
	selectionController.setMaxSelections(1);
	selectionController.setPreventNewSelectionsAtMax(false);
	return selectionController;
}
com.wiris.util.ui.controller.SelectionController.prototype = {
	activateElement: function(e) {
		var source = e.getSource();
		var target = e.getTarget();
		if(source == target || js.Boot.__instanceof(target,com.wiris.util.ui.component.Panel) || js.Boot.__instanceof(target,com.wiris.util.ui.component.Label)) {
			var sourceId = source.getSelectableId();
			this.setSelected(sourceId,!this.isSelected(sourceId));
		}
	}
	,keyType: function(e) {
	}
	,keyRelease: function(e) {
		var keyCode = e.getKeyCode();
		if(keyCode == com.wiris.util.ui.interaction.KeyCode.ENTER || keyCode == com.wiris.util.ui.interaction.KeyCode.SPACE) this.activateElement(e);
	}
	,keyPress: function(e) {
		var keyCode = e.getKeyCode();
		if(keyCode == com.wiris.util.ui.interaction.KeyCode.ENTER || keyCode == com.wiris.util.ui.interaction.KeyCode.SPACE) {
			e.stopPropagation();
			e.preventDefault();
		}
	}
	,mouseExit: function(e) {
	}
	,mouseEnter: function(e) {
	}
	,mouseRelease: function(e) {
	}
	,mousePress: function(e) {
	}
	,mouseDoubleClick: function(e) {
	}
	,mouseClick: function(e) {
		this.activateElement(e);
	}
	,setSelected: function(id,selected) {
		if(this.isSelected(id) == selected) return;
		var component = this.targets.get(id).getComponent();
		var changeAction = this.targets.get(id).getChangeAction();
		if(selected) {
			if(this.maxSelections <= 0 || this.activeTargets.length < this.maxSelections) this.activeTargets.push(id); else if(!this.preventNewSelectionsAtMax) {
				var lastElement = this.activeTargets[0];
				var lastComponent = this.targets.get(lastElement).getComponent();
				var lastChangeAction = this.targets.get(lastElement).getChangeAction();
				HxOverrides.remove(this.activeTargets,lastElement);
				lastComponent.changeState();
				lastComponent.removeClass(com.wiris.util.ui.controller.SelectionController.CLASS_SELECTED);
				if(lastChangeAction != null && this.firesChangeActions) lastComponent.performAction(lastChangeAction);
				this.activeTargets.push(id);
			} else return;
		} else if(this.activeTargets.length > this.minSelections) HxOverrides.remove(this.activeTargets,id); else return;
		component.changeState();
		if(selected) component.addClass(com.wiris.util.ui.controller.SelectionController.CLASS_SELECTED); else component.removeClass(com.wiris.util.ui.controller.SelectionController.CLASS_SELECTED);
		if(changeAction != null && this.firesChangeActions) component.performAction(changeAction);
	}
	,isSelected: function(id) {
		return com.wiris.system.ArrayEx.contains(this.activeTargets,id);
	}
	,removeSelectable: function(id) {
		var target = this.targets.get(id);
		if(target != null) {
			this.targets.remove(id);
			HxOverrides.remove(this.activeTargets,id);
			target.getComponent().removeDefaultMouseListener(this);
			target.getComponent().removeDefaultKeyListener(this);
		}
	}
	,addSelectable: function(target,selected) {
		var id = target.getSelectableId();
		if(this.targets.get(id) == null) {
			this.targets.set(id,target);
			if(target.getSelectionController() != this) target.setSelectionController(this);
			target.getComponent().addDefaultMouseListener(this);
			target.getComponent().addDefaultKeyListener(this);
			if(selected) this.setSelected(id,true); else target.getComponent().removeClass(com.wiris.util.ui.controller.SelectionController.CLASS_SELECTED);
		}
	}
	,isPreventNewSelectionsAtMax: function() {
		return this.preventNewSelectionsAtMax;
	}
	,getMaxSelections: function() {
		return this.maxSelections;
	}
	,getMinSelections: function() {
		return this.minSelections;
	}
	,setPreventNewSelectionsAtMax: function(preventNewSelectionsAtMax) {
		this.preventNewSelectionsAtMax = preventNewSelectionsAtMax;
	}
	,setMaxSelections: function(maxSelections) {
		this.maxSelections = maxSelections;
	}
	,setMinSelections: function(minSelections) {
		this.minSelections = minSelections;
	}
	,setFireChangeActions: function(firesChangeActions) {
		this.firesChangeActions = firesChangeActions;
	}
	,isFireChangeActions: function() {
		return this.firesChangeActions;
	}
	,firesChangeActions: null
	,activeTargets: null
	,targets: null
	,groupId: null
	,preventNewSelectionsAtMax: null
	,maxSelections: null
	,minSelections: null
	,__class__: com.wiris.util.ui.controller.SelectionController
}
com.wiris.util.ui.controller.ToolbarDefinition = $hxClasses["com.wiris.util.ui.controller.ToolbarDefinition"] = function(id,title,iconName,iconFormat,value,items,titleHtml) {
	this.id = id;
	this.title = title;
	this.value = value;
	this.iconFormat = iconFormat;
	this.iconName = iconName;
	this.items = items;
	this.titleHtml = titleHtml;
};
com.wiris.util.ui.controller.ToolbarDefinition.__name__ = ["com","wiris","util","ui","controller","ToolbarDefinition"];
com.wiris.util.ui.controller.ToolbarDefinition.deserialize = function(stringDef) {
	if(stringDef != null) {
		var obj = com.wiris.util.json.JSon.decode(stringDef);
		var hash = com.wiris.util.json.JSon.getHash(obj);
		return com.wiris.util.ui.controller.ToolbarDefinition.getDefinitionFromHash(hash);
	} else return null;
}
com.wiris.util.ui.controller.ToolbarDefinition.getDefinitionFromHash = function(hash) {
	var id = hash.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ID);
	var title = hash.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_TITLE);
	var value = hash.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_VALUE);
	var titleHtml = hash.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_TITLE_HTML) == null?false:com.wiris.util.json.JSon.getBoolean(hash.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_TITLE_HTML));
	var iconFormat = null;
	var iconName = null;
	var icon = com.wiris.util.json.JSon.getHash(hash.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ICON));
	if(icon != null) {
		iconFormat = icon.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ICON_TYPE);
		iconName = icon.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ICON_NAME);
	}
	if(id == null) return null;
	var items = com.wiris.util.json.JSon.getHashArray(hash.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ITEMS));
	var children = new Array();
	if(items != null) {
		var _g1 = 0, _g = items.length;
		while(_g1 < _g) {
			var i = _g1++;
			var item = items[i];
			children.push(com.wiris.util.ui.controller.ToolbarDefinition.getDefinitionFromHash(item));
		}
	}
	return new com.wiris.util.ui.controller.ToolbarDefinition(id,title,iconName,iconFormat,value,children,titleHtml);
}
com.wiris.util.ui.controller.ToolbarDefinition.newToolbarDefinitionFromJson = function(actions,config) {
	var id;
	var title = null;
	var iconName = null;
	var iconFormat = null;
	var value = null;
	var titleHtml = false;
	var definitions = new Array();
	if(config.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ID) != null) id = config.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ID); else throw com.wiris.util.ui.controller.ToolbarDefinition.PARSING_ERROR;
	var action = com.wiris.util.type.HashUtils.filterByParam(actions,com.wiris.util.ui.controller.ToolbarDefinition.DATA_ID,id);
	if(action != null) {
		if(action.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_TITLE) != null) {
			title = action.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_TITLE);
			if(action.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_TITLE_HTML) != null) titleHtml = com.wiris.util.json.JSon.getBoolean(action.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_TITLE_HTML));
		}
		if(action.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ICON) != null) {
			var icon = com.wiris.util.json.JSon.getHash(action.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ICON));
			if(icon.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ICON_NAME) != null && icon.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ICON_TYPE) != null) {
				iconName = icon.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ICON_NAME);
				iconFormat = icon.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ICON_TYPE);
			}
		}
		if(action.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_VALUE) != null) value = action.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_VALUE);
	}
	if(config.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ITEMS) != null) {
		var items = com.wiris.util.json.JSon.getHashArray(config.get(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ITEMS));
		var _g1 = 0, _g = items.length;
		while(_g1 < _g) {
			var i = _g1++;
			var child = items[i];
			var definition = com.wiris.util.ui.controller.ToolbarDefinition.newToolbarDefinitionFromJson(actions,child);
			definitions.push(definition);
		}
	}
	return new com.wiris.util.ui.controller.ToolbarDefinition(id,title,iconName,iconFormat,value,definitions,titleHtml);
}
com.wiris.util.ui.controller.ToolbarDefinition.prototype = {
	getId: function() {
		return this.id;
	}
	,setItems: function(items) {
		this.items = items;
	}
	,getItemById: function(id) {
		if(this.getId() == id) return this;
		var _g = 0, _g1 = this.items;
		while(_g < _g1.length) {
			var tb = _g1[_g];
			++_g;
			if(tb.getId() == id) return tb;
		}
		var _g = 0, _g1 = this.items;
		while(_g < _g1.length) {
			var tb = _g1[_g];
			++_g;
			var ret = tb.getItemById(id);
			if(ret != null) return ret;
		}
		return null;
	}
	,getItems: function() {
		return this.items;
	}
	,isTitleIsHtml: function() {
		return this.titleHtml;
	}
	,getTitle: function() {
		return this.title;
	}
	,isParent: function() {
		return this.items != null && this.items.length > 0;
	}
	,getValue: function() {
		return this.value;
	}
	,getIconFormat: function() {
		return this.iconFormat;
	}
	,getIconName: function() {
		return this.iconName;
	}
	,flatLevel: function() {
		var grandChildren = new Array();
		var _g1 = 0, _g = this.items.length;
		while(_g1 < _g) {
			var i = _g1++;
			var childItems = this.items[i].getItems();
			if(childItems != null) com.wiris.util.type.Arrays.addAll(grandChildren,childItems);
		}
		this.setItems(grandChildren);
	}
	,deleteItem: function(id) {
		var _g1 = 0, _g = this.items.length;
		while(_g1 < _g) {
			var i = _g1++;
			var item = this.items[i];
			if(item.getId() == id) {
				this.items.splice(i,1);
				return;
			} else if(item.getItems() != null) item.deleteItem(id);
		}
	}
	,getHashFromDefinition: function() {
		var hash = new Hash();
		if(this.id != null) hash.set(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ID,this.id);
		if(this.title != null) hash.set(com.wiris.util.ui.controller.ToolbarDefinition.DATA_TITLE,this.title);
		if(this.value != null) hash.set(com.wiris.util.ui.controller.ToolbarDefinition.DATA_VALUE,this.value);
		if(this.titleHtml) hash.set(com.wiris.util.ui.controller.ToolbarDefinition.DATA_TITLE_HTML,this.titleHtml);
		if(this.iconFormat != null || this.iconName != null) {
			var icon = new Hash();
			if(this.iconFormat != null) icon.set(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ICON_TYPE,this.iconFormat);
			if(this.iconName != null) icon.set(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ICON_NAME,this.iconName);
			hash.set(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ICON,icon);
		}
		if(this.isParent()) {
			var array = new Array();
			var _g = 0, _g1 = this.items;
			while(_g < _g1.length) {
				var item = _g1[_g];
				++_g;
				array.push(item.getHashFromDefinition());
			}
			hash.set(com.wiris.util.ui.controller.ToolbarDefinition.DATA_ITEMS,array);
		}
		return hash;
	}
	,serialize: function() {
		return com.wiris.util.json.JSon.encode(this.getHashFromDefinition());
	}
	,clone: function() {
		var itemsCopy;
		if(this.items == null) itemsCopy = null; else {
			itemsCopy = new Array();
			var _g = 0, _g1 = this.items;
			while(_g < _g1.length) {
				var item = _g1[_g];
				++_g;
				itemsCopy.push(item.clone());
			}
		}
		return new com.wiris.util.ui.controller.ToolbarDefinition(this.id,this.title,this.iconName,this.iconFormat,this.value,itemsCopy,this.titleHtml);
	}
	,titleHtml: null
	,iconFormat: null
	,iconName: null
	,items: null
	,value: null
	,title: null
	,id: null
	,__class__: com.wiris.util.ui.controller.ToolbarDefinition
}
com.wiris.util.ui.interaction.ActionEvent = $hxClasses["com.wiris.util.ui.interaction.ActionEvent"] = function() { }
com.wiris.util.ui.interaction.ActionEvent.__name__ = ["com","wiris","util","ui","interaction","ActionEvent"];
com.wiris.util.ui.interaction.ActionEvent.__interfaces__ = [com.wiris.util.ui.interaction.Event];
com.wiris.util.ui.interaction.ActionEvent.prototype = {
	getActionEventType: null
	,getAction: null
	,__class__: com.wiris.util.ui.interaction.ActionEvent
}
com.wiris.util.ui.interaction.ComponentTreeEvent = $hxClasses["com.wiris.util.ui.interaction.ComponentTreeEvent"] = function() { }
com.wiris.util.ui.interaction.ComponentTreeEvent.__name__ = ["com","wiris","util","ui","interaction","ComponentTreeEvent"];
com.wiris.util.ui.interaction.ComponentTreeEvent.__interfaces__ = [com.wiris.util.ui.interaction.Event];
com.wiris.util.ui.interaction.ComponentTreeEvent.prototype = {
	getComponentTreeEventType: null
	,getChildDestination: null
	,getChildPosition: null
	,getChild: null
	,__class__: com.wiris.util.ui.interaction.ComponentTreeEvent
}
com.wiris.util.ui.interaction.DrawingListener = $hxClasses["com.wiris.util.ui.interaction.DrawingListener"] = function() { }
com.wiris.util.ui.interaction.DrawingListener.__name__ = ["com","wiris","util","ui","interaction","DrawingListener"];
com.wiris.util.ui.interaction.DrawingListener.prototype = {
	drawingStrokesChanged: null
	,drawingPointsChanged: null
	,__class__: com.wiris.util.ui.interaction.DrawingListener
}
com.wiris.util.ui.interaction.EventType = $hxClasses["com.wiris.util.ui.interaction.EventType"] = function() { }
com.wiris.util.ui.interaction.EventType.__name__ = ["com","wiris","util","ui","interaction","EventType"];
com.wiris.util.ui.interaction.GenericEvent = $hxClasses["com.wiris.util.ui.interaction.GenericEvent"] = function(source,eventType,eventSubtype) {
	this.source = source;
	this.eventType = eventType;
	this.eventSubtype = eventSubtype;
	this.propagating = true;
	this.defaultPrevented = false;
};
com.wiris.util.ui.interaction.GenericEvent.__name__ = ["com","wiris","util","ui","interaction","GenericEvent"];
com.wiris.util.ui.interaction.GenericEvent.__interfaces__ = [com.wiris.util.ui.interaction.TouchEvent,com.wiris.util.ui.interaction.MouseMotionEvent,com.wiris.util.ui.interaction.MouseEvent,com.wiris.util.ui.interaction.KeyEvent,com.wiris.util.ui.interaction.FocusEvent,com.wiris.util.ui.interaction.DragAndDropEvent,com.wiris.util.ui.interaction.ComponentTreeEvent,com.wiris.util.ui.interaction.ComponentEvent,com.wiris.util.ui.interaction.ChangeEvent,com.wiris.util.ui.interaction.ActionEvent,com.wiris.util.ui.interaction.Event];
com.wiris.util.ui.interaction.GenericEvent.createActionEvent = function(source,action) {
	var e = new com.wiris.util.ui.interaction.GenericEvent(source,com.wiris.util.ui.interaction.EventType.ACTION_EVENT,com.wiris.util.ui.interaction.EventType.ACTION_EVENT_ACTION_PERFORMED);
	e.action = action;
	return e;
}
com.wiris.util.ui.interaction.GenericEvent.createChangeEvent = function(source) {
	var e = new com.wiris.util.ui.interaction.GenericEvent(source,com.wiris.util.ui.interaction.EventType.CHANGE_EVENT,com.wiris.util.ui.interaction.EventType.CHANGE_EVENT_STATE_CHANGED);
	return e;
}
com.wiris.util.ui.interaction.GenericEvent.createComponentEvent = function(source,componentEventType) {
	var e = new com.wiris.util.ui.interaction.GenericEvent(source,com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT,componentEventType);
	return e;
}
com.wiris.util.ui.interaction.GenericEvent.createComponentTreeEvent = function(source,componentTreeEventType,child,childPosition,childDestination) {
	var e = new com.wiris.util.ui.interaction.GenericEvent(source,com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT,componentTreeEventType);
	e.referencedComponent = child;
	e.childPosition = childPosition;
	e.childDestination = childDestination;
	return e;
}
com.wiris.util.ui.interaction.GenericEvent.createDragAndDropEvent = function(source,dragAndDropEventType,x,y,draggedComponent) {
	var e = new com.wiris.util.ui.interaction.GenericEvent(source,com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT,dragAndDropEventType);
	e.x = x;
	e.y = y;
	e.referencedComponent = draggedComponent;
	return e;
}
com.wiris.util.ui.interaction.GenericEvent.createFocusEvent = function(source,focusEventType) {
	var e = new com.wiris.util.ui.interaction.GenericEvent(source,com.wiris.util.ui.interaction.EventType.FOCUS_EVENT,focusEventType);
	return e;
}
com.wiris.util.ui.interaction.GenericEvent.createKeyEvent = function(source,keyEventType,keyCode,charCode,shiftPressed,ctrlPressed,altPressed) {
	var e = new com.wiris.util.ui.interaction.GenericEvent(source,com.wiris.util.ui.interaction.EventType.KEY_EVENT,keyEventType);
	e.keyCode = keyCode;
	e.charCode = charCode;
	e.shiftPressed = shiftPressed;
	e.ctrlPressed = ctrlPressed;
	e.altPressed = altPressed;
	return e;
}
com.wiris.util.ui.interaction.GenericEvent.createMouseEvent = function(source,mouseEventType,x,y,pageX,pageY,button) {
	var e = new com.wiris.util.ui.interaction.GenericEvent(source,com.wiris.util.ui.interaction.EventType.MOUSE_EVENT,mouseEventType);
	e.x = x;
	e.y = y;
	e.pageX = pageX;
	e.pageY = pageY;
	e.button = button;
	return e;
}
com.wiris.util.ui.interaction.GenericEvent.createMouseMotionEvent = function(source,mouseMotionEventType,x,y) {
	var e = new com.wiris.util.ui.interaction.GenericEvent(source,com.wiris.util.ui.interaction.EventType.MOUSE_MOTION_EVENT,mouseMotionEventType);
	e.x = x;
	e.y = y;
	return e;
}
com.wiris.util.ui.interaction.GenericEvent.createTouchEvent = function(source,touchEventType) {
	var e = new com.wiris.util.ui.interaction.GenericEvent(source,com.wiris.util.ui.interaction.EventType.TOUCH_EVENT,touchEventType);
	return e;
}
com.wiris.util.ui.interaction.GenericEvent.prototype = {
	getChangedTouches: function() {
		return null;
	}
	,getTargetTouches: function() {
		return null;
	}
	,getTouches: function() {
		return null;
	}
	,getTouchEventType: function() {
		return this.eventSubtype;
	}
	,getScrollY: function() {
		return this.scrollY;
	}
	,getScrollX: function() {
		return this.scrollX;
	}
	,getScrollEventType: function() {
		return this.eventSubtype;
	}
	,getMouseMotionEventType: function() {
		return this.eventSubtype;
	}
	,getComponentTreeEventType: function() {
		return this.eventSubtype;
	}
	,getChildDestination: function() {
		return this.childDestination;
	}
	,getChildPosition: function() {
		return this.childPosition;
	}
	,getChild: function() {
		return this.referencedComponent;
	}
	,getMouseEventType: function() {
		return this.eventSubtype;
	}
	,getButton: function() {
		return this.button;
	}
	,getKeyEventType: function() {
		return this.eventSubtype;
	}
	,isCtrlLikeModifierPressed: function() {
		return this.ctrlPressed;
	}
	,isMetaPressed: function() {
		return this.metaPressed;
	}
	,isAltPressed: function() {
		return this.altPressed;
	}
	,isCtrlPressed: function() {
		return this.ctrlPressed;
	}
	,isShiftPressed: function() {
		return this.shiftPressed;
	}
	,getCharCode: function() {
		return this.charCode;
	}
	,getKeyCode: function() {
		return this.keyCode;
	}
	,getFocusEventType: function() {
		return this.eventSubtype;
	}
	,getDragAndDropEventType: function() {
		return this.eventSubtype;
	}
	,getDraggedComponent: function() {
		return this.referencedComponent;
	}
	,getClientY: function() {
		return this.y;
	}
	,getClientX: function() {
		return this.x;
	}
	,getPageY: function() {
		return this.pageY;
	}
	,getPageX: function() {
		return this.pageX;
	}
	,getY: function() {
		return this.y;
	}
	,getX: function() {
		return this.x;
	}
	,getComponentEventType: function() {
		return this.eventSubtype;
	}
	,getChangeEventType: function() {
		return this.eventSubtype;
	}
	,getActionEventType: function() {
		return this.eventSubtype;
	}
	,getAction: function() {
		return this.action;
	}
	,getEventType: function() {
		return this.eventType;
	}
	,getTarget: function() {
		return this.source;
	}
	,getSource: function() {
		return this.source;
	}
	,defaultIsPrevented: function() {
		return this.defaultPrevented;
	}
	,isPropagating: function() {
		return this.propagating;
	}
	,preventDefault: function() {
		this.defaultPrevented = true;
	}
	,stopPropagation: function() {
		this.propagating = false;
	}
	,scrollY: null
	,scrollX: null
	,button: null
	,metaPressed: null
	,altPressed: null
	,ctrlPressed: null
	,shiftPressed: null
	,charCode: null
	,keyCode: null
	,childDestination: null
	,childPosition: null
	,referencedComponent: null
	,pageY: null
	,pageX: null
	,y: null
	,x: null
	,action: null
	,source: null
	,defaultPrevented: null
	,propagating: null
	,eventSubtype: null
	,eventType: null
	,__class__: com.wiris.util.ui.interaction.GenericEvent
}
com.wiris.util.ui.interaction.KeyCode = $hxClasses["com.wiris.util.ui.interaction.KeyCode"] = function() { }
com.wiris.util.ui.interaction.KeyCode.__name__ = ["com","wiris","util","ui","interaction","KeyCode"];
com.wiris.util.ui.interaction.MouseButtonCode = $hxClasses["com.wiris.util.ui.interaction.MouseButtonCode"] = function() { }
com.wiris.util.ui.interaction.MouseButtonCode.__name__ = ["com","wiris","util","ui","interaction","MouseButtonCode"];
com.wiris.util.ui.interaction.Touch = $hxClasses["com.wiris.util.ui.interaction.Touch"] = function(x,y) {
	this.x = x;
	this.y = y;
};
com.wiris.util.ui.interaction.Touch.__name__ = ["com","wiris","util","ui","interaction","Touch"];
com.wiris.util.ui.interaction.Touch.prototype = {
	getY: function() {
		return this.y;
	}
	,getX: function() {
		return this.x;
	}
	,y: null
	,x: null
	,__class__: com.wiris.util.ui.interaction.Touch
}
com.wiris.util.xml.MathMLUtils = $hxClasses["com.wiris.util.xml.MathMLUtils"] = function() {
};
com.wiris.util.xml.MathMLUtils.__name__ = ["com","wiris","util","xml","MathMLUtils"];
com.wiris.util.xml.MathMLUtils.contentTags = null;
com.wiris.util.xml.MathMLUtils.presentationTags = null;
com.wiris.util.xml.MathMLUtils.isPresentationMathML = function(mathml) {
	if(com.wiris.util.xml.MathMLUtils.presentationTags == null) com.wiris.util.xml.MathMLUtils.presentationTags = com.wiris.util.xml.MathMLUtils.presentationTagsString.split("@");
	return com.wiris.util.xml.MathMLUtils.isMathMLType(mathml,false,com.wiris.util.xml.MathMLUtils.presentationTags);
}
com.wiris.util.xml.MathMLUtils.isContentMathML = function(mathml) {
	if(com.wiris.util.xml.MathMLUtils.contentTags == null) com.wiris.util.xml.MathMLUtils.contentTags = com.wiris.util.xml.MathMLUtils.contentTagsString.split("@");
	return com.wiris.util.xml.MathMLUtils.isMathMLType(mathml,true,com.wiris.util.xml.MathMLUtils.contentTags);
}
com.wiris.util.xml.MathMLUtils.isMathMLType = function(mathml,content,tags) {
	var node = com.wiris.util.xml.WXmlUtils.parseXML(mathml);
	if(node.nodeType == Xml.Document) node = node.firstElement();
	if(node.getNodeName() == "math") {
		var elements = node.elements();
		if(elements.hasNext() && elements.next() != null && elements.hasNext()) return !content;
	}
	return com.wiris.util.xml.MathMLUtils.isMathMLTypeImpl(node,tags);
}
com.wiris.util.xml.MathMLUtils.isMathMLTypeImpl = function(node,contentTags) {
	if(node.nodeType == Xml.Element) {
		if(node.getNodeName() == "annotation-xml" || node.getNodeName() == "annotation") return false;
		var i = HxOverrides.iter(contentTags);
		while(i.hasNext()) if(node.getNodeName() == i.next()) return true;
	}
	var j = node.elements();
	while(j.hasNext()) if(com.wiris.util.xml.MathMLUtils.isMathMLTypeImpl(j.next(),contentTags)) return true;
	return false;
}
com.wiris.util.xml.MathMLUtils.isContentMathMLTag = function(tag) {
	return com.wiris.util.xml.MathMLUtils.contentTagsString.indexOf(tag) != -1;
}
com.wiris.util.xml.MathMLUtils.removeStrokesAnnotation = function(mathml) {
	var start;
	var end = 0;
	while((start = mathml.indexOf("<semantics>",end)) != -1) {
		end = mathml.indexOf("</semantics>",start);
		if(end == -1) throw "Error parsing semantics tag in MathML.";
		var a = com.wiris.util.xml.MathMLUtils.strokesAnnotationStart(mathml,start,end);
		if(a != -1) {
			var b = mathml.indexOf("</annotation>",a);
			if(b == -1 || b >= end) throw "Error parsing annotation tag in MathML.";
			b += 13;
			mathml = HxOverrides.substr(mathml,0,a) + HxOverrides.substr(mathml,b,null);
			end -= b - a;
			var x = mathml.indexOf("<annotation",start);
			if(x == -1 || x > end) {
				mathml = HxOverrides.substr(mathml,0,start) + HxOverrides.substr(mathml,start + 11,end - (start + 11)) + HxOverrides.substr(mathml,end + 12,null);
				end -= 11;
			}
		}
	}
	return mathml;
}
com.wiris.util.xml.MathMLUtils.strokesAnnotationStart = function(mathml,start,end) {
	var _g1 = 0, _g = com.wiris.util.xml.MathMLUtils.strokesAnnotationEncondings.length;
	while(_g1 < _g) {
		var i = _g1++;
		var a = mathml.indexOf("<annotation encoding=\"" + com.wiris.util.xml.MathMLUtils.strokesAnnotationEncondings[i] + "\">",start);
		if(a != -1 && a < end) return a;
	}
	return -1;
}
com.wiris.util.xml.MathMLUtils.isEmptyMathML = function(math) {
	var empty = true;
	if(math.nodeType == Xml.Document) empty = com.wiris.util.xml.MathMLUtils.isEmptyMathML(math.firstElement()); else if(math.nodeType == Xml.Element) {
		var name = math.getNodeName();
		if(name == "mtext") {
			if(math.iterator().hasNext()) {
				var child = math.firstChild();
				var value = com.wiris.util.xml.WXmlUtils.getNodeValue(child);
				if(value != null && !(value == "")) empty = false;
			}
		} else if(!(name == "math" || name == "mrow")) empty = false; else {
			var children = math.elements();
			while(children.hasNext()) {
				var next = children.next();
				empty = empty && com.wiris.util.xml.MathMLUtils.isEmptyMathML(next);
			}
		}
	}
	return empty;
}
com.wiris.util.xml.MathMLUtils.isTokensMathML = function(mathml) {
	if(mathml == null) return false;
	mathml = com.wiris.util.xml.MathMLUtils.stripRootTag(mathml,"math");
	var allowedTags = ["mrow","mn","mi","mo","mtext","mfenced"];
	var start = 0;
	while((start = mathml.indexOf("<",start)) != -1) {
		var sb = new StringBuf();
		var c = HxOverrides.cca(mathml,++start);
		if(c == 47) continue;
		while(c != 32 && c != 47 && c != 62) {
			sb.b += String.fromCharCode(c);
			c = HxOverrides.cca(mathml,++start);
		}
		var tagName = sb.b;
		if(c == 32 || c == 47) return false;
		if(!com.wiris.util.type.Arrays.containsArray(allowedTags,tagName)) return false;
		var end = mathml.indexOf("<",++start);
		var content = HxOverrides.substr(mathml,start,end - start);
		content = com.wiris.util.xml.WXmlUtils.resolveEntities(content);
		content = StringTools.replace(content,"&lt;","<");
		content = StringTools.replace(content,"&gt;",">");
		content = StringTools.replace(content,"&quot;","\"");
		content = StringTools.replace(content,"&apos;","'");
		content = StringTools.replace(content,"&amp;","&");
		var i = com.wiris.system.Utf8.getIterator(content);
		while(i.hasNext()) {
			c = i.next();
			if(!com.wiris.util.xml.MathMLUtils.isKeyboardChar(c) && !com.wiris.util.xml.WCharacterBase.isLetter(c) && !com.wiris.util.xml.WCharacterBase.isDigit(c) && c != com.wiris.util.xml.WCharacterBase.NO_BREAK_SPACE && c != com.wiris.util.xml.WCharacterBase.THIN_SPACE && c != com.wiris.util.xml.WCharacterBase.NUMBER_SIGN) return false;
		}
	}
	return true;
}
com.wiris.util.xml.MathMLUtils.isKeyboardChar = function(c) {
	return c >= 32 && c <= 126 || c >= 161 && c <= 191 || c == 8364;
}
com.wiris.util.xml.MathMLUtils.stripRootTag = function(xml,tag) {
	var s = com.wiris.util.xml.MathMLUtils.splitRootTag(xml,tag);
	return s[1];
}
com.wiris.util.xml.MathMLUtils.splitRootTag = function(xml,tag) {
	xml = StringTools.trim(xml);
	var r = ["",null,""];
	if(StringTools.startsWith(xml,"<" + tag)) {
		var depth = 1;
		var lastOpen = xml.lastIndexOf("<");
		var lastClose = xml.lastIndexOf(">");
		var j1 = xml.indexOf("<" + tag,1);
		var j2 = xml.indexOf("</" + tag,1);
		var j3 = xml.indexOf("/>");
		if(xml.indexOf(">") - j3 != 1) j3 = -1;
		while(depth > 0) if((j1 == -1 || j2 < j1) && (j3 == -1 || j2 < j3)) {
			depth--;
			if(depth > 0) j2 = xml.indexOf("</" + tag,j2 + 1);
		} else if(j1 != -1 && (j3 == -1 || j1 < j3)) {
			depth++;
			j3 = xml.indexOf("/>",j1);
			if(xml.indexOf(">",j1) - j3 != 1) j3 = -1;
			j1 = xml.indexOf("<" + tag,j1 + 1);
		} else {
			depth--;
			j3 = -1;
		}
		if(j2 == lastOpen) {
			var ini = xml.indexOf(">") + 1;
			r[0] = HxOverrides.substr(xml,0,ini);
			r[1] = HxOverrides.substr(xml,ini,lastOpen - ini);
			r[2] = HxOverrides.substr(xml,lastOpen,null);
		} else if(j3 + 1 == lastClose) {
			r[0] = HxOverrides.substr(xml,0,xml.length - 2) + ">";
			r[1] = "";
			r[2] = "</" + tag + ">";
		} else r[1] = xml;
	} else r[1] = xml;
	return r;
}
com.wiris.util.xml.MathMLUtils.mathMLToText = function(mathml) {
	var root = com.wiris.util.xml.WXmlUtils.parseXML(mathml);
	if(root.nodeType == Xml.Document) root = root.firstElement();
	com.wiris.util.xml.MathMLUtils.removeMrows(root);
	return com.wiris.util.xml.MathMLUtils.fullMathML2TextImpl(root);
}
com.wiris.util.xml.MathMLUtils.fullMathML2TextImpl = function(e) {
	var sb = new StringBuf();
	if(e.getNodeName() == "mo" || e.getNodeName() == "mn" || e.getNodeName() == "mi" || e.getNodeName() == "mtext") sb.b += Std.string(com.wiris.util.xml.WXmlUtils.getNodeValue(e.firstChild())); else if(e.getNodeName() == "mfenced" || e.getNodeName() == "mtr" || e.getNodeName() == "mtable") {
		var open = e.get("open");
		if(open == null) open = "(";
		var close = e.get("close");
		if(close == null) close = ")";
		var separators = e.get("separators");
		if(separators == null) separators = ",";
		if(open == "(" && close == ")" && e.firstElement().getNodeName() == "mtable") {
			open = "";
			close = "";
		}
		sb.b += Std.string(open);
		var it = e.elements();
		var i = 0;
		var n = com.wiris.system.Utf8.getLength(separators);
		while(it.hasNext()) {
			if(i > 0 && n > 0) sb.b += Std.string(com.wiris.system.Utf8.uchr(com.wiris.system.Utf8.charCodeAt(separators,i < n?i:n - 1)));
			sb.b += Std.string(com.wiris.util.xml.MathMLUtils.fullMathML2TextImpl(it.next()));
			i++;
		}
		sb.b += Std.string(close);
	} else if(e.getNodeName() == "mfrac") {
		var it = e.elements();
		var num = com.wiris.util.xml.MathMLUtils.fullMathML2TextImpl(it.next());
		if(num.length > 1) num = "(" + num + ")";
		var den = com.wiris.util.xml.MathMLUtils.fullMathML2TextImpl(it.next());
		if(den.length > 1) den = "(" + den + ")";
		sb.b += Std.string(num);
		sb.b += Std.string("/");
		sb.b += Std.string(den);
	} else if(e.getNodeName() == "msup") {
		var it = e.elements();
		var bas = com.wiris.util.xml.MathMLUtils.fullMathML2TextImpl(it.next());
		if(bas.length > 1) bas = "(" + bas + ")";
		var exp = com.wiris.util.xml.MathMLUtils.fullMathML2TextImpl(it.next());
		if(exp.length > 1) exp = "(" + exp + ")";
		sb.b += Std.string(bas);
		sb.b += Std.string("^");
		sb.b += Std.string(exp);
	} else if(e.getNodeName() == "msqrt") {
		sb.b += Std.string("sqrt(");
		e.setNodeName("math");
		sb.b += Std.string(com.wiris.util.xml.MathMLUtils.fullMathML2TextImpl(e));
		sb.b += Std.string(")");
	} else if(e.getNodeName() == "mroot") {
		var it = e.elements();
		var rad = com.wiris.util.xml.MathMLUtils.fullMathML2TextImpl(it.next());
		var ind = com.wiris.util.xml.MathMLUtils.fullMathML2TextImpl(it.next());
		sb.b += Std.string("root(");
		sb.b += Std.string(rad);
		sb.b += Std.string(",");
		sb.b += Std.string(ind);
		sb.b += Std.string(")");
	} else if(e.getNodeName() == "mspace" && "newline" == e.get("linebreak")) sb.b += Std.string("\n"); else if(e.getNodeName() == "semantics") {
		var it = e.elements();
		if(it.hasNext()) {
			var mml = it.next();
			if(it.hasNext()) {
				var ann = it.next();
				if(ann.getNodeName() == "annotation" && "text/plain" == ann.get("encoding")) return com.wiris.util.xml.WXmlUtils.getText(ann);
			}
			return com.wiris.util.xml.MathMLUtils.fullMathML2TextImpl(mml);
		}
	} else {
		var it = e.elements();
		while(it.hasNext()) {
			var x = it.next();
			sb.b += Std.string(com.wiris.util.xml.MathMLUtils.fullMathML2TextImpl(x));
			if(x.getNodeName() == "mi" && com.wiris.util.xml.MathMLUtils.isFunctionName(com.wiris.util.xml.WXmlUtils.getNodeValue(x.firstChild())) && it.hasNext()) {
				var y = it.next();
				if(y.getNodeName() == "msqrt" || y.getNodeName() == "mfrac" || y.getNodeName() == "mroot") {
					sb.b += Std.string("(");
					sb.b += Std.string(com.wiris.util.xml.MathMLUtils.fullMathML2TextImpl(y));
					sb.b += Std.string(")");
				} else {
					var parentheses = false;
					var argument = new StringBuf();
					while(y != null && com.wiris.util.xml.MathMLUtils.isImplicitArgumentFactor(y)) {
						if(y.getNodeName() == "msup") parentheses = true;
						argument.b += Std.string(com.wiris.util.xml.MathMLUtils.fullMathML2TextImpl(y));
						y = it.hasNext()?it.next():null;
					}
					if(parentheses) sb.b += Std.string("(");
					sb.b += Std.string(argument.b);
					if(parentheses) sb.b += Std.string(")");
					if(y != null) sb.b += Std.string(com.wiris.util.xml.MathMLUtils.fullMathML2TextImpl(y));
				}
			}
		}
	}
	return sb.b;
}
com.wiris.util.xml.MathMLUtils.removeMrows = function(elem) {
	if(elem.nodeType != Xml.Element && elem.nodeType != Xml.Document) return;
	var children = elem.iterator();
	while(children.hasNext()) com.wiris.util.xml.MathMLUtils.removeMrows(children.next());
	children = elem.iterator();
	var i = 0;
	while(children.hasNext()) {
		var c = children.next();
		if(c.nodeType == Xml.Element) {
			if(c.getNodeName() == "mrow") {
				var mrowChildren = c.elements();
				var singlechild = false;
				if(mrowChildren.hasNext()) {
					mrowChildren.next();
					singlechild = !mrowChildren.hasNext();
				}
				if(singlechild || com.wiris.util.xml.MathMLUtils.MROWS.indexOf(elem.getNodeName()) != -1) {
					elem.removeChild(c);
					var n;
					var count = 0;
					while((n = c.firstChild()) != null) {
						c.removeChild(n);
						elem.insertChild(n,i + count);
						count++;
					}
					if(count != 1) {
						i = -1;
						children = elem.iterator();
					}
				}
			} else if(c.getNodeName() == "mfenced") {
				if("(" == c.get("open")) c.remove("open");
				if(")" == c.get("close")) c.remove("close");
			}
		}
		i++;
	}
}
com.wiris.util.xml.MathMLUtils.isFunctionName = function(word) {
	var functionNames = ["exp","ln","log","sin","sen","cos","tan","tg","asin","arcsin","asen","arcsen","acos","arccos","atan","arctan","cosec","csc","sec","cotan","acosec","acsc","asec","acotan","sinh","senh","cosh","tanh","asinh","arcsinh","asenh","arcsenh","acosh","arccosh","atanh","arctanh","cosech","csch","sech","cotanh","acosech","acsch","asech","acotanh","sign"];
	return com.wiris.util.type.Arrays.containsArray(functionNames,word);
}
com.wiris.util.xml.MathMLUtils.isImplicitArgumentFactor = function(x) {
	if(x.getNodeName() == "mi" || x.getNodeName() == "mn") return true;
	if(x.getNodeName() == "msup") {
		var c = x.firstElement();
		if(c != null && c.getNodeName() == "mi" || c.getNodeName() == "mn") return true;
	}
	return false;
}
com.wiris.util.xml.MathMLUtils.convertEditor2Newlines = function(mml) {
	var head = "<mtable columnalign=\"left\" rowspacing=\"0\">";
	var start;
	if((start = mml.indexOf(head)) != -1) {
		start += head.length;
		var end = mml.lastIndexOf("</mtable>");
		mml = HxOverrides.substr(mml,start,end - start);
		start = 0;
		var sb = new StringBuf();
		var lines = 0;
		while((start = mml.indexOf("<mtd>",start)) != -1) {
			if(lines != 0) sb.b += Std.string("<mspace linebreak=\"newline\"/>");
			end = com.wiris.util.xml.MathMLUtils.endTag(mml,start);
			start += 5;
			end -= 6;
			sb.b += Std.string(HxOverrides.substr(mml,start,end - start));
			start = end + 6;
			lines++;
		}
		mml = sb.b;
		mml = com.wiris.util.xml.MathMLUtils.ensureRootTag(mml,"math");
	}
	return mml;
}
com.wiris.util.xml.MathMLUtils.endTag = function(xml,n) {
	var name = com.wiris.util.xml.MathMLUtils.tagName(xml,n);
	var depth = 1;
	var pos = n + 1;
	while(depth > 0) {
		pos = xml.indexOf("<",pos);
		if(pos == -1) return xml.length; else if(HxOverrides.substr(xml,xml.indexOf(">",pos) - 1,1) == "/") {
		} else if(HxOverrides.substr(xml,pos + 1,1) == "/") {
			if(com.wiris.util.xml.MathMLUtils.tagName(xml,pos + 1) == name) depth--;
		} else if(com.wiris.util.xml.MathMLUtils.tagName(xml,pos) == name) depth++;
		pos = pos + 1;
	}
	pos = xml.indexOf(">",pos) + 1;
	return pos;
}
com.wiris.util.xml.MathMLUtils.tagName = function(xml,n) {
	var endtag = xml.indexOf(">",n);
	var tag = HxOverrides.substr(xml,n + 1,endtag - (n + 1));
	var aux;
	if((aux = tag.indexOf(" ")) != -1) tag = HxOverrides.substr(tag,0,aux);
	return tag;
}
com.wiris.util.xml.MathMLUtils.ensureRootTag = function(xml,tag) {
	xml = StringTools.trim(xml);
	if(!StringTools.startsWith(xml,"<" + tag)) xml = "<" + tag + ">" + xml + "</" + tag + ">";
	return xml;
}
com.wiris.util.xml.MathMLUtils.prototype = {
	__class__: com.wiris.util.xml.MathMLUtils
}
com.wiris.util.xml.WCharacterBase = $hxClasses["com.wiris.util.xml.WCharacterBase"] = function() { }
com.wiris.util.xml.WCharacterBase.__name__ = ["com","wiris","util","xml","WCharacterBase"];
com.wiris.util.xml.WCharacterBase.isDigit = function(c) {
	if(48 <= c && c <= 57) return true;
	if(1632 <= c && c <= 1641) return true;
	if(1776 <= c && c <= 1785) return true;
	if(2790 <= c && c <= 2799) return true;
	return false;
}
com.wiris.util.xml.WCharacterBase.isIdentifier = function(c) {
	return com.wiris.util.xml.WCharacterBase.isLetter(c) || com.wiris.util.xml.WCharacterBase.isCombiningCharacter(c) || c == 95;
}
com.wiris.util.xml.WCharacterBase.isLarge = function(c) {
	return com.wiris.util.xml.WCharacterBase.binarySearch(com.wiris.util.xml.WCharacterBase.largeOps,c);
}
com.wiris.util.xml.WCharacterBase.isVeryLarge = function(c) {
	return com.wiris.util.xml.WCharacterBase.binarySearch(com.wiris.util.xml.WCharacterBase.veryLargeOps,c);
}
com.wiris.util.xml.WCharacterBase.isBinaryOp = function(c) {
	return com.wiris.util.xml.WCharacterBase.binarySearch(com.wiris.util.xml.WCharacterBase.binaryOps,c);
}
com.wiris.util.xml.WCharacterBase.isRelation = function(c) {
	return com.wiris.util.xml.WCharacterBase.binarySearch(com.wiris.util.xml.WCharacterBase.relations,c);
}
com.wiris.util.xml.WCharacterBase.binarySearch = function(v,c) {
	var min = 0;
	var max = v.length - 1;
	do {
		var mid = (min + max) / 2 | 0;
		var cc = v[mid];
		if(c == cc) return true; else if(c < cc) max = mid - 1; else min = mid + 1;
	} while(min <= max);
	return false;
}
com.wiris.util.xml.WCharacterBase.initAccentsDictionary = function() {
	if(com.wiris.util.xml.WCharacterBase.accentsDictionary != null) return;
	var h = new Hash();
	h.set("A",[192,193,194,195,196,197,256,258,260,461,478,480,506,512,514,550,570,7680,7840,7842,7844,7846,7848,7850,7852,7854,7856,7858,7860,7862,9398,11375,65313]);
	h.set("AA",[42802]);
	h.set("AE",[198,482,508]);
	h.set("AO",[42804]);
	h.set("AU",[42806]);
	h.set("AV",[42808,42810]);
	h.set("AY",[42812]);
	h.set("B",[385,386,579,7682,7684,7686,9399,65314]);
	h.set("C",[199,262,264,266,268,391,571,7688,9400,42814,65315]);
	h.set("D",[208,270,272,393,394,395,7690,7692,7694,7696,7698,9401,42873,65316]);
	h.set("DZ",[452,497]);
	h.set("Dz",[453,498]);
	h.set("E",[200,201,202,203,274,276,278,280,282,398,400,516,518,552,7700,7702,7704,7706,7708,7864,7866,7868,7870,7872,7874,7876,7878,9402,65317]);
	h.set("F",[401,7710,9403,42875,65318]);
	h.set("G",[284,286,288,290,403,484,486,500,7712,9404,42877,42878,42912,65319]);
	h.set("H",[292,294,542,7714,7716,7718,7720,7722,9405,11367,11381,42893,65320]);
	h.set("I",[204,205,206,207,296,298,300,302,304,407,463,520,522,7724,7726,7880,7882,9406,65321]);
	h.set("J",[308,584,9407,65322]);
	h.set("K",[310,408,488,7728,7730,7732,9408,11369,42816,42818,42820,42914,65323]);
	h.set("L",[313,315,317,319,321,573,7734,7736,7738,7740,9409,11360,11362,42822,42824,42880,65324]);
	h.set("LJ",[455]);
	h.set("Lj",[456]);
	h.set("M",[412,7742,7744,7746,9410,11374,65325]);
	h.set("N",[209,323,325,327,413,504,544,7748,7750,7752,7754,9411,42896,42916,65326]);
	h.set("NJ",[458]);
	h.set("Nj",[459]);
	h.set("O",[210,211,212,213,214,216,332,334,336,390,415,416,465,490,492,510,524,526,554,556,558,560,7756,7758,7760,7762,7884,7886,7888,7890,7892,7894,7896,7898,7900,7902,7904,7906,9412,42826,42828,65327]);
	h.set("OI",[418]);
	h.set("OO",[42830]);
	h.set("OU",[546]);
	h.set("OE",[140,338]);
	h.set("oe",[156,339]);
	h.set("P",[420,7764,7766,9413,11363,42832,42834,42836,65328]);
	h.set("Q",[586,9414,42838,42840,65329]);
	h.set("R",[340,342,344,528,530,588,7768,7770,7772,7774,9415,11364,42842,42882,42918,65330]);
	h.set("S",[346,348,350,352,536,7776,7778,7780,7782,7784,7838,9416,11390,42884,42920,65331]);
	h.set("T",[354,356,358,428,430,538,574,7786,7788,7790,7792,9417,42886,65332]);
	h.set("TZ",[42792]);
	h.set("U",[217,218,219,220,360,362,364,366,368,370,431,467,469,471,473,475,532,534,580,7794,7796,7798,7800,7802,7908,7910,7912,7914,7916,7918,7920,9418,65333]);
	h.set("V",[434,581,7804,7806,9419,42846,65334]);
	h.set("VY",[42848]);
	h.set("W",[372,7808,7810,7812,7814,7816,9420,11378,65335]);
	h.set("X",[7818,7820,9421,65336]);
	h.set("Y",[221,374,376,435,562,590,7822,7922,7924,7926,7928,7934,9422,65337]);
	h.set("Z",[377,379,381,437,548,7824,7826,7828,9423,11371,11391,42850,65338]);
	h.set("a",[224,225,226,227,228,229,257,259,261,462,479,481,507,513,515,551,592,7681,7834,7841,7843,7845,7847,7849,7851,7853,7855,7857,7859,7861,7863,9424,11365,65345]);
	h.set("aa",[42803]);
	h.set("ae",[230,483,509]);
	h.set("ao",[42805]);
	h.set("au",[42807]);
	h.set("av",[42809,42811]);
	h.set("ay",[42813]);
	h.set("b",[384,387,595,7683,7685,7687,9425,65346]);
	h.set("c",[231,263,265,267,269,392,572,7689,8580,9426,42815,65347]);
	h.set("d",[271,273,396,598,599,7691,7693,7695,7697,7699,9427,42874,65348]);
	h.set("dz",[454,499]);
	h.set("e",[232,233,234,235,275,277,279,281,283,477,517,519,553,583,603,7701,7703,7705,7707,7709,7865,7867,7869,7871,7873,7875,7877,7879,9428,65349]);
	h.set("f",[402,7711,9429,42876,65350]);
	h.set("g",[285,287,289,291,485,487,501,608,7545,7713,9430,42879,42913,65351]);
	h.set("h",[293,295,543,613,7715,7717,7719,7721,7723,7830,9431,11368,11382,65352]);
	h.set("hv",[405]);
	h.set("i",[236,237,238,239,297,299,301,303,305,464,521,523,616,7725,7727,7881,7883,9432,65353]);
	h.set("j",[309,496,585,9433,65354]);
	h.set("k",[311,409,489,7729,7731,7733,9434,11370,42817,42819,42821,42915,65355]);
	h.set("l",[314,316,318,320,322,383,410,619,7735,7737,7739,7741,9435,11361,42823,42825,42881,65356]);
	h.set("lj",[457]);
	h.set("m",[623,625,7743,7745,7747,9436,65357]);
	h.set("n",[241,324,326,328,329,414,505,626,7749,7751,7753,7755,9437,42897,42917,65358]);
	h.set("nj",[460]);
	h.set("o",[242,243,244,245,246,248,333,335,337,417,466,491,493,511,525,527,555,557,559,561,596,629,7757,7759,7761,7763,7885,7887,7889,7891,7893,7895,7897,7899,7901,7903,7905,7907,9438,42827,42829,65359]);
	h.set("oi",[419]);
	h.set("ou",[547]);
	h.set("oo",[42831]);
	h.set("p",[421,7549,7765,7767,9439,42833,42835,42837,65360]);
	h.set("q",[587,9440,42839,42841,65361]);
	h.set("r",[341,343,345,529,531,589,637,7769,7771,7773,7775,9441,42843,42883,42919,65362]);
	h.set("s",[223,347,349,351,353,537,575,7777,7779,7781,7783,7785,7835,9442,42885,42921,65363]);
	h.set("t",[355,357,359,429,539,648,7787,7789,7791,7793,7831,9443,11366,42887,65364]);
	h.set("tz",[42793]);
	h.set("u",[249,250,251,252,361,363,365,367,369,371,432,468,470,472,474,476,533,535,649,7795,7797,7799,7801,7803,7909,7911,7913,7915,7917,7919,7921,9444,65365]);
	h.set("v",[651,652,7805,7807,9445,42847,65366]);
	h.set("vy",[42849]);
	h.set("w",[373,7809,7811,7813,7815,7817,7832,9446,11379,65367]);
	h.set("x",[7819,7821,9447,65368]);
	h.set("y",[253,255,375,436,563,591,7823,7833,7923,7925,7927,7929,7935,9448,65369]);
	h.set("z",[378,380,382,438,549,576,7825,7827,7829,9449,11372,42851,65370]);
	com.wiris.util.xml.WCharacterBase.accentsDictionary = h;
}
com.wiris.util.xml.WCharacterBase.getCategoriesUnicode = function() {
	var categoriesUnicode = new Hash();
	categoriesUnicode.set(com.wiris.util.xml.WCharacterBase.SYMBOL_CATEGORY,"SymbolUnicodeCategory");
	categoriesUnicode.set(com.wiris.util.xml.WCharacterBase.PUNCTUATION_CATEGORY,"PunctuationUnicodeCategory");
	categoriesUnicode.set(com.wiris.util.xml.WCharacterBase.LETTER_CATEGORY,"LetterUnicodeCategory");
	categoriesUnicode.set(com.wiris.util.xml.WCharacterBase.MARK_CATEGORY,"MarkUnicodeCategory");
	categoriesUnicode.set(com.wiris.util.xml.WCharacterBase.NUMBER_CATEGORY,"NumberUnicodeCategory");
	categoriesUnicode.set(com.wiris.util.xml.WCharacterBase.PHONETICAL_CATEGORY,"PhoneticalUnicodeCategory");
	categoriesUnicode.set(com.wiris.util.xml.WCharacterBase.OTHER_CATEGORY,"OtherUnicodeCategory");
	return categoriesUnicode;
}
com.wiris.util.xml.WCharacterBase.getUnicodeCategoryList = function(category) {
	var indexStart = com.wiris.util.xml.WCharacterBase.UNICODES_WITH_CATEGORIES.indexOf("@" + category + ":");
	var unicodes = HxOverrides.substr(com.wiris.util.xml.WCharacterBase.UNICODES_WITH_CATEGORIES,indexStart + 3,null);
	var indexEnd = unicodes.indexOf("@");
	unicodes = HxOverrides.substr(unicodes,0,indexEnd);
	return com.wiris.util.xml.WCharacterBase.getUnicodesRangedStringList(unicodes);
}
com.wiris.util.xml.WCharacterBase.getUnicodesRangedStringList = function(unicodesRangedList) {
	var inputList = unicodesRangedList.split(",");
	var unicodeList = new Array();
	var i = 0;
	while(i < inputList.length) {
		var actual_range = inputList[i];
		actual_range = StringTools.replace(actual_range," ","");
		if(actual_range.indexOf("-") != -1) {
			var firstRangeValueHex = com.wiris.util.xml.WCharacterBase.hexStringToUnicode(actual_range.split("-")[0]);
			var lastRangeValueHex = com.wiris.util.xml.WCharacterBase.hexStringToUnicode(actual_range.split("-")[1]);
			var actualValue = firstRangeValueHex;
			while(actualValue <= lastRangeValueHex) {
				unicodeList.push(com.wiris.system.Utf8.uchr(actualValue));
				actualValue++;
			}
		} else {
			var actualValue = com.wiris.util.xml.WCharacterBase.hexStringToUnicode(actual_range);
			unicodeList.push(com.wiris.system.Utf8.uchr(actualValue));
		}
		i++;
	}
	return unicodeList;
}
com.wiris.util.xml.WCharacterBase.hexStringToUnicode = function(unicode) {
	return Std.parseInt("0x" + unicode);
}
com.wiris.util.xml.WCharacterBase.getMirror = function(str) {
	var mirroredStr = "";
	var i = 0;
	while(i < str.length) {
		var c = HxOverrides.cca(str,i);
		var j = 0;
		while(j < com.wiris.util.xml.WCharacterBase.mirrorDictionary.length) {
			if(c == com.wiris.util.xml.WCharacterBase.mirrorDictionary[j]) {
				c = com.wiris.util.xml.WCharacterBase.mirrorDictionary[j + 1];
				break;
			}
			j += 2;
		}
		mirroredStr += com.wiris.system.Utf8.uchr(c);
		++i;
	}
	return mirroredStr;
}
com.wiris.util.xml.WCharacterBase.isStretchyLTR = function(c) {
	var i = 0;
	while(i < com.wiris.util.xml.WCharacterBase.horizontalLTRStretchyChars.length) {
		if(c == com.wiris.util.xml.WCharacterBase.horizontalLTRStretchyChars[i]) return true;
		++i;
	}
	return false;
}
com.wiris.util.xml.WCharacterBase.getNegated = function(c) {
	var i = 0;
	while(i < com.wiris.util.xml.WCharacterBase.negations.length) {
		if(com.wiris.util.xml.WCharacterBase.negations[i] == c) return com.wiris.util.xml.WCharacterBase.negations[i + 1];
		i += 2;
	}
	return -1;
}
com.wiris.util.xml.WCharacterBase.getNotNegated = function(c) {
	var i = 1;
	while(i < com.wiris.util.xml.WCharacterBase.negations.length) {
		if(com.wiris.util.xml.WCharacterBase.negations[i] == c) return com.wiris.util.xml.WCharacterBase.negations[i - 1];
		i += 2;
	}
	return -1;
}
com.wiris.util.xml.WCharacterBase.isCombining = function(s) {
	var it = com.wiris.system.Utf8.getIterator(s);
	while(it.hasNext()) if(!com.wiris.util.xml.WCharacterBase.isCombiningCharacter(it.next())) return false;
	return true;
}
com.wiris.util.xml.WCharacterBase.isCombiningCharacter = function(c) {
	return c >= 768 && c <= 879 || c >= 6832 && c <= 6911 || c >= 7616 && c <= 7679 && (c >= 8400 && c <= 8447) && (c >= 65056 && c <= 65071);
}
com.wiris.util.xml.WCharacterBase.isLetter = function(c) {
	if(com.wiris.util.xml.WCharacterBase.isDigit(c)) return false;
	if(65 <= c && c <= 90) return true;
	if(97 <= c && c <= 122) return true;
	if(192 <= c && c <= 696 && c != 215 && c != 247) return true;
	if(867 <= c && c <= 1521) return true;
	if(1552 <= c && c <= 8188) return true;
	if(c == 8472 || c == 8467 || com.wiris.util.xml.WCharacterBase.isDoubleStruck(c) || com.wiris.util.xml.WCharacterBase.isFraktur(c) || com.wiris.util.xml.WCharacterBase.isScript(c)) return true;
	if(com.wiris.util.xml.WCharacterBase.isChinese(c)) return true;
	if(com.wiris.util.xml.WCharacterBase.isKorean(c)) return true;
	return false;
}
com.wiris.util.xml.WCharacterBase.isUnicodeMathvariant = function(c) {
	return com.wiris.util.xml.WCharacterBase.isDoubleStruck(c) || com.wiris.util.xml.WCharacterBase.isFraktur(c) || com.wiris.util.xml.WCharacterBase.isScript(c);
}
com.wiris.util.xml.WCharacterBase.isRequiredByQuizzes = function(c) {
	return c == 120128 || c == 8450 || c == 8461 || c == 8469 || c == 8473 || c == 8474 || c == 8477 || c == 8484;
}
com.wiris.util.xml.WCharacterBase.isDoubleStruck = function(c) {
	return c >= 120120 && c <= 120171 || c == 8450 || c == 8461 || c == 8469 || c == 8473 || c == 8474 || c == 8477 || c == 8484;
}
com.wiris.util.xml.WCharacterBase.isFraktur = function(c) {
	return c >= 120068 && c <= 120119 || c == 8493 || c == 8460 || c == 8465 || c == 8476 || c == 8488;
}
com.wiris.util.xml.WCharacterBase.isScript = function(c) {
	return c >= 119964 && c <= 120015 || c == 8458 || c == 8459 || c == 8466 || c == 8464 || c == 8499 || c == 8500 || c == 8492 || c == 8495 || c == 8496 || c == 8497 || c == 8475;
}
com.wiris.util.xml.WCharacterBase.isMathematicalMonospace = function(codepoint) {
	return codepoint >= com.wiris.util.xml.WCharacterBase.MATHEMATICAL_MONOSPACE_CAPITAL_A && codepoint <= com.wiris.util.xml.WCharacterBase.MATHEMATICAL_MONOSPACE_SMALL_Z || codepoint >= com.wiris.util.xml.WCharacterBase.MATHEMATICAL_MONOSPACE_DIGIT_ZERO && codepoint <= com.wiris.util.xml.WCharacterBase.MATHEMATICAL_MONOSPACE_DIGIT_NINE;
}
com.wiris.util.xml.WCharacterBase.isLowerCase = function(c) {
	return c >= 97 && c <= 122 || c >= 224 && c <= 255 || c >= 591 && c >= 659 || c >= 661 && c <= 687 || c >= 940 && c <= 974;
}
com.wiris.util.xml.WCharacterBase.isWord = function(c) {
	if(com.wiris.util.xml.WCharacterBase.isDevanagari(c) || com.wiris.util.xml.WCharacterBase.isChinese(c) || com.wiris.util.xml.WCharacterBase.isHebrew(c) || com.wiris.util.xml.WCharacterBase.isThai(c) || com.wiris.util.xml.WCharacterBase.isGujarati(c) || com.wiris.util.xml.WCharacterBase.isKorean(c)) return true;
	return false;
}
com.wiris.util.xml.WCharacterBase.isArabianString = function(s) {
	var length = com.wiris.system.Utf8.getLength(s);
	var i;
	var _g = 0;
	while(_g < length) {
		var i1 = _g++;
		if(!com.wiris.util.xml.WCharacterBase.isArabian(com.wiris.system.Utf8.charCodeAt(s,i1))) return false;
	}
	return true;
}
com.wiris.util.xml.WCharacterBase.isArabian = function(c) {
	if(com.wiris.util.xml.WCharacterBase.isDigit(c)) return false; else return c >= 1536 && c <= 1791 || c >= 126464 && c <= 126705;
}
com.wiris.util.xml.WCharacterBase.isHebrew = function(c) {
	if(c >= 1424 && c <= 1535) return true;
	return false;
}
com.wiris.util.xml.WCharacterBase.isChinese = function(c) {
	if(c >= 13312 && c <= 40959) return true;
	return false;
}
com.wiris.util.xml.WCharacterBase.isKorean = function(c) {
	if(c >= 12593 && c <= 52044) return true;
	return false;
}
com.wiris.util.xml.WCharacterBase.isGreek = function(c) {
	if(c >= 945 && c <= 969) return true; else if(c >= 913 && c <= 937 && c != 930) return true; else if(c == 977 || c == 981 || c == 982) return true;
	return false;
}
com.wiris.util.xml.WCharacterBase.isDevanagari = function(c) {
	if(c >= 2304 && c < 2431) return true;
	return false;
}
com.wiris.util.xml.WCharacterBase.isGujarati = function(c) {
	if(c >= 2689 && c < 2788 || c == 2800 || c == 2801) return true;
	return false;
}
com.wiris.util.xml.WCharacterBase.isThai = function(c) {
	if(3585 <= c && c < 3676) return true;
	return false;
}
com.wiris.util.xml.WCharacterBase.isDevanagariString = function(s) {
	var i = s.length - 1;
	while(i >= 0) {
		if(!com.wiris.util.xml.WCharacterBase.isDevanagari(HxOverrides.cca(s,i))) return false;
		--i;
	}
	return true;
}
com.wiris.util.xml.WCharacterBase.isRTL = function(c) {
	if(com.wiris.util.xml.WCharacterBase.isHebrew(c) || com.wiris.util.xml.WCharacterBase.isArabian(c)) return true;
	return false;
}
com.wiris.util.xml.WCharacterBase.isTallLetter = function(c) {
	if(97 <= c && c <= 122 || 945 <= c && c <= 969) return com.wiris.util.xml.WCharacterBase.binarySearch(com.wiris.util.xml.WCharacterBase.tallLetters,c);
	return true;
}
com.wiris.util.xml.WCharacterBase.isLongLetter = function(c) {
	if(97 <= c && c <= 122 || 945 <= c && c <= 969) return com.wiris.util.xml.WCharacterBase.binarySearch(com.wiris.util.xml.WCharacterBase.longLetters,c); else if(65 <= c && c <= 90) return false;
	return true;
}
com.wiris.util.xml.WCharacterBase.isLTRNumber = function(text) {
	var i = 0;
	var n = com.wiris.system.Utf8.getLength(text);
	while(i < n) {
		if(!com.wiris.util.xml.WCharacterBase.isDigit(com.wiris.system.Utf8.charCodeAt(text,i))) return false;
		++i;
	}
	return true;
}
com.wiris.util.xml.WCharacterBase.isSuperscript = function(c) {
	return c == 178 || c == 179 || c == 185 || c >= 8304 && c <= 8319 && c != 8306 && c != 8307;
}
com.wiris.util.xml.WCharacterBase.isSubscript = function(c) {
	return c >= 8320 && c <= 8348 && c != 8335;
}
com.wiris.util.xml.WCharacterBase.isSuperscriptOrSubscript = function(c) {
	return com.wiris.util.xml.WCharacterBase.isSuperscript(c) || com.wiris.util.xml.WCharacterBase.isSubscript(c);
}
com.wiris.util.xml.WCharacterBase.normalizeSubSuperScript = function(c) {
	var i = 0;
	var n = com.wiris.util.xml.WCharacterBase.subSuperScriptDictionary.length;
	while(i < n) {
		if(com.wiris.util.xml.WCharacterBase.subSuperScriptDictionary[i] == c) return com.wiris.util.xml.WCharacterBase.subSuperScriptDictionary[i + 1];
		i += 2;
	}
	return c;
}
com.wiris.util.xml.WCharacterBase.isInvisible = function(c) {
	return com.wiris.util.xml.WCharacterBase.binarySearch(com.wiris.util.xml.WCharacterBase.invisible,c);
}
com.wiris.util.xml.WCharacterBase.isHorizontalOperator = function(c) {
	return com.wiris.util.xml.WCharacterBase.binarySearch(com.wiris.util.xml.WCharacterBase.horizontalOperators,c);
}
com.wiris.util.xml.WCharacterBase.latin2Greek = function(l) {
	var index = -1;
	if(l < 100) index = com.wiris.util.xml.WCharacterBase.latinLetters.indexOf("@00" + l + "@"); else if(l < 1000) index = com.wiris.util.xml.WCharacterBase.latinLetters.indexOf("@0" + l + "@"); else index = com.wiris.util.xml.WCharacterBase.latinLetters.indexOf("@" + l + "@");
	if(index != -1) {
		var s = HxOverrides.substr(com.wiris.util.xml.WCharacterBase.greekLetters,index + 1,4);
		return Std.parseInt(s);
	}
	return l;
}
com.wiris.util.xml.WCharacterBase.greek2Latin = function(g) {
	var index = -1;
	if(g < 100) index = com.wiris.util.xml.WCharacterBase.greekLetters.indexOf("@00" + g + "@"); else if(g < 1000) index = com.wiris.util.xml.WCharacterBase.greekLetters.indexOf("@0" + g + "@"); else index = com.wiris.util.xml.WCharacterBase.greekLetters.indexOf("@" + g + "@");
	if(index != -1) {
		var s = HxOverrides.substr(com.wiris.util.xml.WCharacterBase.latinLetters,index + 1,4);
		return Std.parseInt(s);
	}
	return g;
}
com.wiris.util.xml.WCharacterBase.stringToMonospace = function(s) {
	var it = com.wiris.system.Utf8.getIterator(s);
	var replacement = "";
	while(it.hasNext()) replacement += com.wiris.system.Utf8.uchr(com.wiris.util.xml.WCharacterBase.toMonospace(it.next()));
	return replacement;
}
com.wiris.util.xml.WCharacterBase.toMonospace = function(codepoint) {
	if(codepoint >= com.wiris.util.xml.WCharacterBase.DIGIT_ZERO && codepoint <= com.wiris.util.xml.WCharacterBase.DIGIT_NINE) return codepoint + (com.wiris.util.xml.WCharacterBase.MATHEMATICAL_MONOSPACE_DIGIT_ZERO - com.wiris.util.xml.WCharacterBase.DIGIT_ZERO); else if(codepoint >= com.wiris.util.xml.WCharacterBase.LATIN_CAPITAL_LETTER_A && codepoint <= com.wiris.util.xml.WCharacterBase.LATIN_CAPITAL_LETTER_Z) return codepoint + (com.wiris.util.xml.WCharacterBase.MATHEMATICAL_MONOSPACE_CAPITAL_A - com.wiris.util.xml.WCharacterBase.LATIN_CAPITAL_LETTER_A); else if(codepoint >= com.wiris.util.xml.WCharacterBase.LATIN_SMALL_LETTER_A && codepoint <= com.wiris.util.xml.WCharacterBase.LATIN_SMALL_LETTER_Z) return codepoint + (com.wiris.util.xml.WCharacterBase.MATHEMATICAL_MONOSPACE_SMALL_A - com.wiris.util.xml.WCharacterBase.LATIN_SMALL_LETTER_A); else return codepoint;
}
com.wiris.util.xml.WCharacterBase.isOp = function(c) {
	return com.wiris.util.xml.WCharacterBase.isLarge(c) || com.wiris.util.xml.WCharacterBase.isVeryLarge(c) || com.wiris.util.xml.WCharacterBase.isBinaryOp(c) || com.wiris.util.xml.WCharacterBase.isRelation(c) || c == HxOverrides.cca(".",0) || c == HxOverrides.cca(",",0) || c == HxOverrides.cca(":",0);
}
com.wiris.util.xml.WCharacterBase.isTallAccent = function(c) {
	var i = 0;
	while(i < com.wiris.util.xml.WCharacterBase.tallAccents.length) {
		if(c == com.wiris.util.xml.WCharacterBase.tallAccents[i]) return true;
		++i;
	}
	return false;
}
com.wiris.util.xml.WCharacterBase.isDisplayedWithStix = function(c) {
	if(c >= 592 && c <= 687) return true;
	if(c >= 688 && c <= 767) return true;
	if(c >= 8215 && c <= 8233 || c >= 8241 && c <= 8303) return true;
	if(c >= 8304 && c <= 8351) return true;
	if(c >= 8400 && c <= 8447) return true;
	if(c >= 8448 && c <= 8527) return true;
	if(c >= 8528 && c <= 8591) return true;
	if(c >= 8592 && c <= 8703) return true;
	if(c >= 8704 && c <= 8959) return true;
	if(c >= 8960 && c <= 9215) return true;
	if(c >= 9312 && c <= 9471) return true;
	if(c >= 9472 && c <= 9599) return true;
	if(c >= 9600 && c <= 9631) return true;
	if(c >= 9632 && c <= 9727) return true;
	if(c >= 9728 && c <= 9983) return true;
	if(c >= 9984 && c <= 10175) return true;
	if(c >= 10176 && c <= 10223) return true;
	if(c >= 10224 && c <= 10239) return true;
	if(c >= 10240 && c <= 10495) return true;
	if(c >= 10496 && c <= 10623) return true;
	if(c >= 10624 && c <= 10751) return true;
	if(c >= 10752 && c <= 11007) return true;
	if(c >= 11008 && c <= 11263) return true;
	if(c >= 12288 && c <= 12351) return true;
	if(c >= 57344 && c <= 65535) return true;
	if(c >= 119808 && c <= 119963 || c >= 120224 && c <= 120831) return true;
	if(c == 12398 || c == 42791 || c == 42898) return true;
	return false;
}
com.wiris.util.xml.WCharacterBase.latinToDoublestruck = function(codepoint) {
	if(codepoint == 67) return 8450; else if(codepoint == 72) return 8461; else if(codepoint == 78) return 8469; else if(codepoint == 80) return 8473; else if(codepoint == 81) return 8474; else if(codepoint == 82) return 8477; else if(codepoint == 90) return 8484; else if(codepoint >= com.wiris.util.xml.WCharacterBase.LATIN_CAPITAL_LETTER_A && codepoint <= com.wiris.util.xml.WCharacterBase.LATIN_CAPITAL_LETTER_Z) return codepoint + (com.wiris.util.xml.WCharacterBase.MATHEMATICAL_DOUBLE_STRUCK_CAPITAL_A - com.wiris.util.xml.WCharacterBase.LATIN_CAPITAL_LETTER_A); else if(codepoint >= com.wiris.util.xml.WCharacterBase.LATIN_SMALL_LETTER_A && codepoint <= com.wiris.util.xml.WCharacterBase.LATIN_SMALL_LETTER_Z) return codepoint + (com.wiris.util.xml.WCharacterBase.MATHEMATICAL_DOUBLE_STRUCK_SMALL_A - com.wiris.util.xml.WCharacterBase.LATIN_SMALL_LETTER_A); else if(codepoint >= com.wiris.util.xml.WCharacterBase.DIGIT_ZERO && codepoint <= com.wiris.util.xml.WCharacterBase.DIGIT_NINE) return codepoint + (com.wiris.util.xml.WCharacterBase.MATHEMATICAL_DOUBLE_STRUCK_DIGIT_ZERO - com.wiris.util.xml.WCharacterBase.DIGIT_ZERO); else return codepoint;
}
com.wiris.util.xml.WCharacterBase.latinToScript = function(codepoint) {
	if(codepoint == 66) return 8492; else if(codepoint == 69) return 8496; else if(codepoint == 70) return 8497; else if(codepoint == 72) return 8459; else if(codepoint == 73) return 8464; else if(codepoint == 76) return 8466; else if(codepoint == 77) return 8499; else if(codepoint == 82) return 8475; else if(codepoint == 101) return 8495; else if(codepoint == 103) return 8458; else if(codepoint == 111) return 8500; else if(codepoint >= com.wiris.util.xml.WCharacterBase.LATIN_CAPITAL_LETTER_A && codepoint <= com.wiris.util.xml.WCharacterBase.LATIN_CAPITAL_LETTER_Z) return codepoint + (com.wiris.util.xml.WCharacterBase.MATHEMATICAL_SCRIPT_CAPITAL_A - com.wiris.util.xml.WCharacterBase.LATIN_CAPITAL_LETTER_A); else if(codepoint >= com.wiris.util.xml.WCharacterBase.LATIN_SMALL_LETTER_A && codepoint <= com.wiris.util.xml.WCharacterBase.LATIN_SMALL_LETTER_Z) return codepoint + (com.wiris.util.xml.WCharacterBase.MATHEMATICAL_SCRIPT_SMALL_A - com.wiris.util.xml.WCharacterBase.LATIN_SMALL_LETTER_A); else return codepoint;
}
com.wiris.util.xml.WCharacterBase.latinToFraktur = function(codepoint) {
	if(codepoint == 67) return 8493; else if(codepoint == 72) return 8460; else if(codepoint == 73) return 8465; else if(codepoint == 82) return 8476; else if(codepoint == 90) return 8488; else if(codepoint >= com.wiris.util.xml.WCharacterBase.LATIN_CAPITAL_LETTER_A && codepoint <= com.wiris.util.xml.WCharacterBase.LATIN_CAPITAL_LETTER_Z) return codepoint + (com.wiris.util.xml.WCharacterBase.MATHEMATICAL_FRAKTUR_CAPITAL_A - com.wiris.util.xml.WCharacterBase.LATIN_CAPITAL_LETTER_A); else if(codepoint >= com.wiris.util.xml.WCharacterBase.LATIN_SMALL_LETTER_A && codepoint <= com.wiris.util.xml.WCharacterBase.LATIN_SMALL_LETTER_Z) return codepoint + (com.wiris.util.xml.WCharacterBase.MATHEMATICAL_FRAKTUR_SMALL_A - com.wiris.util.xml.WCharacterBase.LATIN_SMALL_LETTER_A); else return codepoint;
}
com.wiris.util.xml.WCharacterBase.stripAccent = function(c) {
	com.wiris.util.xml.WCharacterBase.initAccentsDictionary();
	if(c >= 128) {
		var i = com.wiris.util.xml.WCharacterBase.accentsDictionary.keys();
		while(i.hasNext()) {
			var s = i.next();
			var chars = com.wiris.util.xml.WCharacterBase.accentsDictionary.get(s);
			if(com.wiris.util.xml.WCharacterBase.binarySearch(chars,c)) return s;
		}
		return com.wiris.system.Utf8.uchr(c);
	} else return com.wiris.system.Utf8.uchr(c);
}
com.wiris.util.xml.WCharacterBase.containsGreek = function(text) {
	if(text == null) return false;
	var it = com.wiris.system.Utf8.getIterator(text);
	while(it.hasNext()) if(com.wiris.util.xml.WCharacterBase.isGreek(it.next())) return true;
	return false;
}
com.wiris.util.xml.WEntities = $hxClasses["com.wiris.util.xml.WEntities"] = function() { }
com.wiris.util.xml.WEntities.__name__ = ["com","wiris","util","xml","WEntities"];
com.wiris.util.xml.WXmlUtils = $hxClasses["com.wiris.util.xml.WXmlUtils"] = function() { }
com.wiris.util.xml.WXmlUtils.__name__ = ["com","wiris","util","xml","WXmlUtils"];
com.wiris.util.xml.WXmlUtils.getElementContent = function(element) {
	var sb = new StringBuf();
	if(element.nodeType == Xml.Document || element.nodeType == Xml.Element) {
		var i = element.iterator();
		while(i.hasNext()) sb.b += Std.string(i.next().toString());
	}
	return sb.b;
}
com.wiris.util.xml.WXmlUtils.hasSameAttributes = function(a,b) {
	if(a == null && b == null) return true; else if(a == null || b == null) return false;
	var iteratorA = a.attributes();
	var iteratorB = b.attributes();
	while(iteratorA.hasNext()) {
		if(!iteratorB.hasNext()) return false;
		iteratorB.next();
		var attr = iteratorA.next();
		if(!(com.wiris.util.xml.WXmlUtils.getAttribute(a,attr) == com.wiris.util.xml.WXmlUtils.getAttribute(b,attr))) return false;
	}
	return !iteratorB.hasNext();
}
com.wiris.util.xml.WXmlUtils.getElementsByAttributeValue = function(nodeList,attributeName,attributeValue) {
	var nodes = new Array();
	while(nodeList.hasNext()) {
		var node = nodeList.next();
		if(node.nodeType == Xml.Element && attributeValue == com.wiris.util.xml.WXmlUtils.getAttribute(node,attributeName)) nodes.push(node);
	}
	return nodes;
}
com.wiris.util.xml.WXmlUtils.getElementsByTagName = function(nodeList,tagName) {
	var nodes = new Array();
	while(nodeList.hasNext()) {
		var node = nodeList.next();
		if(node.nodeType == Xml.Element && node.getNodeName() == tagName) nodes.push(node);
	}
	return nodes;
}
com.wiris.util.xml.WXmlUtils.getElements = function(node) {
	var nodes = new Array();
	var nodeList = node.iterator();
	while(nodeList.hasNext()) {
		var item = nodeList.next();
		if(item.nodeType == Xml.Element) nodes.push(item);
	}
	return nodes;
}
com.wiris.util.xml.WXmlUtils.getDocumentElement = function(doc) {
	var nodeList = doc.iterator();
	while(nodeList.hasNext()) {
		var node = nodeList.next();
		if(node.nodeType == Xml.Element) return node;
	}
	return null;
}
com.wiris.util.xml.WXmlUtils.getAttribute = function(node,attributeName) {
	var value = node.get(attributeName);
	if(value == null) return null;
	if(com.wiris.settings.PlatformSettings.PARSE_XML_ENTITIES) return com.wiris.util.xml.WXmlUtils.htmlUnescape(value);
	return value;
}
com.wiris.util.xml.WXmlUtils.setAttribute = function(node,name,value) {
	if(value != null && com.wiris.settings.PlatformSettings.PARSE_XML_ENTITIES) value = com.wiris.util.xml.WXmlUtils.htmlEscape(value);
	node.set(name,value);
}
com.wiris.util.xml.WXmlUtils.getNodeValue = function(node) {
	var value = node.getNodeValue();
	if(value == null) return null;
	if(com.wiris.settings.PlatformSettings.PARSE_XML_ENTITIES && node.nodeType == Xml.PCData) return com.wiris.util.xml.WXmlUtils.htmlUnescape(value);
	return value;
}
com.wiris.util.xml.WXmlUtils.createPCData = function(node,text) {
	if(com.wiris.settings.PlatformSettings.PARSE_XML_ENTITIES) text = com.wiris.util.xml.WXmlUtils.htmlEscape(text);
	return Xml.createPCData(text);
}
com.wiris.util.xml.WXmlUtils.escapeXmlEntities = function(s) {
	s = StringTools.replace(s,"&","&amp;");
	s = StringTools.replace(s,"<","&lt;");
	s = StringTools.replace(s,">","&gt;");
	s = StringTools.replace(s,"\"","&quot;");
	s = StringTools.replace(s,"'","&apos;");
	return s;
}
com.wiris.util.xml.WXmlUtils.htmlEscape = function(input) {
	var output = StringTools.replace(input,"&","&amp;");
	output = StringTools.replace(output,"<","&lt;");
	output = StringTools.replace(output,">","&gt;");
	output = StringTools.replace(output,"\"","&quot;");
	output = StringTools.replace(output,"&apos;","'");
	return output;
}
com.wiris.util.xml.WXmlUtils.htmlUnescape = function(input) {
	var output = "";
	var start = 0;
	var position = input.indexOf("&",start);
	while(position != -1) {
		output += HxOverrides.substr(input,start,position - start);
		if(input.charAt(position + 1) == "#") {
			var startPosition = position + 2;
			var endPosition = input.indexOf(";",startPosition);
			if(endPosition != -1) {
				var number = HxOverrides.substr(input,startPosition,endPosition - startPosition);
				if(StringTools.startsWith(number,"x")) number = "0" + number;
				var charCode = Std.parseInt(number);
				output += com.wiris.system.Utf8.uchr(charCode);
				start = endPosition + 1;
			} else {
				output += "&";
				start = position + 1;
			}
		} else {
			output += "&";
			start = position + 1;
		}
		position = input.indexOf("&",start);
	}
	output += HxOverrides.substr(input,start,input.length - start);
	output = StringTools.replace(output,"&lt;","<");
	output = StringTools.replace(output,"&gt;",">");
	output = StringTools.replace(output,"&quot;","\"");
	output = StringTools.replace(output,"&apos;","'");
	output = StringTools.replace(output,"&amp;","&");
	return output;
}
com.wiris.util.xml.WXmlUtils.parseXML = function(xml) {
	xml = com.wiris.util.xml.WXmlUtils.filterMathMLEntities(xml);
	var x = Xml.parse(xml);
	return x;
}
com.wiris.util.xml.WXmlUtils.safeParseXML = function(xml) {
	try {
		return com.wiris.util.xml.WXmlUtils.parseXML(xml);
	} catch( e ) {
		return Xml.createDocument();
	}
}
com.wiris.util.xml.WXmlUtils.serializeXML = function(xml) {
	var s = xml.toString();
	s = com.wiris.util.xml.WXmlUtils.filterMathMLEntities(s);
	return s;
}
com.wiris.util.xml.WXmlUtils.resolveEntities = function(text) {
	com.wiris.util.xml.WXmlUtils.initEntities();
	var sb = new StringBuf();
	var i = 0;
	var n = text.length;
	while(i < n) {
		var c = com.wiris.util.xml.WXmlUtils.getUtf8Char(text,i);
		if(c == 60 && i + 12 < n && HxOverrides.cca(text,i + 1) == 33) {
			if(HxOverrides.substr(text,i,9) == "<![CDATA[") {
				var e = text.indexOf("]]>",i);
				if(e != -1) {
					sb.b += Std.string(HxOverrides.substr(text,i,e - i + 3));
					i = e + 3;
					continue;
				}
			}
		}
		if(c > 127) {
			var special = com.wiris.system.Utf8.uchr(c);
			sb.b += Std.string(special);
			i += special.length - 1;
		} else if(c == 38) {
			i++;
			c = HxOverrides.cca(text,i);
			if(com.wiris.util.xml.WXmlUtils.isNameStart(c)) {
				var name = new StringBuf();
				name.b += String.fromCharCode(c);
				i++;
				c = HxOverrides.cca(text,i);
				while(com.wiris.util.xml.WXmlUtils.isNameChar(c)) {
					name.b += String.fromCharCode(c);
					i++;
					c = HxOverrides.cca(text,i);
				}
				var ent = name.b;
				if(c == 59 && com.wiris.util.xml.WXmlUtils.entities.exists(ent) && !com.wiris.util.xml.WXmlUtils.isXmlEntity(ent)) {
					var val = com.wiris.util.xml.WXmlUtils.entities.get(ent);
					sb.b += Std.string(com.wiris.system.Utf8.uchr(Std.parseInt(val)));
				} else {
					sb.b += Std.string("&");
					sb.b += Std.string(name);
					sb.b += String.fromCharCode(c);
				}
			} else if(c == 35) {
				i++;
				c = HxOverrides.cca(text,i);
				if(c == 120) {
					var hex = new StringBuf();
					i++;
					c = HxOverrides.cca(text,i);
					while(com.wiris.util.xml.WXmlUtils.isHexDigit(c)) {
						hex.b += String.fromCharCode(c);
						i++;
						c = HxOverrides.cca(text,i);
					}
					var hent = hex.b;
					if(c == 59 && !com.wiris.util.xml.WXmlUtils.isXmlEntity("#x" + hent)) {
						var dec = Std.parseInt("0x" + hent);
						sb.b += Std.string(com.wiris.system.Utf8.uchr(dec));
					} else {
						sb.b += Std.string("&#x");
						sb.b += Std.string(hent);
						sb.b += String.fromCharCode(c);
					}
				} else if(48 <= c && c <= 57) {
					var dec = new StringBuf();
					while(48 <= c && c <= 57) {
						dec.b += String.fromCharCode(c);
						i++;
						c = HxOverrides.cca(text,i);
					}
					if(c == 59 && !com.wiris.util.xml.WXmlUtils.isXmlEntity("#" + Std.string(dec))) sb.b += Std.string(com.wiris.system.Utf8.uchr(Std.parseInt(dec.b))); else {
						sb.b += Std.string("&#" + dec.b);
						sb.b += String.fromCharCode(c);
					}
				}
			}
		} else sb.b += String.fromCharCode(c);
		i++;
	}
	return sb.b;
}
com.wiris.util.xml.WXmlUtils.filterMathMLEntities = function(text) {
	text = com.wiris.util.xml.WXmlUtils.resolveEntities(text);
	text = com.wiris.util.xml.WXmlUtils.nonAsciiToEntities(text);
	return text;
}
com.wiris.util.xml.WXmlUtils.getUtf8Char = function(text,i) {
	var c = HxOverrides.cca(text,i);
	var d = c;
	if(com.wiris.settings.PlatformSettings.UTF8_CONVERSION) {
		if(d > 127) {
			var j = 0;
			c = 128;
			do {
				c = c >> 1;
				j++;
			} while((d & c) != 0);
			d = c - 1 & d;
			while(--j > 0) {
				i++;
				c = HxOverrides.cca(text,i);
				d = (d << 6) + (c & 63);
			}
		}
	} else if(d >= 55296 && d <= 56319) {
		c = HxOverrides.cca(text,i + 1);
		d = (d - 55296 << 10) + (c - 56320) + 65536;
	}
	return d;
}
com.wiris.util.xml.WXmlUtils.nonAsciiToEntities = function(s) {
	var sb = new StringBuf();
	var i = 0;
	var n = s.length;
	while(i < n) {
		var c = com.wiris.util.xml.WXmlUtils.getUtf8Char(s,i);
		if(c > 127) {
			var hex = com.wiris.common.WInteger.toHex(c,5);
			var j = 0;
			while(j < hex.length) {
				if(!(HxOverrides.substr(hex,j,1) == "0")) {
					hex = HxOverrides.substr(hex,j,null);
					break;
				}
				++j;
			}
			sb.b += Std.string("&#x" + hex + ";");
			i += com.wiris.system.Utf8.uchr(c).length;
		} else {
			sb.b += String.fromCharCode(c);
			i++;
		}
	}
	return sb.b;
}
com.wiris.util.xml.WXmlUtils.isNameStart = function(c) {
	if(65 <= c && c <= 90) return true;
	if(97 <= c && c <= 122) return true;
	if(c == 95 || c == 58) return true;
	return false;
}
com.wiris.util.xml.WXmlUtils.isNameChar = function(c) {
	if(com.wiris.util.xml.WXmlUtils.isNameStart(c)) return true;
	if(48 <= c && c <= 57) return true;
	if(c == 46 || c == 45) return true;
	return false;
}
com.wiris.util.xml.WXmlUtils.isHexDigit = function(c) {
	if(c >= 48 && c <= 57) return true;
	if(c >= 65 && c <= 70) return true;
	if(c >= 97 && c <= 102) return true;
	return false;
}
com.wiris.util.xml.WXmlUtils.resolveMathMLEntity = function(name) {
	com.wiris.util.xml.WXmlUtils.initEntities();
	if(com.wiris.util.xml.WXmlUtils.entities.exists(name)) {
		var code = com.wiris.util.xml.WXmlUtils.entities.get(name);
		return Std.parseInt(code);
	}
	return -1;
}
com.wiris.util.xml.WXmlUtils.initEntities = function() {
	if(com.wiris.util.xml.WXmlUtils.entities == null) {
		var e = com.wiris.util.xml.WEntities.MATHML_ENTITIES;
		com.wiris.util.xml.WXmlUtils.entities = new Hash();
		var start = 0;
		var mid;
		while((mid = e.indexOf("@",start)) != -1) {
			var name = HxOverrides.substr(e,start,mid - start);
			mid++;
			start = e.indexOf("@",mid);
			if(start == -1) break;
			var value = HxOverrides.substr(e,mid,start - mid);
			var num = Std.parseInt("0x" + value);
			com.wiris.util.xml.WXmlUtils.entities.set(name,"" + num);
			start++;
		}
	}
}
com.wiris.util.xml.WXmlUtils.getText = function(xml) {
	if(xml.nodeType == Xml.PCData) return xml.getNodeValue();
	var r = "";
	var iter = xml.iterator();
	while(iter.hasNext()) r += com.wiris.util.xml.WXmlUtils.getText(iter.next());
	return r;
}
com.wiris.util.xml.WXmlUtils.getInnerText = function(xml) {
	if(xml.nodeType == Xml.PCData || xml.nodeType == Xml.CData) return com.wiris.util.xml.WXmlUtils.getNodeValue(xml);
	var r = "";
	var iter = xml.iterator();
	while(iter.hasNext()) r += com.wiris.util.xml.WXmlUtils.getInnerText(iter.next());
	return r;
}
com.wiris.util.xml.WXmlUtils.setText = function(xml,text) {
	if(xml.nodeType != Xml.Element) return;
	var it = xml.iterator();
	if(it.hasNext()) {
		var child = it.next();
		if(child.nodeType == Xml.PCData) xml.removeChild(child);
	}
	xml.addChild(Xml.createPCData(text));
}
com.wiris.util.xml.WXmlUtils.copyXml = function(elem) {
	return com.wiris.util.xml.WXmlUtils.importXml(elem,elem);
}
com.wiris.util.xml.WXmlUtils.copyChildren = function(from,to) {
	var children = from.iterator();
	while(children.hasNext()) {
		var child = children.next();
		to.addChild(com.wiris.util.xml.WXmlUtils.importXml(child,to));
	}
}
com.wiris.util.xml.WXmlUtils.copyElements = function(from,to) {
	var it = from.iterator();
	while(it.hasNext()) {
		var child = it.next();
		if(child.nodeType == Xml.Element) to.addChild(com.wiris.util.xml.WXmlUtils.importXml(child,to));
	}
}
com.wiris.util.xml.WXmlUtils.removeChildren = function(element) {
	while(element.firstChild() != null) element.removeChild(element.firstChild());
}
com.wiris.util.xml.WXmlUtils.removeAttributeFromChildren = function(parent,attribute) {
	if(parent.nodeType != Xml.Element) return;
	var it = parent.iterator();
	while(it.hasNext()) {
		var child = it.next();
		if(child.nodeType == Xml.Element && child.get(attribute) != null) child.remove(attribute);
	}
}
com.wiris.util.xml.WXmlUtils.getChildPosition = function(parent,node) {
	var childIndex = 0;
	var it = parent.iterator();
	while(it.hasNext()) {
		var child = it.next();
		if(child == node) return childIndex;
		++childIndex;
	}
	return -1;
}
com.wiris.util.xml.WXmlUtils.getChildElementCount = function(parent) {
	if(parent.nodeType != Xml.Element && parent.nodeType != Xml.Document) return 0;
	var it = parent.elements();
	var count = 0;
	while(it.hasNext()) {
		it.next();
		++count;
	}
	return count;
}
com.wiris.util.xml.WXmlUtils.replaceChild = function(parent,childToReplace,replacement) {
	var childIndex = com.wiris.util.xml.WXmlUtils.getChildPosition(parent,childToReplace);
	if(childIndex != -1) com.wiris.util.xml.WXmlUtils.replaceIndexSub(parent,childIndex,childToReplace,replacement);
}
com.wiris.util.xml.WXmlUtils.replaceIndexSub = function(parent,index,childToReplace,replacement) {
	parent.insertChild(replacement,index);
	parent.removeChild(childToReplace);
}
com.wiris.util.xml.WXmlUtils.importXml = function(elem,model) {
	var n = null;
	if(elem.nodeType == Xml.Element) {
		n = Xml.createElement(elem.getNodeName());
		var keys = elem.attributes();
		while(keys.hasNext()) {
			var key = keys.next();
			n.set(key,elem.get(key));
		}
		var children = elem.iterator();
		while(children.hasNext()) n.addChild(com.wiris.util.xml.WXmlUtils.importXml(children.next(),model));
	} else if(elem.nodeType == Xml.Document) n = com.wiris.util.xml.WXmlUtils.importXml(elem.firstElement(),model); else if(elem.nodeType == Xml.CData) n = Xml.createCData(elem.getNodeValue()); else if(elem.nodeType == Xml.PCData) n = Xml.createPCData(elem.getNodeValue()); else if(elem.nodeType == Xml.Comment) n = Xml.createComment(elem.getNodeValue()); else throw "Unsupported node type: " + Std.string(elem.nodeType);
	return n;
}
com.wiris.util.xml.WXmlUtils.importXmlWithoutChildren = function(elem,model) {
	var n = null;
	if(elem.nodeType == Xml.Element) {
		n = Xml.createElement(elem.getNodeName());
		var keys = elem.attributes();
		while(keys.hasNext()) {
			var key = keys.next();
			n.set(key,elem.get(key));
		}
	} else if(elem.nodeType == Xml.CData) n = Xml.createCData(elem.getNodeValue()); else if(elem.nodeType == Xml.PCData) n = Xml.createPCData(elem.getNodeValue()); else throw "Unsupported node type: " + Std.string(elem.nodeType);
	return n;
}
com.wiris.util.xml.WXmlUtils.copyXmlNamespace = function(elem,customNamespace,prefixAttributes) {
	return com.wiris.util.xml.WXmlUtils.importXmlNamespace(elem,elem,customNamespace,prefixAttributes);
}
com.wiris.util.xml.WXmlUtils.importXmlNamespace = function(elem,model,customNamespace,prefixAttributes) {
	var n = null;
	if(elem.nodeType == Xml.Element) {
		n = Xml.createElement(customNamespace + ":" + elem.getNodeName());
		var keys = elem.attributes();
		while(keys.hasNext()) {
			var key = keys.next();
			var keyNamespaced = key;
			if(prefixAttributes && key.indexOf(":") == -1 && key.indexOf("xmlns") == -1) keyNamespaced = customNamespace + ":" + key;
			n.set(keyNamespaced,elem.get(key));
		}
		var children = elem.iterator();
		while(children.hasNext()) n.addChild(com.wiris.util.xml.WXmlUtils.importXmlNamespace(children.next(),model,customNamespace,prefixAttributes));
	} else if(elem.nodeType == Xml.Document) n = com.wiris.util.xml.WXmlUtils.importXmlNamespace(elem.firstElement(),model,customNamespace,prefixAttributes); else if(elem.nodeType == Xml.CData) n = Xml.createCData(elem.getNodeValue()); else if(elem.nodeType == Xml.PCData) n = Xml.createPCData(elem.getNodeValue()); else throw "Unsupported node type: " + Std.string(elem.nodeType);
	return n;
}
com.wiris.util.xml.WXmlUtils.indentXml = function(xml,space) {
	var depth = 0;
	var opentag = new EReg("^<([\\w-_]+)[^>]*>$","");
	var autotag = new EReg("^<([\\w-_]+)[^>]*/>$","");
	var closetag = new EReg("^</([\\w-_]+)>$","");
	var cdata = new EReg("^<!\\[CDATA\\[[^\\]]*\\]\\]>$","");
	var res = new StringBuf();
	var end = 0;
	var start;
	var text;
	while(end < xml.length && (start = xml.indexOf("<",end)) != -1) {
		text = start > end;
		if(text) res.b += Std.string(HxOverrides.substr(xml,end,start - end));
		end = xml.indexOf(">",start) + 1;
		var aux = HxOverrides.substr(xml,start,end - start);
		if(autotag.match(aux)) {
			res.b += Std.string("\n");
			var i;
			var _g = 0;
			while(_g < depth) {
				var i1 = _g++;
				res.b += Std.string(space);
			}
			res.b += Std.string(aux);
		} else if(opentag.match(aux)) {
			res.b += Std.string("\n");
			var i;
			var _g = 0;
			while(_g < depth) {
				var i1 = _g++;
				res.b += Std.string(space);
			}
			res.b += Std.string(aux);
			depth++;
		} else if(closetag.match(aux)) {
			depth--;
			if(!text) {
				res.b += Std.string("\n");
				var i;
				var _g = 0;
				while(_g < depth) {
					var i1 = _g++;
					res.b += Std.string(space);
				}
			}
			res.b += Std.string(aux);
		} else if(cdata.match(aux)) res.b += Std.string(aux); else {
			haxe.Log.trace("WARNING! malformed XML at character " + end + ":" + xml,{ fileName : "WXmlUtils.hx", lineNumber : 835, className : "com.wiris.util.xml.WXmlUtils", methodName : "indentXml"});
			res.b += Std.string(aux);
		}
	}
	return StringTools.trim(res.b);
}
com.wiris.util.xml.WXmlUtils.isXmlEntity = function(ent) {
	if(HxOverrides.cca(ent,0) == 35) {
		var c;
		if(HxOverrides.cca(ent,1) == 120) c = Std.parseInt("0x" + HxOverrides.substr(ent,2,null)); else c = Std.parseInt(HxOverrides.substr(ent,1,null));
		return c == 34 || c == 38 || c == 39 || c == 60 || c == 62;
	} else return ent == "amp" || ent == "lt" || ent == "gt" || ent == "quot" || ent == "apos";
}
com.wiris.util.xml.WXmlUtils.getNamespace = function(element,prefix) {
	if(element != null && element.nodeType == Xml.Document) element = element.firstElement();
	var prefixAttr = prefix == null?"xmlns":"xmlns:" + prefix;
	return com.wiris.util.xml.WXmlUtils.getNamespaceSearch(element,prefixAttr);
}
com.wiris.util.xml.WXmlUtils.getNamespaceSearch = function(element,attribute) {
	while(element != null && element.nodeType == Xml.Element) {
		var attributeValue = element.get(attribute);
		if(attributeValue != null) return attributeValue;
		element = element.getParent();
	}
	return null;
}
com.wiris.util.xml.WXmlUtils.normalizeWhitespace = function(s) {
	return s != null?com.wiris.util.xml.WXmlUtils.WHITESPACE_COLLAPSE_REGEX.replace(StringTools.trim(s)," "):null;
}
com.wiris.util.xml.XmlSerializer = $hxClasses["com.wiris.util.xml.XmlSerializer"] = function() {
	this.tags = new Hash();
	this.elementStack = new Array();
	this.childrenStack = new Array();
	this.childStack = new Array();
	this.cacheTagStackCount = 0;
	this.ignoreTagStackCount = 0;
};
com.wiris.util.xml.XmlSerializer.__name__ = ["com","wiris","util","xml","XmlSerializer"];
com.wiris.util.xml.XmlSerializer.getXmlTextContent = function(element) {
	if(element.nodeType == Xml.CData || element.nodeType == Xml.PCData) return com.wiris.util.xml.WXmlUtils.getNodeValue(element); else if(element.nodeType == Xml.Document || element.nodeType == Xml.Element) {
		var sb = new StringBuf();
		var children = element.iterator();
		while(children.hasNext()) sb.b += Std.string(com.wiris.util.xml.XmlSerializer.getXmlTextContent(children.next()));
		return sb.b;
	} else return "";
}
com.wiris.util.xml.XmlSerializer.parseBoolean = function(s) {
	return s.toLowerCase() == "true" || s == "1";
}
com.wiris.util.xml.XmlSerializer.booleanToString = function(b) {
	return b?"true":"false";
}
com.wiris.util.xml.XmlSerializer.compareStrings = function(a,b) {
	var i;
	var an = a.length;
	var bn = b.length;
	var n = an > bn?bn:an;
	var _g = 0;
	while(_g < n) {
		var i1 = _g++;
		var c = HxOverrides.cca(a,i1) - HxOverrides.cca(b,i1);
		if(c != 0) return c;
	}
	return a.length - b.length;
}
com.wiris.util.xml.XmlSerializer.prototype = {
	isIgnoreTag: function(s) {
		if(this.ignore != null) {
			var i = HxOverrides.iter(this.ignore);
			while(i.hasNext()) if(i.next() == s) return true;
		}
		return false;
	}
	,setIgnoreTags: function(ignore) {
		this.ignore = ignore;
	}
	,serializeXml: function(tag,elem) {
		if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_READ) {
			if(tag == null || this.currentChild() != null && this.currentChild().getNodeName() == tag) {
				elem = this.currentChild();
				this.nextChild();
			}
		} else if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_WRITE) {
			if(elem != null && this.ignoreTagStackCount == 0) {
				var imported = com.wiris.util.xml.WXmlUtils.importXml(elem,this.element);
				this.element.addChild(imported);
			}
		} else if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_REGISTER) this.beginTag(tag);
		return elem;
	}
	,getMainTag: function(xml) {
		var i = 0;
		var c;
		do {
			i = xml.indexOf("<",i);
			i++;
			c = HxOverrides.cca(xml,i);
		} while(c != 33 && c != 63);
		var end = [">"," ","/"];
		var j;
		var min = 0;
		var _g1 = 0, _g = end.length;
		while(_g1 < _g) {
			var j1 = _g1++;
			var n = xml.indexOf(end[j1]);
			if(n != -1 && n < min) n = min;
		}
		return HxOverrides.substr(xml,i,min);
	}
	,endCache: function() {
		if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_CACHE) this.mode = com.wiris.util.xml.XmlSerializer.MODE_WRITE;
	}
	,beginCache: function() {
		if(this.cache && this.mode == com.wiris.util.xml.XmlSerializer.MODE_WRITE) this.mode = com.wiris.util.xml.XmlSerializer.MODE_CACHE;
	}
	,setCached: function(cache) {
		this.cache = cache;
	}
	,childInt: function(name,value,def) {
		return Std.parseInt(this.childString(name,"" + value,"" + def));
	}
	,childString: function(name,value,def) {
		if(!(this.mode == com.wiris.util.xml.XmlSerializer.MODE_WRITE && (value == null && def == null || value != null && value == def))) {
			if(this.beginTag(name)) {
				value = this.textContent(value);
				this.endTag();
			}
		}
		return value;
	}
	,popState: function() {
		this.element = this.elementStack.pop();
		this.children = this.childrenStack.pop();
		this.child = this.childStack.pop();
	}
	,pushState: function() {
		this.elementStack.push(this.element);
		this.childrenStack.push(this.children);
		this.childStack.push(this.child);
	}
	,currentChild: function() {
		if(this.child == null && this.children.hasNext()) this.child = this.children.next();
		return this.child;
	}
	,nextChild: function() {
		if(this.children.hasNext()) this.child = this.children.next(); else this.child = null;
		return this.child;
	}
	,setCurrentElement: function(element) {
		this.element = element;
		this.children = this.element.elements();
		this.child = null;
	}
	,readNodeModel: function(model) {
		var node = model.newInstance();
		node.onSerialize(this);
		return node;
	}
	,readNode: function() {
		if(!this.tags.exists(this.currentChild().getNodeName())) throw "Tag " + this.currentChild().getNodeName() + " not registered.";
		var model = this.tags.get(this.currentChild().getNodeName());
		return this.readNodeModel(model);
	}
	,getTagName: function(elem) {
		var mode = this.mode;
		this.mode = com.wiris.util.xml.XmlSerializer.MODE_REGISTER;
		this.currentTag = null;
		elem.onSerialize(this);
		this.mode = mode;
		return this.currentTag;
	}
	,register: function(elem) {
		this.tags.set(this.getTagName(elem),elem);
	}
	,serializeArrayName: function(array,tagName) {
		if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_READ) {
			if(this.beginTag(tagName)) {
				array = this.serializeArray(array,null);
				this.endTag();
			}
		} else if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_WRITE && array != null && array.length > 0) {
			var element = this.element;
			this.element = Xml.createElement(tagName);
			element.addChild(this.element);
			array = this.serializeArray(array,null);
			this.element = element;
		} else if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_REGISTER) this.beginTag(tagName);
		return array;
	}
	,serializeChildName: function(s,tagName) {
		if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_READ) {
			var child = this.currentChild();
			if(child != null && child.getNodeName() == tagName) s = this.serializeChild(s);
		} else if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_WRITE) s = this.serializeChild(s);
		return s;
	}
	,serializeArray: function(array,tagName) {
		if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_READ) {
			array = new Array();
			var child = this.currentChild();
			while(child != null && (tagName == null || tagName == child.getNodeName())) {
				var elem = this.readNode();
				array.push(elem);
				child = this.currentChild();
			}
		} else if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_WRITE && array != null && array.length > 0) {
			var items = HxOverrides.iter(array);
			while(items.hasNext()) items.next().onSerialize(this);
		}
		return array;
	}
	,serializeChild: function(s) {
		if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_READ) {
			var child = this.currentChild();
			if(child != null) s = this.readNode(); else s = null;
		} else if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_WRITE && s != null) s.onSerialize(this);
		return s;
	}
	,floatContent: function(d) {
		return Std.parseFloat(this.textContent(d + ""));
	}
	,booleanContent: function(content) {
		return com.wiris.util.xml.XmlSerializer.parseBoolean(this.textContent(com.wiris.util.xml.XmlSerializer.booleanToString(content)));
	}
	,rawXml: function(xml) {
		if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_READ) throw "Should not use rawXml() function on read operation!"; else if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_WRITE) {
			var raw = Xml.createElement("rawXml");
			raw.set("id","" + this.rawxmls.length);
			this.rawxmls.push(xml);
			this.element.addChild(raw);
		} else if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_REGISTER) this.currentTag = this.getMainTag(xml);
		return xml;
	}
	,base64Content: function(data) {
		var b64 = new haxe.BaseCode(haxe.io.Bytes.ofString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"));
		if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_READ) {
			var content = this.textContent(null);
			data = b64.decodeBytes(haxe.io.Bytes.ofString(content));
		} else if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_WRITE) this.textContent(b64.encodeBytes(data).toString());
		return data;
	}
	,textContentImpl: function(content,forceCData) {
		if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_READ) content = com.wiris.util.xml.XmlSerializer.getXmlTextContent(this.element); else if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_WRITE && content != null && this.ignoreTagStackCount == 0) {
			var textNode;
			if(content.length > 100 || StringTools.startsWith(content,"<") && StringTools.endsWith(content,">") || forceCData) {
				var k = content.indexOf("]]>");
				var i = 0;
				while(k > -1) {
					var subcontent = HxOverrides.substr(content,i,k - i + 2);
					textNode = Xml.createCData(subcontent);
					this.element.addChild(textNode);
					i = k + 2;
					k = content.indexOf("]]>",i);
				}
				var str = HxOverrides.substr(content,i,null);
				textNode = Xml.createCData(str);
				this.element.addChild(textNode);
			} else {
				textNode = com.wiris.util.xml.WXmlUtils.createPCData(this.element,content);
				this.element.addChild(textNode);
			}
		}
		return content;
	}
	,textContent: function(content) {
		return this.textContentImpl(content,false);
	}
	,attributeFloat: function(name,value,def) {
		return Std.parseFloat(this.attributeString(name,"" + value,"" + def));
	}
	,stringToArray: function(s) {
		if(s == null) return null;
		var ss = s.split(",");
		var a = new Array();
		var i;
		var _g1 = 0, _g = ss.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			a[i1] = Std.parseInt(ss[i1]);
		}
		return a;
	}
	,stringToArrayString: function(s) {
		if(s == null) return null;
		return s.split(",");
	}
	,stringArrayToString: function(a) {
		if(a == null) return null;
		var i;
		var sb = new StringBuf();
		var _g1 = 0, _g = a.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(i1 != 0) sb.b += Std.string(",");
			sb.b += Std.string(a[i1]);
		}
		return sb.b;
	}
	,arrayToString: function(a) {
		if(a == null) return null;
		var sb = new StringBuf();
		var i;
		var _g1 = 0, _g = a.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			if(i1 != 0) sb.b += Std.string(",");
			sb.b += Std.string(a[i1] + "");
		}
		return sb.b;
	}
	,attributeStringArray: function(name,value,def) {
		return this.stringToArrayString(this.attributeString(name,this.stringArrayToString(value),this.stringArrayToString(def)));
	}
	,attributeIntArray: function(name,value,def) {
		return this.stringToArray(this.attributeString(name,this.arrayToString(value),this.arrayToString(def)));
	}
	,attributeInt: function(name,value,def) {
		return Std.parseInt(this.attributeString(name,"" + value,"" + def));
	}
	,attributeBoolean: function(name,value,def) {
		return com.wiris.util.xml.XmlSerializer.parseBoolean(this.attributeString(name,com.wiris.util.xml.XmlSerializer.booleanToString(value),com.wiris.util.xml.XmlSerializer.booleanToString(def)));
	}
	,cacheAttribute: function(name,value,def) {
		if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_WRITE) {
			if(this.cache) {
				value = this.attributeString(name,value,def);
				this.mode = com.wiris.util.xml.XmlSerializer.MODE_CACHE;
				this.cacheTagStackCount = 0;
			}
		} else value = this.attributeString(name,value,def);
		return value;
	}
	,attributeString: function(name,value,def) {
		if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_READ) {
			value = com.wiris.util.xml.WXmlUtils.getAttribute(this.element,name);
			if(value == null) value = def;
		} else if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_WRITE) {
			if(value != null && !(value == def) && this.ignoreTagStackCount == 0) com.wiris.util.xml.WXmlUtils.setAttribute(this.element,name,value);
		}
		return value;
	}
	,endTag: function() {
		if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_READ) {
			this.element = this.element.getParent();
			this.popState();
			this.nextChild();
		} else if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_WRITE) {
			if(this.ignoreTagStackCount > 0) this.ignoreTagStackCount--; else this.element = this.element.getParent();
		} else if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_CACHE) {
			if(this.cacheTagStackCount > 0) this.cacheTagStackCount--; else {
				this.mode = com.wiris.util.xml.XmlSerializer.MODE_WRITE;
				this.element = this.element.getParent();
			}
		}
	}
	,beginTag: function(tag) {
		if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_READ) {
			if(this.currentChild() != null && this.currentChild().nodeType == Xml.Element && tag == this.currentChild().getNodeName()) {
				this.pushState();
				this.setCurrentElement(this.currentChild());
			} else return false;
		} else if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_WRITE) {
			if(this.isIgnoreTag(tag) || this.ignoreTagStackCount > 0) this.ignoreTagStackCount++; else {
				var child = Xml.createElement(tag);
				this.element.addChild(child);
				this.element = child;
			}
		} else if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_REGISTER && this.currentTag == null) this.currentTag = tag; else if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_CACHE) this.cacheTagStackCount++;
		return true;
	}
	,beginTagIfBool: function(tag,current,desired) {
		if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_READ) {
			if(this.beginTag(tag)) return desired;
		} else if(current == desired) this.beginTag(tag);
		return current;
	}
	,beginTagIf: function(tag,current,desired) {
		if(this.mode == com.wiris.util.xml.XmlSerializer.MODE_READ) {
			if(this.beginTag(tag)) return desired;
		} else if(current == desired) this.beginTag(tag);
		return current;
	}
	,write: function(s) {
		this.mode = com.wiris.util.xml.XmlSerializer.MODE_WRITE;
		this.element = Xml.createDocument();
		this.rawxmls = new Array();
		s.onSerialize(this);
		var res = this.element.toString();
		if(StringTools.startsWith(res,"<__document")) res = HxOverrides.substr(res,res.indexOf(">") + 1,null);
		if(StringTools.endsWith(res,"</__document>")) res = HxOverrides.substr(res,0,res.length - "</__document>".length);
		var i;
		var _g1 = 0, _g = this.rawxmls.length;
		while(_g1 < _g) {
			var i1 = _g1++;
			var start = res.indexOf("<rawXml id=\"" + i1 + "\"");
			if(start != -1) {
				var end = res.indexOf(">",start);
				res = HxOverrides.substr(res,0,start) + this.rawxmls[i1] + HxOverrides.substr(res,end + 1,null);
			}
		}
		return res;
	}
	,readXml: function(xml) {
		this.setCurrentElement(xml);
		this.mode = com.wiris.util.xml.XmlSerializer.MODE_READ;
		return this.readNode();
	}
	,read: function(xml) {
		var document = Xml.parse(xml);
		this.setCurrentElement(document);
		this.mode = com.wiris.util.xml.XmlSerializer.MODE_READ;
		return this.readNode();
	}
	,getMode: function() {
		return this.mode;
	}
	,ignoreTagStackCount: null
	,ignore: null
	,cacheTagStackCount: null
	,cache: null
	,currentTag: null
	,rawxmls: null
	,tags: null
	,childStack: null
	,childrenStack: null
	,elementStack: null
	,child: null
	,children: null
	,element: null
	,mode: null
	,__class__: com.wiris.util.xml.XmlSerializer
}
haxe.Json = $hxClasses["haxe.Json"] = function() {
};
haxe.Json.__name__ = ["haxe","Json"];
haxe.Json.parse = function(text) {
	return new haxe.Json().doParse(text);
}
haxe.Json.stringify = function(value) {
	return new haxe.Json().toString(value);
}
haxe.Json.prototype = {
	parseString: function() {
		var start = this.pos;
		var buf = new StringBuf();
		while(true) {
			var c = this.str.charCodeAt(this.pos++);
			if(c == 34) break;
			if(c == 92) {
				buf.b += HxOverrides.substr(this.str,start,this.pos - start - 1);
				c = this.str.charCodeAt(this.pos++);
				switch(c) {
				case 114:
					buf.b += String.fromCharCode(13);
					break;
				case 110:
					buf.b += String.fromCharCode(10);
					break;
				case 116:
					buf.b += String.fromCharCode(9);
					break;
				case 98:
					buf.b += String.fromCharCode(8);
					break;
				case 102:
					buf.b += String.fromCharCode(12);
					break;
				case 47:case 92:case 34:
					buf.b += String.fromCharCode(c);
					break;
				case 117:
					var uc = Std.parseInt("0x" + HxOverrides.substr(this.str,this.pos,4));
					this.pos += 4;
					buf.b += String.fromCharCode(uc);
					break;
				default:
					throw "Invalid escape sequence \\" + String.fromCharCode(c) + " at position " + (this.pos - 1);
				}
				start = this.pos;
			} else if(c != c) throw "Unclosed string";
		}
		buf.b += HxOverrides.substr(this.str,start,this.pos - start - 1);
		return buf.b;
	}
	,parseRec: function() {
		while(true) {
			var c = this.str.charCodeAt(this.pos++);
			switch(c) {
			case 32:case 13:case 10:case 9:
				break;
			case 123:
				var obj = { }, field = null, comma = null;
				while(true) {
					var c1 = this.str.charCodeAt(this.pos++);
					switch(c1) {
					case 32:case 13:case 10:case 9:
						break;
					case 125:
						if(field != null || comma == false) this.invalidChar();
						return obj;
					case 58:
						if(field == null) this.invalidChar();
						obj[field] = this.parseRec();
						field = null;
						comma = true;
						break;
					case 44:
						if(comma) comma = false; else this.invalidChar();
						break;
					case 34:
						if(comma) this.invalidChar();
						field = this.parseString();
						break;
					default:
						this.invalidChar();
					}
				}
				break;
			case 91:
				var arr = [], comma = null;
				while(true) {
					var c1 = this.str.charCodeAt(this.pos++);
					switch(c1) {
					case 32:case 13:case 10:case 9:
						break;
					case 93:
						if(comma == false) this.invalidChar();
						return arr;
					case 44:
						if(comma) comma = false; else this.invalidChar();
						break;
					default:
						if(comma) this.invalidChar();
						this.pos--;
						arr.push(this.parseRec());
						comma = true;
					}
				}
				break;
			case 116:
				var save = this.pos;
				if(this.str.charCodeAt(this.pos++) != 114 || this.str.charCodeAt(this.pos++) != 117 || this.str.charCodeAt(this.pos++) != 101) {
					this.pos = save;
					this.invalidChar();
				}
				return true;
			case 102:
				var save = this.pos;
				if(this.str.charCodeAt(this.pos++) != 97 || this.str.charCodeAt(this.pos++) != 108 || this.str.charCodeAt(this.pos++) != 115 || this.str.charCodeAt(this.pos++) != 101) {
					this.pos = save;
					this.invalidChar();
				}
				return false;
			case 110:
				var save = this.pos;
				if(this.str.charCodeAt(this.pos++) != 117 || this.str.charCodeAt(this.pos++) != 108 || this.str.charCodeAt(this.pos++) != 108) {
					this.pos = save;
					this.invalidChar();
				}
				return null;
			case 34:
				return this.parseString();
			case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 45:
				this.pos--;
				if(!this.reg_float.match(HxOverrides.substr(this.str,this.pos,null))) throw "Invalid float at position " + this.pos;
				var v = this.reg_float.matched(0);
				this.pos += v.length;
				var f = Std.parseFloat(v);
				var i = f | 0;
				return i == f?i:f;
			default:
				this.invalidChar();
			}
		}
	}
	,nextChar: function() {
		return this.str.charCodeAt(this.pos++);
	}
	,invalidChar: function() {
		this.pos--;
		throw "Invalid char " + this.str.charCodeAt(this.pos) + " at position " + this.pos;
	}
	,doParse: function(str) {
		this.reg_float = new EReg("^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?","");
		this.str = str;
		this.pos = 0;
		return this.parseRec();
	}
	,quote: function(s) {
		this.buf.b += Std.string("\"");
		var i = 0;
		while(true) {
			var c = s.charCodeAt(i++);
			if(c != c) break;
			switch(c) {
			case 34:
				this.buf.b += Std.string("\\\"");
				break;
			case 92:
				this.buf.b += Std.string("\\\\");
				break;
			case 10:
				this.buf.b += Std.string("\\n");
				break;
			case 13:
				this.buf.b += Std.string("\\r");
				break;
			case 9:
				this.buf.b += Std.string("\\t");
				break;
			case 8:
				this.buf.b += Std.string("\\b");
				break;
			case 12:
				this.buf.b += Std.string("\\f");
				break;
			default:
				this.buf.b += String.fromCharCode(c);
			}
		}
		this.buf.b += Std.string("\"");
	}
	,toStringRec: function(v) {
		var $e = (Type["typeof"](v));
		switch( $e[1] ) {
		case 8:
			this.buf.b += Std.string("\"???\"");
			break;
		case 4:
			this.objString(v);
			break;
		case 1:
		case 2:
			this.buf.b += Std.string(v);
			break;
		case 5:
			this.buf.b += Std.string("\"<fun>\"");
			break;
		case 6:
			var c = $e[2];
			if(c == String) this.quote(v); else if(c == Array) {
				var v1 = v;
				this.buf.b += Std.string("[");
				var len = v1.length;
				if(len > 0) {
					this.toStringRec(v1[0]);
					var i = 1;
					while(i < len) {
						this.buf.b += Std.string(",");
						this.toStringRec(v1[i++]);
					}
				}
				this.buf.b += Std.string("]");
			} else if(c == Hash) {
				var v1 = v;
				var o = { };
				var $it0 = v1.keys();
				while( $it0.hasNext() ) {
					var k = $it0.next();
					o[k] = v1.get(k);
				}
				this.objString(o);
			} else this.objString(v);
			break;
		case 7:
			var e = $e[2];
			this.buf.b += Std.string(v[1]);
			break;
		case 3:
			this.buf.b += Std.string(v?"true":"false");
			break;
		case 0:
			this.buf.b += Std.string("null");
			break;
		}
	}
	,objString: function(v) {
		this.fieldsString(v,Reflect.fields(v));
	}
	,fieldsString: function(v,fields) {
		var first = true;
		this.buf.b += Std.string("{");
		var _g = 0;
		while(_g < fields.length) {
			var f = fields[_g];
			++_g;
			var value = Reflect.field(v,f);
			if(Reflect.isFunction(value)) continue;
			if(first) first = false; else this.buf.b += Std.string(",");
			this.quote(f);
			this.buf.b += Std.string(":");
			this.toStringRec(value);
		}
		this.buf.b += Std.string("}");
	}
	,toString: function(v) {
		this.buf = new StringBuf();
		this.toStringRec(v);
		return this.buf.b;
	}
	,reg_float: null
	,pos: null
	,str: null
	,buf: null
	,__class__: haxe.Json
}
haxe.Log = $hxClasses["haxe.Log"] = function() { }
haxe.Log.__name__ = ["haxe","Log"];
haxe.Log.trace = function(v,infos) {
	js.Boot.__trace(v,infos);
}
haxe.Log.clear = function() {
	js.Boot.__clear_trace();
}
haxe.Md5 = $hxClasses["haxe.Md5"] = function() {
};
haxe.Md5.__name__ = ["haxe","Md5"];
haxe.Md5.encode = function(s) {
	return new haxe.Md5().doEncode(s);
}
haxe.Md5.prototype = {
	doEncode: function(str) {
		var x = this.str2blks(str);
		var a = 1732584193;
		var b = -271733879;
		var c = -1732584194;
		var d = 271733878;
		var step;
		var i = 0;
		while(i < x.length) {
			var olda = a;
			var oldb = b;
			var oldc = c;
			var oldd = d;
			step = 0;
			a = this.ff(a,b,c,d,x[i],7,-680876936);
			d = this.ff(d,a,b,c,x[i + 1],12,-389564586);
			c = this.ff(c,d,a,b,x[i + 2],17,606105819);
			b = this.ff(b,c,d,a,x[i + 3],22,-1044525330);
			a = this.ff(a,b,c,d,x[i + 4],7,-176418897);
			d = this.ff(d,a,b,c,x[i + 5],12,1200080426);
			c = this.ff(c,d,a,b,x[i + 6],17,-1473231341);
			b = this.ff(b,c,d,a,x[i + 7],22,-45705983);
			a = this.ff(a,b,c,d,x[i + 8],7,1770035416);
			d = this.ff(d,a,b,c,x[i + 9],12,-1958414417);
			c = this.ff(c,d,a,b,x[i + 10],17,-42063);
			b = this.ff(b,c,d,a,x[i + 11],22,-1990404162);
			a = this.ff(a,b,c,d,x[i + 12],7,1804603682);
			d = this.ff(d,a,b,c,x[i + 13],12,-40341101);
			c = this.ff(c,d,a,b,x[i + 14],17,-1502002290);
			b = this.ff(b,c,d,a,x[i + 15],22,1236535329);
			a = this.gg(a,b,c,d,x[i + 1],5,-165796510);
			d = this.gg(d,a,b,c,x[i + 6],9,-1069501632);
			c = this.gg(c,d,a,b,x[i + 11],14,643717713);
			b = this.gg(b,c,d,a,x[i],20,-373897302);
			a = this.gg(a,b,c,d,x[i + 5],5,-701558691);
			d = this.gg(d,a,b,c,x[i + 10],9,38016083);
			c = this.gg(c,d,a,b,x[i + 15],14,-660478335);
			b = this.gg(b,c,d,a,x[i + 4],20,-405537848);
			a = this.gg(a,b,c,d,x[i + 9],5,568446438);
			d = this.gg(d,a,b,c,x[i + 14],9,-1019803690);
			c = this.gg(c,d,a,b,x[i + 3],14,-187363961);
			b = this.gg(b,c,d,a,x[i + 8],20,1163531501);
			a = this.gg(a,b,c,d,x[i + 13],5,-1444681467);
			d = this.gg(d,a,b,c,x[i + 2],9,-51403784);
			c = this.gg(c,d,a,b,x[i + 7],14,1735328473);
			b = this.gg(b,c,d,a,x[i + 12],20,-1926607734);
			a = this.hh(a,b,c,d,x[i + 5],4,-378558);
			d = this.hh(d,a,b,c,x[i + 8],11,-2022574463);
			c = this.hh(c,d,a,b,x[i + 11],16,1839030562);
			b = this.hh(b,c,d,a,x[i + 14],23,-35309556);
			a = this.hh(a,b,c,d,x[i + 1],4,-1530992060);
			d = this.hh(d,a,b,c,x[i + 4],11,1272893353);
			c = this.hh(c,d,a,b,x[i + 7],16,-155497632);
			b = this.hh(b,c,d,a,x[i + 10],23,-1094730640);
			a = this.hh(a,b,c,d,x[i + 13],4,681279174);
			d = this.hh(d,a,b,c,x[i],11,-358537222);
			c = this.hh(c,d,a,b,x[i + 3],16,-722521979);
			b = this.hh(b,c,d,a,x[i + 6],23,76029189);
			a = this.hh(a,b,c,d,x[i + 9],4,-640364487);
			d = this.hh(d,a,b,c,x[i + 12],11,-421815835);
			c = this.hh(c,d,a,b,x[i + 15],16,530742520);
			b = this.hh(b,c,d,a,x[i + 2],23,-995338651);
			a = this.ii(a,b,c,d,x[i],6,-198630844);
			d = this.ii(d,a,b,c,x[i + 7],10,1126891415);
			c = this.ii(c,d,a,b,x[i + 14],15,-1416354905);
			b = this.ii(b,c,d,a,x[i + 5],21,-57434055);
			a = this.ii(a,b,c,d,x[i + 12],6,1700485571);
			d = this.ii(d,a,b,c,x[i + 3],10,-1894986606);
			c = this.ii(c,d,a,b,x[i + 10],15,-1051523);
			b = this.ii(b,c,d,a,x[i + 1],21,-2054922799);
			a = this.ii(a,b,c,d,x[i + 8],6,1873313359);
			d = this.ii(d,a,b,c,x[i + 15],10,-30611744);
			c = this.ii(c,d,a,b,x[i + 6],15,-1560198380);
			b = this.ii(b,c,d,a,x[i + 13],21,1309151649);
			a = this.ii(a,b,c,d,x[i + 4],6,-145523070);
			d = this.ii(d,a,b,c,x[i + 11],10,-1120210379);
			c = this.ii(c,d,a,b,x[i + 2],15,718787259);
			b = this.ii(b,c,d,a,x[i + 9],21,-343485551);
			a = this.addme(a,olda);
			b = this.addme(b,oldb);
			c = this.addme(c,oldc);
			d = this.addme(d,oldd);
			i += 16;
		}
		return this.rhex(a) + this.rhex(b) + this.rhex(c) + this.rhex(d);
	}
	,ii: function(a,b,c,d,x,s,t) {
		return this.cmn(this.bitXOR(c,this.bitOR(b,~d)),a,b,x,s,t);
	}
	,hh: function(a,b,c,d,x,s,t) {
		return this.cmn(this.bitXOR(this.bitXOR(b,c),d),a,b,x,s,t);
	}
	,gg: function(a,b,c,d,x,s,t) {
		return this.cmn(this.bitOR(this.bitAND(b,d),this.bitAND(c,~d)),a,b,x,s,t);
	}
	,ff: function(a,b,c,d,x,s,t) {
		return this.cmn(this.bitOR(this.bitAND(b,c),this.bitAND(~b,d)),a,b,x,s,t);
	}
	,cmn: function(q,a,b,x,s,t) {
		return this.addme(this.rol(this.addme(this.addme(a,q),this.addme(x,t)),s),b);
	}
	,rol: function(num,cnt) {
		return num << cnt | num >>> 32 - cnt;
	}
	,str2blks: function(str) {
		var nblk = (str.length + 8 >> 6) + 1;
		var blks = new Array();
		var _g1 = 0, _g = nblk * 16;
		while(_g1 < _g) {
			var i = _g1++;
			blks[i] = 0;
		}
		var i = 0;
		while(i < str.length) {
			blks[i >> 2] |= HxOverrides.cca(str,i) << (str.length * 8 + i) % 4 * 8;
			i++;
		}
		blks[i >> 2] |= 128 << (str.length * 8 + i) % 4 * 8;
		var l = str.length * 8;
		var k = nblk * 16 - 2;
		blks[k] = l & 255;
		blks[k] |= (l >>> 8 & 255) << 8;
		blks[k] |= (l >>> 16 & 255) << 16;
		blks[k] |= (l >>> 24 & 255) << 24;
		return blks;
	}
	,rhex: function(num) {
		var str = "";
		var hex_chr = "0123456789abcdef";
		var _g = 0;
		while(_g < 4) {
			var j = _g++;
			str += hex_chr.charAt(num >> j * 8 + 4 & 15) + hex_chr.charAt(num >> j * 8 & 15);
		}
		return str;
	}
	,addme: function(x,y) {
		var lsw = (x & 65535) + (y & 65535);
		var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
		return msw << 16 | lsw & 65535;
	}
	,bitAND: function(a,b) {
		var lsb = a & 1 & (b & 1);
		var msb31 = a >>> 1 & b >>> 1;
		return msb31 << 1 | lsb;
	}
	,bitXOR: function(a,b) {
		var lsb = a & 1 ^ b & 1;
		var msb31 = a >>> 1 ^ b >>> 1;
		return msb31 << 1 | lsb;
	}
	,bitOR: function(a,b) {
		var lsb = a & 1 | b & 1;
		var msb31 = a >>> 1 | b >>> 1;
		return msb31 << 1 | lsb;
	}
	,__class__: haxe.Md5
}
haxe.Resource = $hxClasses["haxe.Resource"] = function() { }
haxe.Resource.__name__ = ["haxe","Resource"];
haxe.Resource.content = null;
haxe.Resource.listNames = function() {
	var names = new Array();
	var _g = 0, _g1 = haxe.Resource.content;
	while(_g < _g1.length) {
		var x = _g1[_g];
		++_g;
		names.push(x.name);
	}
	return names;
}
haxe.Resource.getString = function(name) {
	var _g = 0, _g1 = haxe.Resource.content;
	while(_g < _g1.length) {
		var x = _g1[_g];
		++_g;
		if(x.name == name) {
			if(x.str != null) return x.str;
			var b = haxe.Unserializer.run(x.data);
			return b.toString();
		}
	}
	return null;
}
haxe.Resource.getBytes = function(name) {
	var _g = 0, _g1 = haxe.Resource.content;
	while(_g < _g1.length) {
		var x = _g1[_g];
		++_g;
		if(x.name == name) {
			if(x.str != null) return haxe.io.Bytes.ofString(x.str);
			return haxe.Unserializer.run(x.data);
		}
	}
	return null;
}
haxe.SHA1 = $hxClasses["haxe.SHA1"] = function() { }
haxe.SHA1.__name__ = ["haxe","SHA1"];
haxe.SHA1.newInt32 = function(left,right) {
	var result = left | 0;
	result = result << 16;
	return result + (right | 0) | 0;
}
haxe.SHA1.encode = function(s) {
	var x = haxe.SHA1.str2blks_SHA1(s);
	var w = new Array();
	var a = haxe.SHA1.newInt32(26437,8961);
	var b = haxe.SHA1.newInt32(61389,43913);
	var c = haxe.SHA1.newInt32(39098,56574);
	var d = haxe.SHA1.newInt32(4146,21622);
	var e = haxe.SHA1.newInt32(50130,57840);
	var i = 0;
	while(i < x.length) {
		var olda = a;
		var oldb = b;
		var oldc = c;
		var oldd = d;
		var olde = e;
		var j = 0;
		while(j < 80) {
			if(j < 16) w[j] = x[i + j]; else w[j] = haxe.SHA1.rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16],1);
			var t = haxe.SHA1.add(haxe.SHA1.add(haxe.SHA1.rol(a,5),haxe.SHA1.ft(j | 0,b,c,d)),haxe.SHA1.add(haxe.SHA1.add(e,w[j]),haxe.SHA1.kt(j | 0)));
			e = d;
			d = c;
			c = haxe.SHA1.rol(b,30);
			b = a;
			a = t;
			j++;
		}
		a = haxe.SHA1.add(a,olda);
		b = haxe.SHA1.add(b,oldb);
		c = haxe.SHA1.add(c,oldc);
		d = haxe.SHA1.add(d,oldd);
		e = haxe.SHA1.add(e,olde);
		i += 16;
	}
	return haxe.SHA1.hex(a) + haxe.SHA1.hex(b) + haxe.SHA1.hex(c) + haxe.SHA1.hex(d) + haxe.SHA1.hex(e);
}
haxe.SHA1.hex = function(num) {
	var str = "";
	var j = 7;
	while(j >= 0) {
		str += haxe.SHA1.hex_chr.charAt(haxe.Int32.toInt(num >> j * 4 & (15 | 0)));
		j--;
	}
	return str;
}
haxe.SHA1.str2blks_SHA1 = function(s) {
	var nblk = (s.length + 8 >> 6) + 1;
	var blks = new Array();
	var _g1 = 0, _g = nblk * 16;
	while(_g1 < _g) {
		var i = _g1++;
		blks[i] = 0 | 0;
	}
	var _g1 = 0, _g = s.length;
	while(_g1 < _g) {
		var i = _g1++;
		var p = i >> 2;
		var c = HxOverrides.cca(s,i) | 0;
		blks[p] = blks[p] | c << 24 - i % 4 * 8;
	}
	var i = s.length;
	var p = i >> 2;
	blks[p] = blks[p] | (128 | 0) << 24 - i % 4 * 8;
	blks[nblk * 16 - 1] = s.length * 8 | 0;
	return blks;
}
haxe.SHA1.add = function(x,y) {
	var lsw = (x & (65535 | 0)) + (y & (65535 | 0)) | 0;
	var msw = ((x >> 16) + (y >> 16) | 0) + (lsw >> 16) | 0;
	return msw << 16 | lsw & (65535 | 0);
}
haxe.SHA1.rol = function(num,cnt) {
	return num << cnt | num >>> 32 - cnt;
}
haxe.SHA1.ft = function(t,b,c,d) {
	if(t - (20 | 0) < 0) return b & c | ~b & d;
	if(t - (40 | 0) < 0) return b ^ c ^ d;
	if(t - (60 | 0) < 0) return b & c | b & d | c & d;
	return b ^ c ^ d;
}
haxe.SHA1.kt = function(t) {
	if(t - (20 | 0) < 0) return haxe.SHA1.newInt32(23170,31129);
	if(t - (40 | 0) < 0) return haxe.SHA1.newInt32(28377,60321);
	if(t - (60 | 0) < 0) return haxe.SHA1.newInt32(36635,48348);
	return haxe.SHA1.newInt32(51810,49622);
}
haxe.Serializer = $hxClasses["haxe.Serializer"] = function() {
	this.buf = new StringBuf();
	this.cache = new Array();
	this.useCache = haxe.Serializer.USE_CACHE;
	this.useEnumIndex = haxe.Serializer.USE_ENUM_INDEX;
	this.shash = new Hash();
	this.scount = 0;
};
haxe.Serializer.__name__ = ["haxe","Serializer"];
haxe.Serializer.run = function(v) {
	var s = new haxe.Serializer();
	s.serialize(v);
	return s.toString();
}
haxe.Serializer.prototype = {
	serializeException: function(e) {
		this.buf.b += Std.string("x");
		this.serialize(e);
	}
	,serialize: function(v) {
		var $e = (Type["typeof"](v));
		switch( $e[1] ) {
		case 0:
			this.buf.b += Std.string("n");
			break;
		case 1:
			if(v == 0) {
				this.buf.b += Std.string("z");
				return;
			}
			this.buf.b += Std.string("i");
			this.buf.b += Std.string(v);
			break;
		case 2:
			if(Math.isNaN(v)) this.buf.b += Std.string("k"); else if(!Math.isFinite(v)) this.buf.b += Std.string(v < 0?"m":"p"); else {
				this.buf.b += Std.string("d");
				this.buf.b += Std.string(v);
			}
			break;
		case 3:
			this.buf.b += Std.string(v?"t":"f");
			break;
		case 6:
			var c = $e[2];
			if(c == String) {
				this.serializeString(v);
				return;
			}
			if(this.useCache && this.serializeRef(v)) return;
			switch(c) {
			case Array:
				var ucount = 0;
				this.buf.b += Std.string("a");
				var l = v.length;
				var _g = 0;
				while(_g < l) {
					var i = _g++;
					if(v[i] == null) ucount++; else {
						if(ucount > 0) {
							if(ucount == 1) this.buf.b += Std.string("n"); else {
								this.buf.b += Std.string("u");
								this.buf.b += Std.string(ucount);
							}
							ucount = 0;
						}
						this.serialize(v[i]);
					}
				}
				if(ucount > 0) {
					if(ucount == 1) this.buf.b += Std.string("n"); else {
						this.buf.b += Std.string("u");
						this.buf.b += Std.string(ucount);
					}
				}
				this.buf.b += Std.string("h");
				break;
			case List:
				this.buf.b += Std.string("l");
				var v1 = v;
				var $it0 = v1.iterator();
				while( $it0.hasNext() ) {
					var i = $it0.next();
					this.serialize(i);
				}
				this.buf.b += Std.string("h");
				break;
			case Date:
				var d = v;
				this.buf.b += Std.string("v");
				this.buf.b += Std.string(HxOverrides.dateStr(d));
				break;
			case Hash:
				this.buf.b += Std.string("b");
				var v1 = v;
				var $it1 = v1.keys();
				while( $it1.hasNext() ) {
					var k = $it1.next();
					this.serializeString(k);
					this.serialize(v1.get(k));
				}
				this.buf.b += Std.string("h");
				break;
			case IntHash:
				this.buf.b += Std.string("q");
				var v1 = v;
				var $it2 = v1.keys();
				while( $it2.hasNext() ) {
					var k = $it2.next();
					this.buf.b += Std.string(":");
					this.buf.b += Std.string(k);
					this.serialize(v1.get(k));
				}
				this.buf.b += Std.string("h");
				break;
			case haxe.io.Bytes:
				var v1 = v;
				var i = 0;
				var max = v1.length - 2;
				var charsBuf = new StringBuf();
				var b64 = haxe.Serializer.BASE64;
				while(i < max) {
					var b1 = v1.b[i++];
					var b2 = v1.b[i++];
					var b3 = v1.b[i++];
					charsBuf.b += Std.string(b64.charAt(b1 >> 2));
					charsBuf.b += Std.string(b64.charAt((b1 << 4 | b2 >> 4) & 63));
					charsBuf.b += Std.string(b64.charAt((b2 << 2 | b3 >> 6) & 63));
					charsBuf.b += Std.string(b64.charAt(b3 & 63));
				}
				if(i == max) {
					var b1 = v1.b[i++];
					var b2 = v1.b[i++];
					charsBuf.b += Std.string(b64.charAt(b1 >> 2));
					charsBuf.b += Std.string(b64.charAt((b1 << 4 | b2 >> 4) & 63));
					charsBuf.b += Std.string(b64.charAt(b2 << 2 & 63));
				} else if(i == max + 1) {
					var b1 = v1.b[i++];
					charsBuf.b += Std.string(b64.charAt(b1 >> 2));
					charsBuf.b += Std.string(b64.charAt(b1 << 4 & 63));
				}
				var chars = charsBuf.b;
				this.buf.b += Std.string("s");
				this.buf.b += Std.string(chars.length);
				this.buf.b += Std.string(":");
				this.buf.b += Std.string(chars);
				break;
			default:
				this.cache.pop();
				if(v.hxSerialize != null) {
					this.buf.b += Std.string("C");
					this.serializeString(Type.getClassName(c));
					this.cache.push(v);
					v.hxSerialize(this);
					this.buf.b += Std.string("g");
				} else {
					this.buf.b += Std.string("c");
					this.serializeString(Type.getClassName(c));
					this.cache.push(v);
					this.serializeFields(v);
				}
			}
			break;
		case 4:
			if(this.useCache && this.serializeRef(v)) return;
			this.buf.b += Std.string("o");
			this.serializeFields(v);
			break;
		case 7:
			var e = $e[2];
			if(this.useCache && this.serializeRef(v)) return;
			this.cache.pop();
			this.buf.b += Std.string(this.useEnumIndex?"j":"w");
			this.serializeString(Type.getEnumName(e));
			if(this.useEnumIndex) {
				this.buf.b += Std.string(":");
				this.buf.b += Std.string(v[1]);
			} else this.serializeString(v[0]);
			this.buf.b += Std.string(":");
			var l = v.length;
			this.buf.b += Std.string(l - 2);
			var _g = 2;
			while(_g < l) {
				var i = _g++;
				this.serialize(v[i]);
			}
			this.cache.push(v);
			break;
		case 5:
			throw "Cannot serialize function";
			break;
		default:
			throw "Cannot serialize " + Std.string(v);
		}
	}
	,serializeFields: function(v) {
		var _g = 0, _g1 = Reflect.fields(v);
		while(_g < _g1.length) {
			var f = _g1[_g];
			++_g;
			this.serializeString(f);
			this.serialize(Reflect.field(v,f));
		}
		this.buf.b += Std.string("g");
	}
	,serializeRef: function(v) {
		var vt = typeof(v);
		var _g1 = 0, _g = this.cache.length;
		while(_g1 < _g) {
			var i = _g1++;
			var ci = this.cache[i];
			if(typeof(ci) == vt && ci == v) {
				this.buf.b += Std.string("r");
				this.buf.b += Std.string(i);
				return true;
			}
		}
		this.cache.push(v);
		return false;
	}
	,serializeString: function(s) {
		var x = this.shash.get(s);
		if(x != null) {
			this.buf.b += Std.string("R");
			this.buf.b += Std.string(x);
			return;
		}
		this.shash.set(s,this.scount++);
		this.buf.b += Std.string("y");
		s = StringTools.urlEncode(s);
		this.buf.b += Std.string(s.length);
		this.buf.b += Std.string(":");
		this.buf.b += Std.string(s);
	}
	,toString: function() {
		return this.buf.b;
	}
	,useEnumIndex: null
	,useCache: null
	,scount: null
	,shash: null
	,cache: null
	,buf: null
	,__class__: haxe.Serializer
}
haxe.Unserializer = $hxClasses["haxe.Unserializer"] = function(buf) {
	this.buf = buf;
	this.length = buf.length;
	this.pos = 0;
	this.scache = new Array();
	this.cache = new Array();
	var r = haxe.Unserializer.DEFAULT_RESOLVER;
	if(r == null) {
		r = Type;
		haxe.Unserializer.DEFAULT_RESOLVER = r;
	}
	this.setResolver(r);
};
haxe.Unserializer.__name__ = ["haxe","Unserializer"];
haxe.Unserializer.initCodes = function() {
	var codes = new Array();
	var _g1 = 0, _g = haxe.Unserializer.BASE64.length;
	while(_g1 < _g) {
		var i = _g1++;
		codes[haxe.Unserializer.BASE64.charCodeAt(i)] = i;
	}
	return codes;
}
haxe.Unserializer.run = function(v) {
	return new haxe.Unserializer(v).unserialize();
}
haxe.Unserializer.prototype = {
	unserialize: function() {
		switch(this.buf.charCodeAt(this.pos++)) {
		case 110:
			return null;
		case 116:
			return true;
		case 102:
			return false;
		case 122:
			return 0;
		case 105:
			return this.readDigits();
		case 100:
			var p1 = this.pos;
			while(true) {
				var c = this.buf.charCodeAt(this.pos);
				if(c >= 43 && c < 58 || c == 101 || c == 69) this.pos++; else break;
			}
			return Std.parseFloat(HxOverrides.substr(this.buf,p1,this.pos - p1));
		case 121:
			var len = this.readDigits();
			if(this.buf.charCodeAt(this.pos++) != 58 || this.length - this.pos < len) throw "Invalid string length";
			var s = HxOverrides.substr(this.buf,this.pos,len);
			this.pos += len;
			s = StringTools.urlDecode(s);
			this.scache.push(s);
			return s;
		case 107:
			return Math.NaN;
		case 109:
			return Math.NEGATIVE_INFINITY;
		case 112:
			return Math.POSITIVE_INFINITY;
		case 97:
			var buf = this.buf;
			var a = new Array();
			this.cache.push(a);
			while(true) {
				var c = this.buf.charCodeAt(this.pos);
				if(c == 104) {
					this.pos++;
					break;
				}
				if(c == 117) {
					this.pos++;
					var n = this.readDigits();
					a[a.length + n - 1] = null;
				} else a.push(this.unserialize());
			}
			return a;
		case 111:
			var o = { };
			this.cache.push(o);
			this.unserializeObject(o);
			return o;
		case 114:
			var n = this.readDigits();
			if(n < 0 || n >= this.cache.length) throw "Invalid reference";
			return this.cache[n];
		case 82:
			var n = this.readDigits();
			if(n < 0 || n >= this.scache.length) throw "Invalid string reference";
			return this.scache[n];
		case 120:
			throw this.unserialize();
			break;
		case 99:
			var name = this.unserialize();
			var cl = this.resolver.resolveClass(name);
			if(cl == null) throw "Class not found " + name;
			var o = Type.createEmptyInstance(cl);
			this.cache.push(o);
			this.unserializeObject(o);
			return o;
		case 119:
			var name = this.unserialize();
			var edecl = this.resolver.resolveEnum(name);
			if(edecl == null) throw "Enum not found " + name;
			var e = this.unserializeEnum(edecl,this.unserialize());
			this.cache.push(e);
			return e;
		case 106:
			var name = this.unserialize();
			var edecl = this.resolver.resolveEnum(name);
			if(edecl == null) throw "Enum not found " + name;
			this.pos++;
			var index = this.readDigits();
			var tag = Type.getEnumConstructs(edecl)[index];
			if(tag == null) throw "Unknown enum index " + name + "@" + index;
			var e = this.unserializeEnum(edecl,tag);
			this.cache.push(e);
			return e;
		case 108:
			var l = new List();
			this.cache.push(l);
			var buf = this.buf;
			while(this.buf.charCodeAt(this.pos) != 104) l.add(this.unserialize());
			this.pos++;
			return l;
		case 98:
			var h = new Hash();
			this.cache.push(h);
			var buf = this.buf;
			while(this.buf.charCodeAt(this.pos) != 104) {
				var s = this.unserialize();
				h.set(s,this.unserialize());
			}
			this.pos++;
			return h;
		case 113:
			var h = new IntHash();
			this.cache.push(h);
			var buf = this.buf;
			var c = this.buf.charCodeAt(this.pos++);
			while(c == 58) {
				var i = this.readDigits();
				h.set(i,this.unserialize());
				c = this.buf.charCodeAt(this.pos++);
			}
			if(c != 104) throw "Invalid IntHash format";
			return h;
		case 118:
			var d = HxOverrides.strDate(HxOverrides.substr(this.buf,this.pos,19));
			this.cache.push(d);
			this.pos += 19;
			return d;
		case 115:
			var len = this.readDigits();
			var buf = this.buf;
			if(this.buf.charCodeAt(this.pos++) != 58 || this.length - this.pos < len) throw "Invalid bytes length";
			var codes = haxe.Unserializer.CODES;
			if(codes == null) {
				codes = haxe.Unserializer.initCodes();
				haxe.Unserializer.CODES = codes;
			}
			var i = this.pos;
			var rest = len & 3;
			var size = (len >> 2) * 3 + (rest >= 2?rest - 1:0);
			var max = i + (len - rest);
			var bytes = haxe.io.Bytes.alloc(size);
			var bpos = 0;
			while(i < max) {
				var c1 = codes[buf.charCodeAt(i++)];
				var c2 = codes[buf.charCodeAt(i++)];
				bytes.b[bpos++] = (c1 << 2 | c2 >> 4) & 255;
				var c3 = codes[buf.charCodeAt(i++)];
				bytes.b[bpos++] = (c2 << 4 | c3 >> 2) & 255;
				var c4 = codes[buf.charCodeAt(i++)];
				bytes.b[bpos++] = (c3 << 6 | c4) & 255;
			}
			if(rest >= 2) {
				var c1 = codes[buf.charCodeAt(i++)];
				var c2 = codes[buf.charCodeAt(i++)];
				bytes.b[bpos++] = (c1 << 2 | c2 >> 4) & 255;
				if(rest == 3) {
					var c3 = codes[buf.charCodeAt(i++)];
					bytes.b[bpos++] = (c2 << 4 | c3 >> 2) & 255;
				}
			}
			this.pos += len;
			this.cache.push(bytes);
			return bytes;
		case 67:
			var name = this.unserialize();
			var cl = this.resolver.resolveClass(name);
			if(cl == null) throw "Class not found " + name;
			var o = Type.createEmptyInstance(cl);
			this.cache.push(o);
			o.hxUnserialize(this);
			if(this.buf.charCodeAt(this.pos++) != 103) throw "Invalid custom data";
			return o;
		default:
		}
		this.pos--;
		throw "Invalid char " + this.buf.charAt(this.pos) + " at position " + this.pos;
	}
	,unserializeEnum: function(edecl,tag) {
		if(this.buf.charCodeAt(this.pos++) != 58) throw "Invalid enum format";
		var nargs = this.readDigits();
		if(nargs == 0) return Type.createEnum(edecl,tag);
		var args = new Array();
		while(nargs-- > 0) args.push(this.unserialize());
		return Type.createEnum(edecl,tag,args);
	}
	,unserializeObject: function(o) {
		while(true) {
			if(this.pos >= this.length) throw "Invalid object";
			if(this.buf.charCodeAt(this.pos) == 103) break;
			var k = this.unserialize();
			if(!js.Boot.__instanceof(k,String)) throw "Invalid object key";
			var v = this.unserialize();
			o[k] = v;
		}
		this.pos++;
	}
	,readDigits: function() {
		var k = 0;
		var s = false;
		var fpos = this.pos;
		while(true) {
			var c = this.buf.charCodeAt(this.pos);
			if(c != c) break;
			if(c == 45) {
				if(this.pos != fpos) break;
				s = true;
				this.pos++;
				continue;
			}
			if(c < 48 || c > 57) break;
			k = k * 10 + (c - 48);
			this.pos++;
		}
		if(s) k *= -1;
		return k;
	}
	,get: function(p) {
		return this.buf.charCodeAt(p);
	}
	,getResolver: function() {
		return this.resolver;
	}
	,setResolver: function(r) {
		if(r == null) this.resolver = { resolveClass : function(_) {
			return null;
		}, resolveEnum : function(_) {
			return null;
		}}; else this.resolver = r;
	}
	,resolver: null
	,scache: null
	,cache: null
	,length: null
	,pos: null
	,buf: null
	,__class__: haxe.Unserializer
}
if(!haxe.io) haxe.io = {}
haxe.io.Bytes = $hxClasses["haxe.io.Bytes"] = function(length,b) {
	this.length = length;
	this.b = b;
};
haxe.io.Bytes.__name__ = ["haxe","io","Bytes"];
haxe.io.Bytes.alloc = function(length) {
	var a = new Array();
	var _g = 0;
	while(_g < length) {
		var i = _g++;
		a.push(0);
	}
	return new haxe.io.Bytes(length,a);
}
haxe.io.Bytes.ofString = function(s) {
	var a = new Array();
	var _g1 = 0, _g = s.length;
	while(_g1 < _g) {
		var i = _g1++;
		var c = s.charCodeAt(i);
		if(c <= 127) a.push(c); else if(c <= 2047) {
			a.push(192 | c >> 6);
			a.push(128 | c & 63);
		} else if(c <= 65535) {
			a.push(224 | c >> 12);
			a.push(128 | c >> 6 & 63);
			a.push(128 | c & 63);
		} else {
			a.push(240 | c >> 18);
			a.push(128 | c >> 12 & 63);
			a.push(128 | c >> 6 & 63);
			a.push(128 | c & 63);
		}
	}
	return new haxe.io.Bytes(a.length,a);
}
haxe.io.Bytes.ofData = function(b) {
	return new haxe.io.Bytes(b.length,b);
}
haxe.io.Bytes.prototype = {
	getData: function() {
		return this.b;
	}
	,toHex: function() {
		var s = new StringBuf();
		var chars = [];
		var str = "0123456789abcdef";
		var _g1 = 0, _g = str.length;
		while(_g1 < _g) {
			var i = _g1++;
			chars.push(HxOverrides.cca(str,i));
		}
		var _g1 = 0, _g = this.length;
		while(_g1 < _g) {
			var i = _g1++;
			var c = this.b[i];
			s.b += String.fromCharCode(chars[c >> 4]);
			s.b += String.fromCharCode(chars[c & 15]);
		}
		return s.b;
	}
	,toString: function() {
		return this.readString(0,this.length);
	}
	,readString: function(pos,len) {
		if(pos < 0 || len < 0 || pos + len > this.length) throw haxe.io.Error.OutsideBounds;
		var s = "";
		var b = this.b;
		var fcc = String.fromCharCode;
		var i = pos;
		var max = pos + len;
		while(i < max) {
			var c = b[i++];
			if(c < 128) {
				if(c == 0) break;
				s += fcc(c);
			} else if(c < 224) s += fcc((c & 63) << 6 | b[i++] & 127); else if(c < 240) {
				var c2 = b[i++];
				s += fcc((c & 31) << 12 | (c2 & 127) << 6 | b[i++] & 127);
			} else {
				var c2 = b[i++];
				var c3 = b[i++];
				s += fcc((c & 15) << 18 | (c2 & 127) << 12 | c3 << 6 & 127 | b[i++] & 127);
			}
		}
		return s;
	}
	,compare: function(other) {
		var b1 = this.b;
		var b2 = other.b;
		var len = this.length < other.length?this.length:other.length;
		var _g = 0;
		while(_g < len) {
			var i = _g++;
			if(b1[i] != b2[i]) return b1[i] - b2[i];
		}
		return this.length - other.length;
	}
	,sub: function(pos,len) {
		if(pos < 0 || len < 0 || pos + len > this.length) throw haxe.io.Error.OutsideBounds;
		return new haxe.io.Bytes(len,this.b.slice(pos,pos + len));
	}
	,blit: function(pos,src,srcpos,len) {
		if(pos < 0 || srcpos < 0 || len < 0 || pos + len > this.length || srcpos + len > src.length) throw haxe.io.Error.OutsideBounds;
		var b1 = this.b;
		var b2 = src.b;
		if(b1 == b2 && pos > srcpos) {
			var i = len;
			while(i > 0) {
				i--;
				b1[i + pos] = b2[i + srcpos];
			}
			return;
		}
		var _g = 0;
		while(_g < len) {
			var i = _g++;
			b1[i + pos] = b2[i + srcpos];
		}
	}
	,set: function(pos,v) {
		this.b[pos] = v & 255;
	}
	,get: function(pos) {
		return this.b[pos];
	}
	,b: null
	,length: null
	,__class__: haxe.io.Bytes
}
haxe.io.BytesBuffer = $hxClasses["haxe.io.BytesBuffer"] = function() {
	this.b = new Array();
};
haxe.io.BytesBuffer.__name__ = ["haxe","io","BytesBuffer"];
haxe.io.BytesBuffer.prototype = {
	getBytes: function() {
		var bytes = new haxe.io.Bytes(this.b.length,this.b);
		this.b = null;
		return bytes;
	}
	,addBytes: function(src,pos,len) {
		if(pos < 0 || len < 0 || pos + len > src.length) throw haxe.io.Error.OutsideBounds;
		var b1 = this.b;
		var b2 = src.b;
		var _g1 = pos, _g = pos + len;
		while(_g1 < _g) {
			var i = _g1++;
			this.b.push(b2[i]);
		}
	}
	,add: function(src) {
		var b1 = this.b;
		var b2 = src.b;
		var _g1 = 0, _g = src.length;
		while(_g1 < _g) {
			var i = _g1++;
			this.b.push(b2[i]);
		}
	}
	,addByte: function($byte) {
		this.b.push($byte);
	}
	,b: null
	,__class__: haxe.io.BytesBuffer
}
haxe.io.Eof = $hxClasses["haxe.io.Eof"] = function() {
};
haxe.io.Eof.__name__ = ["haxe","io","Eof"];
haxe.io.Eof.prototype = {
	toString: function() {
		return "Eof";
	}
	,__class__: haxe.io.Eof
}
haxe.io.Error = $hxClasses["haxe.io.Error"] = { __ename__ : ["haxe","io","Error"], __constructs__ : ["Blocked","Overflow","OutsideBounds","Custom"] }
haxe.io.Error.Blocked = ["Blocked",0];
haxe.io.Error.Blocked.toString = $estr;
haxe.io.Error.Blocked.__enum__ = haxe.io.Error;
haxe.io.Error.Overflow = ["Overflow",1];
haxe.io.Error.Overflow.toString = $estr;
haxe.io.Error.Overflow.__enum__ = haxe.io.Error;
haxe.io.Error.OutsideBounds = ["OutsideBounds",2];
haxe.io.Error.OutsideBounds.toString = $estr;
haxe.io.Error.OutsideBounds.__enum__ = haxe.io.Error;
haxe.io.Error.Custom = function(e) { var $x = ["Custom",3,e]; $x.__enum__ = haxe.io.Error; $x.toString = $estr; return $x; }
haxe.io.Input = $hxClasses["haxe.io.Input"] = function() { }
haxe.io.Input.__name__ = ["haxe","io","Input"];
haxe.io.Input.prototype = {
	getDoubleSig: function(bytes) {
		return Std.parseInt((((bytes[1] & 15) << 16 | bytes[2] << 8 | bytes[3]) * Math.pow(2,32)).toString()) + Std.parseInt(((bytes[4] >> 7) * Math.pow(2,31)).toString()) + Std.parseInt(((bytes[4] & 127) << 24 | bytes[5] << 16 | bytes[6] << 8 | bytes[7]).toString());
	}
	,readString: function(len) {
		var b = haxe.io.Bytes.alloc(len);
		this.readFullBytes(b,0,len);
		return b.toString();
	}
	,readInt32: function() {
		var ch1 = this.readByte();
		var ch2 = this.readByte();
		var ch3 = this.readByte();
		var ch4 = this.readByte();
		return this.bigEndian?(ch1 << 8 | ch2) << 16 | (ch3 << 8 | ch4):(ch4 << 8 | ch3) << 16 | (ch2 << 8 | ch1);
	}
	,readUInt30: function() {
		var ch1 = this.readByte();
		var ch2 = this.readByte();
		var ch3 = this.readByte();
		var ch4 = this.readByte();
		if((this.bigEndian?ch1:ch4) >= 64) throw haxe.io.Error.Overflow;
		return this.bigEndian?ch4 | ch3 << 8 | ch2 << 16 | ch1 << 24:ch1 | ch2 << 8 | ch3 << 16 | ch4 << 24;
	}
	,readInt31: function() {
		var ch1, ch2, ch3, ch4;
		if(this.bigEndian) {
			ch4 = this.readByte();
			ch3 = this.readByte();
			ch2 = this.readByte();
			ch1 = this.readByte();
		} else {
			ch1 = this.readByte();
			ch2 = this.readByte();
			ch3 = this.readByte();
			ch4 = this.readByte();
		}
		if((ch4 & 128) == 0 != ((ch4 & 64) == 0)) throw haxe.io.Error.Overflow;
		return ch1 | ch2 << 8 | ch3 << 16 | ch4 << 24;
	}
	,readUInt24: function() {
		var ch1 = this.readByte();
		var ch2 = this.readByte();
		var ch3 = this.readByte();
		return this.bigEndian?ch3 | ch2 << 8 | ch1 << 16:ch1 | ch2 << 8 | ch3 << 16;
	}
	,readInt24: function() {
		var ch1 = this.readByte();
		var ch2 = this.readByte();
		var ch3 = this.readByte();
		var n = this.bigEndian?ch3 | ch2 << 8 | ch1 << 16:ch1 | ch2 << 8 | ch3 << 16;
		if((n & 8388608) != 0) return n - 16777216;
		return n;
	}
	,readUInt16: function() {
		var ch1 = this.readByte();
		var ch2 = this.readByte();
		return this.bigEndian?ch2 | ch1 << 8:ch1 | ch2 << 8;
	}
	,readInt16: function() {
		var ch1 = this.readByte();
		var ch2 = this.readByte();
		var n = this.bigEndian?ch2 | ch1 << 8:ch1 | ch2 << 8;
		if((n & 32768) != 0) return n - 65536;
		return n;
	}
	,readInt8: function() {
		var n = this.readByte();
		if(n >= 128) return n - 256;
		return n;
	}
	,readDouble: function() {
		var bytes = [];
		bytes.push(this.readByte());
		bytes.push(this.readByte());
		bytes.push(this.readByte());
		bytes.push(this.readByte());
		bytes.push(this.readByte());
		bytes.push(this.readByte());
		bytes.push(this.readByte());
		bytes.push(this.readByte());
		if(this.bigEndian) bytes.reverse();
		var sign = 1 - (bytes[0] >> 7 << 1);
		var exp = (bytes[0] << 4 & 2047 | bytes[1] >> 4) - 1023;
		var sig = this.getDoubleSig(bytes);
		if(sig == 0 && exp == -1023) return 0.0;
		return sign * (1.0 + Math.pow(2,-52) * sig) * Math.pow(2,exp);
	}
	,readFloat: function() {
		var bytes = [];
		bytes.push(this.readByte());
		bytes.push(this.readByte());
		bytes.push(this.readByte());
		bytes.push(this.readByte());
		if(this.bigEndian) bytes.reverse();
		var sign = 1 - (bytes[0] >> 7 << 1);
		var exp = (bytes[0] << 1 & 255 | bytes[1] >> 7) - 127;
		var sig = (bytes[1] & 127) << 16 | bytes[2] << 8 | bytes[3];
		if(sig == 0 && exp == -127) return 0.0;
		return sign * (1 + Math.pow(2,-23) * sig) * Math.pow(2,exp);
	}
	,readLine: function() {
		var buf = new StringBuf();
		var last;
		var s;
		try {
			while((last = this.readByte()) != 10) buf.b += String.fromCharCode(last);
			s = buf.b;
			if(HxOverrides.cca(s,s.length - 1) == 13) s = HxOverrides.substr(s,0,-1);
		} catch( e ) {
			if( js.Boot.__instanceof(e,haxe.io.Eof) ) {
				s = buf.b;
				if(s.length == 0) throw e;
			} else throw(e);
		}
		return s;
	}
	,readUntil: function(end) {
		var buf = new StringBuf();
		var last;
		while((last = this.readByte()) != end) buf.b += String.fromCharCode(last);
		return buf.b;
	}
	,read: function(nbytes) {
		var s = haxe.io.Bytes.alloc(nbytes);
		var p = 0;
		while(nbytes > 0) {
			var k = this.readBytes(s,p,nbytes);
			if(k == 0) throw haxe.io.Error.Blocked;
			p += k;
			nbytes -= k;
		}
		return s;
	}
	,readFullBytes: function(s,pos,len) {
		while(len > 0) {
			var k = this.readBytes(s,pos,len);
			pos += k;
			len -= k;
		}
	}
	,readAll: function(bufsize) {
		if(bufsize == null) bufsize = 16384;
		var buf = haxe.io.Bytes.alloc(bufsize);
		var total = new haxe.io.BytesBuffer();
		try {
			while(true) {
				var len = this.readBytes(buf,0,bufsize);
				if(len == 0) throw haxe.io.Error.Blocked;
				total.addBytes(buf,0,len);
			}
		} catch( e ) {
			if( js.Boot.__instanceof(e,haxe.io.Eof) ) {
			} else throw(e);
		}
		return total.getBytes();
	}
	,setEndian: function(b) {
		this.bigEndian = b;
		return b;
	}
	,close: function() {
	}
	,readBytes: function(s,pos,len) {
		var k = len;
		var b = s.b;
		if(pos < 0 || len < 0 || pos + len > s.length) throw haxe.io.Error.OutsideBounds;
		while(k > 0) {
			b[pos] = this.readByte();
			pos++;
			k--;
		}
		return len;
	}
	,readByte: function() {
		return (function($this) {
			var $r;
			throw "Not implemented";
			return $r;
		}(this));
	}
	,bigEndian: null
	,__class__: haxe.io.Input
	,__properties__: {set_bigEndian:"setEndian"}
}
haxe.io.Output = $hxClasses["haxe.io.Output"] = function() { }
haxe.io.Output.__name__ = ["haxe","io","Output"];
haxe.io.Output.prototype = {
	writeString: function(s) {
		var b = haxe.io.Bytes.ofString(s);
		this.writeFullBytes(b,0,b.length);
	}
	,writeInput: function(i,bufsize) {
		if(bufsize == null) bufsize = 4096;
		var buf = haxe.io.Bytes.alloc(bufsize);
		try {
			while(true) {
				var len = i.readBytes(buf,0,bufsize);
				if(len == 0) throw haxe.io.Error.Blocked;
				var p = 0;
				while(len > 0) {
					var k = this.writeBytes(buf,p,len);
					if(k == 0) throw haxe.io.Error.Blocked;
					p += k;
					len -= k;
				}
			}
		} catch( e ) {
			if( js.Boot.__instanceof(e,haxe.io.Eof) ) {
			} else throw(e);
		}
	}
	,prepare: function(nbytes) {
	}
	,writeInt32: function(x) {
		if(this.bigEndian) {
			this.writeByte(haxe.Int32.toInt(x >>> 24));
			this.writeByte(haxe.Int32.toInt(x >>> 16) & 255);
			this.writeByte(haxe.Int32.toInt(x >>> 8) & 255);
			this.writeByte(haxe.Int32.toInt(x & (255 | 0)));
		} else {
			this.writeByte(haxe.Int32.toInt(x & (255 | 0)));
			this.writeByte(haxe.Int32.toInt(x >>> 8) & 255);
			this.writeByte(haxe.Int32.toInt(x >>> 16) & 255);
			this.writeByte(haxe.Int32.toInt(x >>> 24));
		}
	}
	,writeUInt30: function(x) {
		if(x < 0 || x >= 1073741824) throw haxe.io.Error.Overflow;
		if(this.bigEndian) {
			this.writeByte(x >>> 24);
			this.writeByte(x >> 16 & 255);
			this.writeByte(x >> 8 & 255);
			this.writeByte(x & 255);
		} else {
			this.writeByte(x & 255);
			this.writeByte(x >> 8 & 255);
			this.writeByte(x >> 16 & 255);
			this.writeByte(x >>> 24);
		}
	}
	,writeInt31: function(x) {
		if(x < -1073741824 || x >= 1073741824) throw haxe.io.Error.Overflow;
		if(this.bigEndian) {
			this.writeByte(x >>> 24);
			this.writeByte(x >> 16 & 255);
			this.writeByte(x >> 8 & 255);
			this.writeByte(x & 255);
		} else {
			this.writeByte(x & 255);
			this.writeByte(x >> 8 & 255);
			this.writeByte(x >> 16 & 255);
			this.writeByte(x >>> 24);
		}
	}
	,writeUInt24: function(x) {
		if(x < 0 || x >= 16777216) throw haxe.io.Error.Overflow;
		if(this.bigEndian) {
			this.writeByte(x >> 16);
			this.writeByte(x >> 8 & 255);
			this.writeByte(x & 255);
		} else {
			this.writeByte(x & 255);
			this.writeByte(x >> 8 & 255);
			this.writeByte(x >> 16);
		}
	}
	,writeInt24: function(x) {
		if(x < -8388608 || x >= 8388608) throw haxe.io.Error.Overflow;
		this.writeUInt24(x & 16777215);
	}
	,writeUInt16: function(x) {
		if(x < 0 || x >= 65536) throw haxe.io.Error.Overflow;
		if(this.bigEndian) {
			this.writeByte(x >> 8);
			this.writeByte(x & 255);
		} else {
			this.writeByte(x & 255);
			this.writeByte(x >> 8);
		}
	}
	,writeInt16: function(x) {
		if(x < -32768 || x >= 32768) throw haxe.io.Error.Overflow;
		this.writeUInt16(x & 65535);
	}
	,writeInt8: function(x) {
		if(x < -128 || x >= 128) throw haxe.io.Error.Overflow;
		this.writeByte(x & 255);
	}
	,writeDouble: function(x) {
		if(x == 0.0) {
			this.writeByte(0);
			this.writeByte(0);
			this.writeByte(0);
			this.writeByte(0);
			this.writeByte(0);
			this.writeByte(0);
			this.writeByte(0);
			this.writeByte(0);
			return;
		}
		var exp = Math.floor(Math.log(Math.abs(x)) / haxe.io.Output.LN2);
		var sig = Math.floor(Math.abs(x) / Math.pow(2,exp) * Math.pow(2,52));
		var sig_h = sig & 34359738367;
		var sig_l = Math.floor(sig / Math.pow(2,32));
		var b1 = exp + 1023 >> 4 | (exp > 0?x < 0?128:64:x < 0?128:0), b2 = exp + 1023 << 4 & 255 | sig_l >> 16 & 15, b3 = sig_l >> 8 & 255, b4 = sig_l & 255, b5 = sig_h >> 24 & 255, b6 = sig_h >> 16 & 255, b7 = sig_h >> 8 & 255, b8 = sig_h & 255;
		if(this.bigEndian) {
			this.writeByte(b8);
			this.writeByte(b7);
			this.writeByte(b6);
			this.writeByte(b5);
			this.writeByte(b4);
			this.writeByte(b3);
			this.writeByte(b2);
			this.writeByte(b1);
		} else {
			this.writeByte(b1);
			this.writeByte(b2);
			this.writeByte(b3);
			this.writeByte(b4);
			this.writeByte(b5);
			this.writeByte(b6);
			this.writeByte(b7);
			this.writeByte(b8);
		}
	}
	,writeFloat: function(x) {
		if(x == 0.0) {
			this.writeByte(0);
			this.writeByte(0);
			this.writeByte(0);
			this.writeByte(0);
			return;
		}
		var exp = Math.floor(Math.log(Math.abs(x)) / haxe.io.Output.LN2);
		var sig = Math.floor(Math.abs(x) / Math.pow(2,exp) * 8388608) & 8388607;
		var b1 = exp + 127 >> 1 | (exp > 0?x < 0?128:64:x < 0?128:0), b2 = exp + 127 << 7 & 255 | sig >> 16 & 127, b3 = sig >> 8 & 255, b4 = sig & 255;
		if(this.bigEndian) {
			this.writeByte(b4);
			this.writeByte(b3);
			this.writeByte(b2);
			this.writeByte(b1);
		} else {
			this.writeByte(b1);
			this.writeByte(b2);
			this.writeByte(b3);
			this.writeByte(b4);
		}
	}
	,writeFullBytes: function(s,pos,len) {
		while(len > 0) {
			var k = this.writeBytes(s,pos,len);
			pos += k;
			len -= k;
		}
	}
	,write: function(s) {
		var l = s.length;
		var p = 0;
		while(l > 0) {
			var k = this.writeBytes(s,p,l);
			if(k == 0) throw haxe.io.Error.Blocked;
			p += k;
			l -= k;
		}
	}
	,setEndian: function(b) {
		this.bigEndian = b;
		return b;
	}
	,close: function() {
	}
	,flush: function() {
	}
	,writeBytes: function(s,pos,len) {
		var k = len;
		var b = s.b;
		if(pos < 0 || len < 0 || pos + len > s.length) throw haxe.io.Error.OutsideBounds;
		while(k > 0) {
			this.writeByte(b[pos]);
			pos++;
			k--;
		}
		return len;
	}
	,writeByte: function(c) {
		throw "Not implemented";
	}
	,bigEndian: null
	,__class__: haxe.io.Output
	,__properties__: {set_bigEndian:"setEndian"}
}
if(!haxe.xml) haxe.xml = {}
haxe.xml.Parser = $hxClasses["haxe.xml.Parser"] = function() { }
haxe.xml.Parser.__name__ = ["haxe","xml","Parser"];
haxe.xml.Parser.parse = function(str) {
	var doc = Xml.createDocument();
	haxe.xml.Parser.doParse(str,0,doc);
	return doc;
}
haxe.xml.Parser.doParse = function(str,p,parent) {
	if(p == null) p = 0;
	var xml = null;
	var state = 1;
	var next = 1;
	var aname = null;
	var start = 0;
	var nsubs = 0;
	var nbrackets = 0;
	var c = str.charCodeAt(p);
	while(!(c != c)) {
		switch(state) {
		case 0:
			switch(c) {
			case 10:case 13:case 9:case 32:
				break;
			default:
				state = next;
				continue;
			}
			break;
		case 1:
			switch(c) {
			case 60:
				state = 0;
				next = 2;
				break;
			default:
				start = p;
				state = 13;
				continue;
			}
			break;
		case 13:
			if(c == 60) {
				var child = Xml.createPCData(HxOverrides.substr(str,start,p - start));
				parent.addChild(child);
				nsubs++;
				state = 0;
				next = 2;
			}
			break;
		case 17:
			if(c == 93 && str.charCodeAt(p + 1) == 93 && str.charCodeAt(p + 2) == 62) {
				var child = Xml.createCData(HxOverrides.substr(str,start,p - start));
				parent.addChild(child);
				nsubs++;
				p += 2;
				state = 1;
			}
			break;
		case 2:
			switch(c) {
			case 33:
				if(str.charCodeAt(p + 1) == 91) {
					p += 2;
					if(HxOverrides.substr(str,p,6).toUpperCase() != "CDATA[") throw "Expected <![CDATA[";
					p += 5;
					state = 17;
					start = p + 1;
				} else if(str.charCodeAt(p + 1) == 68 || str.charCodeAt(p + 1) == 100) {
					if(HxOverrides.substr(str,p + 2,6).toUpperCase() != "OCTYPE") throw "Expected <!DOCTYPE";
					p += 8;
					state = 16;
					start = p + 1;
				} else if(str.charCodeAt(p + 1) != 45 || str.charCodeAt(p + 2) != 45) throw "Expected <!--"; else {
					p += 2;
					state = 15;
					start = p + 1;
				}
				break;
			case 63:
				state = 14;
				start = p;
				break;
			case 47:
				if(parent == null) throw "Expected node name";
				start = p + 1;
				state = 0;
				next = 10;
				break;
			default:
				state = 3;
				start = p;
				continue;
			}
			break;
		case 3:
			if(!(c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c == 58 || c == 46 || c == 95 || c == 45)) {
				if(p == start) throw "Expected node name";
				xml = Xml.createElement(HxOverrides.substr(str,start,p - start));
				parent.addChild(xml);
				state = 0;
				next = 4;
				continue;
			}
			break;
		case 4:
			switch(c) {
			case 47:
				state = 11;
				nsubs++;
				break;
			case 62:
				state = 9;
				nsubs++;
				break;
			default:
				state = 5;
				start = p;
				continue;
			}
			break;
		case 5:
			if(!(c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c == 58 || c == 46 || c == 95 || c == 45)) {
				var tmp;
				if(start == p) throw "Expected attribute name";
				tmp = HxOverrides.substr(str,start,p - start);
				aname = tmp;
				if(xml.exists(aname)) throw "Duplicate attribute";
				state = 0;
				next = 6;
				continue;
			}
			break;
		case 6:
			switch(c) {
			case 61:
				state = 0;
				next = 7;
				break;
			default:
				throw "Expected =";
			}
			break;
		case 7:
			switch(c) {
			case 34:case 39:
				state = 8;
				start = p;
				break;
			default:
				throw "Expected \"";
			}
			break;
		case 8:
			if(c == str.charCodeAt(start)) {
				var val = HxOverrides.substr(str,start + 1,p - start - 1);
				xml.set(aname,val);
				state = 0;
				next = 4;
			}
			break;
		case 9:
			p = haxe.xml.Parser.doParse(str,p,xml);
			start = p;
			state = 1;
			break;
		case 11:
			switch(c) {
			case 62:
				state = 1;
				break;
			default:
				throw "Expected >";
			}
			break;
		case 12:
			switch(c) {
			case 62:
				if(nsubs == 0) parent.addChild(Xml.createPCData(""));
				return p;
			default:
				throw "Expected >";
			}
			break;
		case 10:
			if(!(c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c == 58 || c == 46 || c == 95 || c == 45)) {
				if(start == p) throw "Expected node name";
				var v = HxOverrides.substr(str,start,p - start);
				if(v != parent.getNodeName()) throw "Expected </" + parent.getNodeName() + ">";
				state = 0;
				next = 12;
				continue;
			}
			break;
		case 15:
			if(c == 45 && str.charCodeAt(p + 1) == 45 && str.charCodeAt(p + 2) == 62) {
				parent.addChild(Xml.createComment(HxOverrides.substr(str,start,p - start)));
				p += 2;
				state = 1;
			}
			break;
		case 16:
			if(c == 91) nbrackets++; else if(c == 93) nbrackets--; else if(c == 62 && nbrackets == 0) {
				parent.addChild(Xml.createDocType(HxOverrides.substr(str,start,p - start)));
				state = 1;
			}
			break;
		case 14:
			if(c == 63 && str.charCodeAt(p + 1) == 62) {
				p++;
				var str1 = HxOverrides.substr(str,start + 1,p - start - 2);
				parent.addChild(Xml.createProlog(str1));
				state = 1;
			}
			break;
		}
		c = str.charCodeAt(++p);
	}
	if(state == 1) {
		start = p;
		state = 13;
	}
	if(state == 13) {
		if(p != start || nsubs == 0) parent.addChild(Xml.createPCData(HxOverrides.substr(str,start,p - start)));
		return p;
	}
	throw "Unexpected end";
}
haxe.xml.Parser.isValidChar = function(c) {
	return c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c == 58 || c == 46 || c == 95 || c == 45;
}
var js = js || {}
js.Boot = $hxClasses["js.Boot"] = function() { }
js.Boot.__name__ = ["js","Boot"];
js.Boot.__unhtml = function(s) {
	return s.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;");
}
js.Boot.__trace = function(v,i) {
	var msg = i != null?i.fileName + ":" + i.lineNumber + ": ":"";
	msg += js.Boot.__string_rec(v,"");
	var d;
	if(typeof(document) != "undefined" && (d = document.getElementById("haxe:trace")) != null) d.innerHTML += js.Boot.__unhtml(msg) + "<br/>"; else if(typeof(console) != "undefined" && console.log != null) console.log(msg);
}
js.Boot.__clear_trace = function() {
	var d = document.getElementById("haxe:trace");
	if(d != null) d.innerHTML = "";
}
js.Boot.isClass = function(o) {
	return o.__name__;
}
js.Boot.isEnum = function(e) {
	return e.__ename__;
}
js.Boot.getClass = function(o) {
	return o.__class__;
}
js.Boot.__string_rec = function(o,s) {
	if(o == null) return "null";
	if(s.length >= 5) return "<...>";
	var t = typeof(o);
	if(t == "function" && (o.__name__ || o.__ename__)) t = "object";
	switch(t) {
	case "object":
		if(o instanceof Array) {
			if(o.__enum__) {
				if(o.length == 2) return o[0];
				var str = o[0] + "(";
				s += "\t";
				var _g1 = 2, _g = o.length;
				while(_g1 < _g) {
					var i = _g1++;
					if(i != 2) str += "," + js.Boot.__string_rec(o[i],s); else str += js.Boot.__string_rec(o[i],s);
				}
				return str + ")";
			}
			var l = o.length;
			var i;
			var str = "[";
			s += "\t";
			var _g = 0;
			while(_g < l) {
				var i1 = _g++;
				str += (i1 > 0?",":"") + js.Boot.__string_rec(o[i1],s);
			}
			str += "]";
			return str;
		}
		var tostr;
		try {
			tostr = o.toString;
		} catch( e ) {
			return "???";
		}
		if(tostr != null && tostr != Object.toString) {
			var s2 = o.toString();
			if(s2 != "[object Object]") return s2;
		}
		var k = null;
		var str = "{\n";
		s += "\t";
		var hasp = o.hasOwnProperty != null;
		for( var k in o ) { ;
		if(hasp && !o.hasOwnProperty(k)) {
			continue;
		}
		if(k == "prototype" || k == "__class__" || k == "__super__" || k == "__interfaces__" || k == "__properties__") {
			continue;
		}
		if(str.length != 2) str += ", \n";
		str += s + k + " : " + js.Boot.__string_rec(o[k],s);
		}
		s = s.substring(1);
		str += "\n" + s + "}";
		return str;
	case "function":
		return "<function>";
	case "string":
		return o;
	default:
		return String(o);
	}
}
js.Boot.__interfLoop = function(cc,cl) {
	if(cc == null) return false;
	if(cc == cl) return true;
	var intf = cc.__interfaces__;
	if(intf != null) {
		var _g1 = 0, _g = intf.length;
		while(_g1 < _g) {
			var i = _g1++;
			var i1 = intf[i];
			if(i1 == cl || js.Boot.__interfLoop(i1,cl)) return true;
		}
	}
	return js.Boot.__interfLoop(cc.__super__,cl);
}
js.Boot.__instanceof = function(o,cl) {
	try {
		if(o instanceof cl) {
			if(cl == Array) return o.__enum__ == null;
			return true;
		}
		if(js.Boot.__interfLoop(o.__class__,cl)) return true;
	} catch( e ) {
		if(cl == null) return false;
	}
	switch(cl) {
	case Int:
		return Math.ceil(o%2147483648.0) === o;
	case Float:
		return typeof(o) == "number";
	case Bool:
		return o === true || o === false;
	case String:
		return typeof(o) == "string";
	case Dynamic:
		return true;
	default:
		if(o == null) return false;
		if(cl == Class && o.__name__ != null) return true; else null;
		if(cl == Enum && o.__ename__ != null) return true; else null;
		return o.__enum__ == cl;
	}
}
js.Boot.__cast = function(o,t) {
	if(js.Boot.__instanceof(o,t)) return o; else throw "Cannot cast " + Std.string(o) + " to " + Std.string(t);
}
js.Lib = $hxClasses["js.Lib"] = function() { }
js.Lib.__name__ = ["js","Lib"];
js.Lib.document = null;
js.Lib.window = null;
js.Lib.debug = function() {
	debugger;
}
js.Lib.alert = function(v) {
	alert(js.Boot.__string_rec(v,""));
}
js.Lib.eval = function(code) {
	return eval(code);
}
js.Lib.setErrorHandler = function(f) {
	js.Lib.onerror = f;
}
function $iterator(o) { if( o instanceof Array ) return function() { return HxOverrides.iter(o); }; return typeof(o.iterator) == 'function' ? $bind(o,o.iterator) : o.iterator; };
var $_;
function $bind(o,m) { var f = function(){ return f.method.apply(f.scope, arguments); }; f.scope = o; f.method = m; return f; };
if(Array.prototype.indexOf) HxOverrides.remove = function(a,o) {
	var i = a.indexOf(o);
	if(i == -1) return false;
	a.splice(i,1);
	return true;
}; else null;
Math.__name__ = ["Math"];
Math.NaN = Number.NaN;
Math.NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY;
Math.POSITIVE_INFINITY = Number.POSITIVE_INFINITY;
$hxClasses.Math = Math;
Math.isFinite = function(i) {
	return isFinite(i);
};
Math.isNaN = function(i) {
	return isNaN(i);
};
String.prototype.__class__ = $hxClasses.String = String;
String.__name__ = ["String"];
Array.prototype.__class__ = $hxClasses.Array = Array;
Array.__name__ = ["Array"];
Date.prototype.__class__ = $hxClasses.Date = Date;
Date.__name__ = ["Date"];
var Int = $hxClasses.Int = { __name__ : ["Int"]};
var Dynamic = $hxClasses.Dynamic = { __name__ : ["Dynamic"]};
var Float = $hxClasses.Float = Number;
Float.__name__ = ["Float"];
var Bool = $hxClasses.Bool = Boolean;
Bool.__ename__ = ["Bool"];
var Class = $hxClasses.Class = { __name__ : ["Class"]};
var Enum = { };
var Void = $hxClasses.Void = { __ename__ : ["Void"]};
Xml.Element = "element";
Xml.PCData = "pcdata";
Xml.CData = "cdata";
Xml.Comment = "comment";
Xml.DocType = "doctype";
Xml.Prolog = "prolog";
Xml.Document = "document";
if(typeof(JSON) != "undefined") haxe.Json = JSON;
haxe.Resource.content = [{ name : "strings_quizzes.ru.json", data : "s97598:ewoJIm1ldGEiOiB7CgkJImxhbmciOiAicnUiCgl9LAoJIndvcmRzIjogewoJCSJzeW50YXhfbWF0aCI6ICLQvNCw0YIuIiwKCQkic3ludGF4X3N0cmluZyI6ICLRgtC10LrRgdGCIiwKCgkJImVxdWl2YWxlbnRfbGl0ZXJhbCI6ICLQv9C%0YHQuNC80LLQvtC70YzQvdC%INGA0LDQstC10L0iLAoJCSJlcXVpdmFsZW50X3N5bWJvbGljIjogItC80LDRgtC10LzQsNGC0LjRh9C10YHQutC4INGA0LDQstC10L0iLAoJCSJlcXVpdmFsZW50X2VxdWF0aW9ucyI6ICLRjdC60LLQuNCy0LDQu9C10L3RgtC90YvQtSDRg9GA0LDQstC90LXQvdC40Y8iLAoJCSJlcXVpdmFsZW50X2FsbCI6ICLQm9GO0LHQvtC5INC%0YLQstC10YIiLAoJCSJlcXVpdmFsZW50X2Z1bmN0aW9uIjogItGE0YPQvdC60YbQuNGPINC%0YbQtdC90LrQuCIsCgoJCSJjaGVja19pbnRlZ2VyX2Zvcm0iOiAi0LjQvNC10LXRgiDRhtC10LvQvtGH0LjRgdC70LXQvdC90YvQuSDQstC40LQiLAoJCSJjaGVja19mcmFjdGlvbl9mb3JtIjogItC40LzQtdC10YIg0LTRgNC%0LHQvdGL0Lkg0LLQuNC0IiwKCQkiY2hlY2tfcG9seW5vbWlhbF9mb3JtIjogItC40LzQtdC10YIg0L:QvtC70LjQvdC%0LzQuNCw0LvRjNC90YvQuSDQstC40LQiLAoJCSJjaGVja19yYXRpb25hbF9mdW5jdGlvbl9mb3JtIjogItC40LzQtdC10YIg0LLQuNC0INC00YDQvtCx0L3Qvi3RgNCw0YbQuNC%0L3QsNC70YzQvdC%0Lkg0YTRg9C90LrRhtC40LgiLAoJCSJjaGVja19lbGVtZW50YWxfZnVuY3Rpb25fZm9ybSI6ICLRj9Cy0LvRj9C10YLRgdGPINGB0L7QstC%0LrRg9C:0L3QvtGB0YLRjNGOINGN0LvQtdC80LXQvdGC0LDRgNC90YvRhSDRhNGD0L3QutGG0LjQuSIsCgkJImNoZWNrX3NjaWVudGlmaWNfbm90YXRpb24iOiAi0LjQvNC10LXRgiDRjdC60YHQv9C%0L3QtdC90YbQuNCw0LvRjNC90L7QtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSIsCgkJImNoZWNrX3NpbXBsaWZpZWQiOiAi0LjQvNC10LXRgiDRg9C:0YDQvtGJ0LXQvdC90YvQuSDQstC40LQiLAoJCSJjaGVja19leHBhbmRlZCI6ICLQuNC80LXQtdGCINGA0LDQt9Cy0LXRgNC90YPRgtGL0Lkg0LLQuNC0IiwKCQkiY2hlY2tfZmFjdG9yaXplZCI6ICLQuNC80LXQtdGCINGA0LDQt9C70L7QttC10L3QvdGL0Lkg0L3QsCDQvNC90L7QttC40YLQtdC70Lgg0LLQuNC0IiwKCQkiY2hlY2tfcmF0aW9uYWxpemVkIjogItC:0YDQuNCy0L7QtNC40YLRgdGPINC6INGA0LDRhtC40L7QvdCw0LvRjNC90L7QvNGDINCy0LjQtNGDIiwKCQkiY2hlY2tfbm9fY29tbW9uX2ZhY3RvciI6ICLQvdC1INC40LzQtdC10YIg0L7QsdGJ0LjRhSDQtNC10LvQuNGC0LXQu9C10LkiLAoJCSJjaGVja19taW5pbWFsX3JhZGljYW5kcyI6ICLQuNC80LXQtdGCINC80LjQvdC40LzQsNC70YzQvdGL0LUg0L:QvtC00LrQvtGA0LXQvdC90YvQtSDQstC10LvQuNGH0LjQvdGLIiwKCQkiY2hlY2tfZGl2aXNpYmxlIjogItC00LXQu9C40YLRgdGPINC90LAiLAoJCSJjaGVja19jb21tb25fZGVub21pbmF0b3IiOiAi0LjQvNC10LXRgiDQvtC00LjQvSDQvtCx0YnQuNC5INC30L3QsNC80LXQvdCw0YLQtdC70YwiLAoJCSJjaGVja191bml0IjogItC40LzQtdC10YIg0LXQtNC40L3QuNGG0YMsINGN0LrQstC40LLQsNC70LXQvdGC0L3Rg9GOIiwKCQkiY2hlY2tfdW5pdF9saXRlcmFsIjogItC40LzQtdC10YIg0LXQtNC40L3QuNGG0YMsINC:0L7RgdC40LzQstC%0LvRjNC90L4g0YDQsNCy0L3Rg9GOIiwKCQkiY2hlY2tfcHJlY2lzaW9uIjogItC40LzQtdC10YIiLAoJCSJjaGVja19zeW1ib2xpYyI6ICLRj9Cy0LvRj9C10YLRgdGPINGB0LjQvNCy0L7Qu9GM0L3Ri9C8IiwKCQkiY2hlY2tfZXF1aXZhbGVudF91bml0cyI6ICLQuNC80LXQtdGCINGN0LrQstC40LLQsNC70LXQvdGC0L3Ri9C1INC10LTQuNC90LjRhtGLIiwKCgkJImxpc3QiOiAi0YHQv9C40YHQvtC6IiwKCQkib3JkZXJtYXR0ZXJzIjogItC:0L7RgNGP0LTQvtC6INC40LzQtdC10YIg0LfQvdCw0YfQtdC90LjQtSIsCgkJIm9yZGVyZG9lc250bWF0dGVyIjogItC:0L7RgNGP0LTQvtC6INC90LUg0LjQvNC10LXRgiDQt9C90LDRh9C10L3QuNGPIiwKCQkicXVlc3Rpb254bWwiOiAiWE1MINCy0L7Qv9GA0L7RgdCwIiwKCQkiZ3JhbW1hcnVybCI6ICJVUkwg0LPRgNCw0LzQvNCw0YLQuNC60LgiLAoJCSJyZXNlcnZlZHdvcmRzIjogItC30LDRgNC10LfQtdGA0LLQuNGA0L7QstCw0L3QvdGL0LUg0YHQu9C%0LLQsCIsCgkJImZvcmNlYnJhY2tldHMiOiAi0KHQv9C40YHQutC4INC%0LHRj9C30LDRgtC10LvRjNC90L4g0LfQsNC60LvRjtGH0LDRjtGC0YHRjyDQsiDRhNC40LPRg9GA0L3Ri9C1INGB0LrQvtCx0LrQuCDCq3t9wrsuIiwKCQkiY29tbWFhc2l0ZW1zZXBhcmF0b3IiOiAi0JIg0LrQsNGH0LXRgdGC0LLQtSDRgNCw0LfQtNC10LvQuNGC0LXQu9GPINGN0LvQtdC80LXQvdGC0L7QsiDRgdC:0LjRgdC60LAg0YHQu9C10LTRg9C10YIg0LjRgdC:0L7Qu9GM0LfQvtCy0LDRgtGMINC30LDQv9GP0YLRg9GOIMKrLMK7LiIsCgkJImNvbmZpcm1pbXBvcnRkZXByZWNhdGVkIjogItCY0LzQv9C%0YDRgtC40YDQvtCy0LDRgtGMINCy0L7Qv9GA0L7RgT8gXG7QktC%0L:RgNC%0YEsINC60L7RgtC%0YDRi9C5INCy0Ysg0YHQvtCx0LjRgNCw0LXRgtC10YHRjCDQvtGC0LrRgNGL0YLRjCwg0YHQvtC00LXRgNC20LjRgiDQvdC10YDQtdC60L7QvNC10L3QtNGD0LXQvNGL0LUg0Y3Qu9C10LzQtdC90YLRiy4g0J:RgNC%0YbQtdGB0YEg0LjQvNC:0L7RgNGC0LAg0LzQvtC20LXRgiDQstC90LXRgdGC0Lgg0L3QtdC60L7RgtC%0YDRi9C1INC40LfQvNC10L3QtdC90LjRjyDQsiDRgNCw0LHQvtGC0YMg0LLQvtC:0YDQvtGB0LAuINCd0LDRgdGC0L7Rj9GC0LXQu9GM0L3QviDRgNC10LrQvtC80LXQvdC00YPQtdGC0YHRjyDRgtGJ0LDRgtC10LvRjNC90L4g0L:RgNC%0LLQtdGA0LjRgtGMINCy0L7Qv9GA0L7RgSDQv9C%0YHQu9C1INC40LzQv9C%0YDRgtCwLiIsCgkJImNvbXBhcmVzZXRzIjogItGB0YDQsNCy0L3QuNGC0Ywg0LrQsNC6INC80L3QvtC20LXRgdGC0LLQsCIsCgkJInJlbGF0aXZldG9sZXJhbmNlIjogItC%0YLQvdC%0YHQuNGC0LXQu9GM0L3Ri9C5INC00L7Qv9GD0YHQuiIsCgkJIm5vYnJhY2tldHNsaXN0IjogItGB0L:QuNGB0LrQuCDQsdC10Lcg0YHQutC%0LHQvtC6IiwKCgkJImdyYWRpbmdmdW5jdGlvbiI6ICLRhNGD0L3QutGG0LjRjyDQvtGG0LXQvdC60LgiLAoJCSJhZGRpdGlvbmFscHJvcGVydGllcyI6ICLQtNC%0L:QvtC70L3QuNGC0LXQu9GM0L3Ri9C1INGB0LLQvtC50YHRgtCy0LAiLAoJCSJzdHJ1Y3R1cmUiOiAi0YHRgtGA0YPQutGC0YPRgNCwIiwKCQkiZXhwbG9nIjogItGN0LrRgdC:Li:Qu9C%0LMuIiwKCQkidHJpZ29ub21ldHJpYyI6ICLRgtGA0LjQs9C%0L3QvtC80LXRgtGA0LjRh9C10YHQutCw0Y8iLAoJCSJoeXBlcmJvbGljIjogItCz0LjQv9C10YDQsdC%0LvQuNGH0LXRgdC60LDRjyIsCgkJInRvbGVyYW5jZSI6ICLQtNC%0L:Rg9GB0LoiLAoJCSJyZWxhdGl2ZSI6ICLQvtGC0L3QvtGB0LjRgtC10LvRjNC90YvQuSIsCgkJInByZWNpc2lvbiI6ICLRgtC%0YfQvdC%0YHRgtGMIiwKCQkiaW1wbGljaXRfdGltZXNfb3BlcmF0b3IiOiAi0YHQutGA0YvRgtGL0Lkg0L7Qv9C10YDQsNGC0L7RgCDRg9C80L3QvtC20LXQvdC40Y8iLAoJCSJ0aW1lc19vcGVyYXRvciI6ICLQvtC:0LXRgNCw0YLQvtGAINGD0LzQvdC%0LbQtdC90LjRjyIsCgkJImltYWdpbmFyeV91bml0IjogItC80L3QuNC80LDRjyDQtdC00LjQvdC40YbQsCIsCgkJIm1peGVkZnJhY3Rpb25zIjogItGB0LzQtdGI0LDQvdC90YvQtSDQtNGA0L7QsdC4IiwKCQkiY29uc3RhbnRzIjogItC:0L7RgdGC0L7Rj9C90L3Ri9C1IiwKCQkiZnVuY3Rpb25zIjogItGE0YPQvdC60YbQuNC4IiwKCQkidXNlcmZ1bmN0aW9ucyI6ICLRhNGD0L3QutGG0LjQuCDQv9C%0LvRjNC30L7QstCw0YLQtdC70Y8iLAoJCSJ1bml0cyI6ICLQtdC00LjQvdC40YbRiyIsCgkJInVuaXRwcmVmaXhlcyI6ICLQv9GA0LjRgdGC0LDQstC60Lgg0LXQtNC40L3QuNGGIiwKCQkic3ludGF4cGFyYW1zIjogItCy0LDRgNC40LDQvdGC0Ysg0YHQuNC90YLQsNC60YHQuNGB0LAiLAoKCQkiYXV0aG9yaW5nX2ZpZWxkX2J1dHRvbl90b29sdGlwIjogItCe0YLQutGA0YvRgtGMIFdpcmlzUXVpenplcyBTdHVkaW8iLAoJCSJhdXRob3JpbmdfZmllbGRfdGV4dF9maWVsZF9sYWJlbCI6ICLQn9GA0LDQstC40LvRjNC90YvQuSDQvtGC0LLQtdGCIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYWN0aXZpdHlfdGl0bGUiOiAiV2lyaXNRdWl6emVzIFN0dWRpbyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYWN0aXZpdHlfdGl0bGUiOiAi0JLQsNGA0LjQsNC90YLRiyDQstCy0L7QtNCwIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX2FjdGl2aXR5X3RpdGxlIjogItCS0LDRgNC40LDQvdGC0Ysg0L:RgNC%0LLQtdGA0LrQuCDRgdC%0L7RgtCy0LXRgtGB0YLQstC40Y8iLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19hY3Rpdml0eV90aXRsZSI6ICLQntC:0YDQtdC00LXQu9C40YLRjCDRgdC70YPRh9Cw0LnQvdGL0LUg0L:QtdGA0LXQvNC10L3QvdGL0LUg0Lgg0YTRg9C90LrRhtC40LgiLAoJCSJxdWl6emVzX3N0dWRpb19hdXhpbGlhcl9pbml0aWFsX2NvbnRlbnRfYWN0aXZpdHlfdGl0bGUiOiAi0J7Qv9GA0LXQtNC10LvQuNGC0Ywg0L3QsNGH0LDQu9GM0L3QvtC1INGB0L7QtNC10YDQttC40LzQvtC1INC00LvRjyDRgdGC0YPQtNC10L3RgtC%0LIiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX2FjdGl2aXR5X3RpdGxlIjogItCf0YDQvtCy0LXRgNC40YLRjCDQtNCw0L3QvdGL0Lkg0LLQvtC:0YDQvtGBIiwKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX2FjdGl2aXR5X3RpdGxlIjogItCS0LDRgNC40LDQvdGC0Ysg0L:RgNC%0LLQtdGA0LrQuCDRgdC%0L7RgtCy0LXRgtGB0YLQstC40Y8iLAoJCSJxdWl6emVzX3N0dWRpb192aWV3X3NvdXJjZV9hY3Rpdml0eV90aXRsZSI6ICLQn9GA0L7RgdC80L7RgtGAINC40YHRgtC%0YfQvdC40LrQsCDQstC%0L:RgNC%0YHQsCIsCgoJCSJxdWl6emVzX3N0dWRpb190b29sYmFyX2JhY2tfYnV0dG9uX3Rvb2x0aXAiOiAi0J3QsNC30LDQtCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rvb2xiYXJfdGVzdF9xdWVzdGlvbl9idXR0b25fdG9vbHRpcCI6ICLQn9GA0L7QstC10YDQuNGC0Ywg0LTQsNC90L3Ri9C5INCy0L7Qv9GA0L7RgSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rvb2xiYXJfaGVscF9idXR0b25fdG9vbHRpcCI6ICLQodC:0YDQsNCy0LrQsCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3NlbmRfZmVlZGJhY2tfbGFiZWwiOiAi0J7RgdGC0LDQstC40YLRjCDQvtGC0LfRi9CyIiwKCQkicXVpenplc19zdHVkaW9fdHJhaW5pbmdfbGFiZWwiOiAi0KDQtdCz0LjRgdGC0YDQsNGG0LjRjyDQvdCwINGD0YfQtdCx0L3Ri9C5INC60YPRgNGBIiwKCQkicXVpenplc19zdHVkaW9fd2Vic2l0ZV9sYWJlbCI6ICLQn9C%0YHQtdGC0LjRgtGMINC90LDRiCDQstC10LEt0YHQsNC50YIiLAoJCSJxdWl6emVzX3N0dWRpb19yZXBvcnRfaXNzdWVfbGFiZWwiOiAi0KHQvtC%0LHRidC40YLRjCDQviDQv9GA0L7QsdC70LXQvNC1IiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3Rvb2xiYXJfbW9yZV9vcHRpb25zX2Ryb3Bkb3duX3Rvb2x0aXAiOiAi0KTQsNC50LsiLAoJCSJxdWl6emVzX3N0dWRpb190b29sYmFyX21vcmVfb3B0aW9uc19kcm9wZG93bl9pbXBvcnRfbGFiZWwiOiAi0JjQvNC:0L7RgNGCIiwKCQkicXVpenplc19zdHVkaW9fdG9vbGJhcl9tb3JlX29wdGlvbnNfZHJvcGRvd25fZXhwb3J0X2xhYmVsIjogItCt0LrRgdC:0L7RgNGCIiwKCQkicXVpenplc19zdHVkaW9fdG9vbGJhcl9tb3JlX29wdGlvbnNfZHJvcGRvd25fdmlld19zb3VyY2VfbGFiZWwiOiAi0J:RgNC%0YHQvNC%0YLRgCDQuNGB0YLQvtGH0L3QuNC60LAiLAoJCSJxdWl6emVzX3N0dWRpb190b29sYmFyX21vcmVfb3B0aW9uc19kcm9wZG93bl9oZWxwX2xhYmVsIjogItCh0L:RgNCw0LLQutCwIiwKCQkicXVpenplc19zdHVkaW9fdG9vbGJhcl9tb3JlX29wdGlvbnNfZHJvcGRvd25fYWJvdXRfbGFiZWwiOiAi0KHQstC10LTQtdC90LjRjyIsCgoJCSJxdWl6emVzX3N0dWRpb19ob21lX2Fuc3dlcl90eXBlX2xhYmVsIjogItCi0LjQvyDQvtGC0LLQtdGC0LAiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2Fuc3dlcl90eXBlX2VxdWF0aW9uX2xhYmVsIjogItCj0YDQsNCy0L3QtdC90LjQtSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYW5zd2VyX3R5cGVfZ3JhcGhpY19sYWJlbCI6ICLQk9GA0LDRhNC40LrQsCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYW5zd2VyX3R5cGVfdGV4dF9sYWJlbCI6ICLQotC10LrRgdGCIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9hbnN3ZXJfdHlwZV9zdGFuZGFyZF9ncmFwaGljX2xhYmVsIjogItCh0YLQsNC90LTQsNGA0YLQvdGL0LkiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2Fuc3dlcl90eXBlX2Jhcl9jaGFydF9sYWJlbCI6ICLQk9C40YHRgtC%0LPRgNCw0LzQvNCwIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9hbnN3ZXJfdHlwZV9saW5lX2NoYXJ0X2xhYmVsIjogItCT0YDQsNGE0LjQuiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYW5zd2VyX3R5cGVfcGllX2NoYXJ0X2xhYmVsIjogItCa0YDRg9Cz0L7QstCw0Y8g0LTQuNCw0LPRgNCw0LzQvNCwIiwKCgoJCSJxdWl6emVzX3N0dWRpb19ob21lX3F1ZXN0aW9uX21hdGhfY29udGVudF9sYWJlbCI6ICLQl9Cw0LTQsNGC0Ywg0L3QsNGH0LDQu9GM0L3QvtC1INGB0L7QtNC10YDQttC40LzQvtC1INC4INC:0YDQsNCy0LjQu9GM0L3Ri9C5INC%0YLQstC10YIg0LTQu9GPINGB0LLQvtC10LPQviDQstC%0L:RgNC%0YHQsCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcXVlc3Rpb25fdGV4dF9jb250ZW50X2xhYmVsIjogItCX0LDQtNCw0YLRjCDQv9GA0LDQstC40LvRjNC90YvQuSDQvtGC0LLQtdGCINC90LAg0YHQstC%0Lkg0LLQvtC:0YDQvtGBIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9pbml0aWFsX2NvbnRlbnRfbGFiZWwiOiAi0J3QsNGH0LDQu9GM0L3QvtC1INGB0L7QtNC10YDQttC40LzQvtC1IiwKCQkicXVpenplc19zdHVkaW9faG9tZV9jb3JyZWN0X2Fuc3dlcl9sYWJlbCI6ICLQn9GA0LDQstC40LvRjNC90YvQuSDQvtGC0LLQtdGCIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcXVlc3Rpb25fZ3JhcGhfY29udGVudF9sYWJlbCI6ICLQmNC30L7QsdGA0LDQt9C40YLRjCDQvdCw0YfQsNC70YzQvdC%0LUg0YHQvtC00LXRgNC20LjQvNC%0LUg0Lgg0L:RgNCw0LLQuNC70YzQvdGL0Lkg0L7RgtCy0LXRgiDQtNC70Y8g0YHQstC%0LXQs9C%INCy0L7Qv9GA0L7RgdCwIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9pbml0aWFsX2dyYXBoX2NvbnRlbnRfbGFiZWwiOiAi0J3QsNGH0LDQu9GM0L3QvtC1INGB0L7QtNC10YDQttC40LzQvtC1IiwKCQkicXVpenplc19zdHVkaW9faG9tZV9jb3JyZWN0X2dyYXBoX2Fuc3dlcl9sYWJlbCI6ICLQn9GA0LDQstC40LvRjNC90YvQuSDQvtGC0LLQtdGCIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYWN0aXZpdHlfbGlzdF9sYWJlbCI6ICLQndCw0YHRgtGA0L7QudC60LgiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2lucHV0X29wdGlvbnNfbGFiZWwiOiAi0JLQsNGA0LjQsNC90YLRiyDQstCy0L7QtNCwIiwKCQkicXVpenplc19zdHVkaW9faG9tZV92YWxpZGF0aW9uX29wdGlvbnNfbGFiZWwiOiAi0JLQsNGA0LjQsNC90YLRiyDQv9GA0L7QstC10YDQutC4INGB0L7QvtGC0LLQtdGC0YHRgtCy0LjRjyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfdmFyaWFibGVzX29wdGlvbnNfbGFiZWwiOiAi0KHQu9GD0YfQsNC50L3Ri9C1INC:0LXRgNC10LzQtdC90L3Ri9C1IiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2N1c3RvbWl6ZV9ncmFwaF90b29sYmFyX2xhYmVsIjogItCS0YvQsdC10YDQuNGC0LUg0LjQvdGB0YLRgNGD0LzQtdC90YLRiywg0L:RgNC10LTQvtGB0YLQsNCy0LvRj9C10LzRi9C1INGB0YLRg9C00LXQvdGC0YMg0LTQu9GPINC%0YLQstC10YLQsCDQvdCwINCy0L7Qv9GA0L7RgS4iLAoJCSJxdWl6emVzX3N0dWRpb19jdXN0b21pemVfZ3JhcGhfdG9vbGJhcl9oZWFkZXIiOiAi0J3QsNGB0YLRgNC%0LjRgtGMINC:0LDQvdC10LvRjCDQuNC90YHRgtGA0YPQvNC10L3RgtC%0LIiLAoKCQkicXVpenplc19zdHVkaW9faG9tZV90ZXN0X3F1ZXN0aW9uX2J1dHRvbl90b29sdGlwIjogItCf0YDQvtCy0LXRgNC40YLRjCDQtNCw0L3QvdGL0Lkg0LLQvtC:0YDQvtGBIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9jYW5jZWxfYnV0dG9uX3Rvb2x0aXAiOiAi0J7RgtC80LXQvdCwIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9zYXZlX2J1dHRvbl90b29sdGlwIjogItCh0L7RhdGA0LDQvdC40YLRjCIsCgoJCSJxdWl6emVzX3N0dWRpb19vcHRpb25zX2ZpbHRlcl9sYWJlbCI6ICLQpNC40LvRjNGC0YDQvtCy0LDRgtGMINCy0LDRgNC40LDQvdGC0Ysg0L3QsCDQvtGB0L3QvtCy0LUg0LDQvdCw0LvQuNC30LAg0L:RgNCw0LLQuNC70YzQvdC%0LPQviDQvtGC0LLQtdGC0LAuIiwKCQkicXVpenplc19zdHVkaW9fb3B0aW9uc19maWx0ZXJfYWxsX29wdGlvbnNfbGFiZWwiOiAi0J:QvtC60LDQt9Cw0YLRjCDQstGB0LUg0LLQsNGA0LjQsNC90YLRiyIsCgkJInF1aXp6ZXNfc3R1ZGlvX29wdGlvbnNfZmlsdGVyX3JlbGV2YW50X29wdGlvbnNfbGFiZWwiOiAi0J:QvtC60LDQt9Cw0YLRjCDQv9C%0LTRhdC%0LTRj9GJ0LjQtSDQstCw0YDQuNCw0L3RgtGLIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfY29tcG91bmRfYW5zd2VyX3RpdGxlIjogItCh0L7RgdGC0LDQstC90L7QuSDQvtGC0LLQtdGCIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19jb21wb3VuZF9hbnN3ZXJfZ3JhZGVfYW5zd2VyX2JveGVzX3NlcGFyYXRlbHlfbGFiZWwiOiAi0J7RhtC10L3QuNCy0LDRgtGMINC:0L7Qu9GPINC%0YLQstC10YLQvtCyINC:0L4g0L7RgtC00LXQu9GM0L3QvtGB0YLQuCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfY29tcG91bmRfYW5zd2VyX2dyYWRlX2Fuc3dlcl9ib3hlc19zZXBhcmF0ZWx5X2hlbHBlcl90ZXh0IjogItCa0LDQttC00L7QtSDQv9C%0LvQtSDQvtGC0LLQtdGC0LAg0L7RhtC10L3QuNCy0LDQtdGC0YHRjyDQvdC10LfQsNCy0LjRgdC40LzQvi4g0JjQvdCw0YfQtSDQstGB0LUg0YHQvtC00LXRgNC20LjQvNC%0LUg0L7RhtC10L3QuNCy0LDQtdGC0YHRjyDQutCw0Log0L7RgtC00LXQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUuINCf0L7Qu9GPINC%0YLQstC10YLQvtCyINC%0L:RgNC10LTQtdC70Y:RjtGC0YHRjyDQsiDQvdCw0YfQsNC70YzQvdC%0Lwg0YHQvtC00LXRgNC20LjQvNC%0LwuIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19jb21wb3VuZF9hbnN3ZXJfYWxsX2Fuc3dlcnNfY29ycmVjdF9sYWJlbCI6ICLQktGB0LUg0L7RgtCy0LXRgtGLINC00L7Qu9C20L3RiyDQsdGL0YLRjCDQv9GA0LDQstC40LvRjNC90YvQvNC4IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19jb21wb3VuZF9hbnN3ZXJfYWxsX2Fuc3dlcnNfY29ycmVjdF9oZWxwZXJfdGV4dCI6ICLQldGB0LvQuCDQutCw0LrQvtC5LdC70LjQsdC%INC40Lcg0L7RgtCy0LXRgtC%0LIg0L7QutCw0LfRi9Cy0LDQtdGC0YHRjyDQvdC10L:RgNCw0LLQuNC70YzQvdGL0LwsINC%0YLQstC10YIg0L3QsCDQstC10YHRjCDQstC%0L:RgNC%0YEg0L:RgNC40LfQvdCw0LXRgtGB0Y8g0L3QtdC:0YDQsNCy0LjQu9GM0L3Ri9C8LiDQkiDQv9GA0L7RgtC40LLQvdC%0Lwg0YHQu9GD0YfQsNC1INC60LDQttC00L7QvNGDINC%0YLQstC10YLRgyDQv9GA0LjRgdCy0LDQuNCy0LDQtdGC0YHRjyDQstC10YEg0LIg0L7RhtC10L3QutC1LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfY29tcG91bmRfYW5zd2VyX3RhYmxlX2Fuc3dlcl9jb2x1bW5fbGFiZWwiOiAi0J7RgtCy0LXRgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfY29tcG91bmRfYW5zd2VyX3RhYmxlX2dyYWRlX3dlaWdodF9jb2x1bW5fbGFiZWwiOiAi0JLQtdGBINCyINC%0YbQtdC90LrQtSIsCgoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfdGl0bGUiOiAi0KHQv9C%0YHQvtCxINCy0LLQvtC00LAg0L7RgtCy0LXRgtCwIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX2Fuc3dlcl9pbnB1dF9maWVsZF9sYWJlbCI6ICLQn9C%0LvQtSDQstCy0L7QtNCwINC%0YLQstC10YLQsCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9tYXRoZWRpdG9yX2VtYmVkZGVkX2xhYmVsIjogItCS0YHRgtGA0L7QtdC90L3Ri9C5INC80LDRgtC10LzQsNGC0LjRh9C10YHQutC40Lkg0YDQtdC00LDQutGC0L7RgCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9tYXRoZWRpdG9yX2VtYmVkZGVkX2hlbHBlcl90ZXh0IjogItCf0L7Qu9C90L7RhNGD0L3QutGG0LjQvtC90LDQu9GM0L3Ri9C5INC80LDRgtC10LzQsNGC0LjRh9C10YHQutC40Lkg0YDQtdC00LDQutGC0L7RgCBNYXRoVHlwZSDRgSDQv9Cw0L3QtdC70YzRjiDQuNC90YHRgtGA0YPQvNC10L3RgtC%0LIg0Lgg0YDQtdC20LjQvNCw0LzQuCDRgNGD0LrQvtC:0LjRgdC90L7Qs9C%INCy0LLQvtC00LAuIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX21hdGhlZGl0b3JfcG9wdXBfbGFiZWwiOiAi0JzQsNGC0LXQvNCw0YLQuNGH0LXRgdC60LjQuSDRgNC10LTQsNC60YLQvtGAINCy0L4g0LLRgdC:0LvRi9Cy0LDRjtGJ0LXQvCDQvtC60L3QtSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9tYXRoZWRpdG9yX3BvcHVwX2hlbHBlcl90ZXh0IjogItCi0LXQutGB0YLQvtCy0L7QtSDQv9C%0LvQtSDRgSDQutC90L7Qv9C60L7QuSwg0LrQvtGC0L7RgNCw0Y8g0L7QsdC10YHQv9C10YfQuNCy0LDQtdGCINC30LDQv9GD0YHQuiDQvNCw0YLQtdC80LDRgtC40YfQtdGB0LrQvtCz0L4g0YDQtdC00LDQutGC0L7RgNCwIE1hdGhUeXBlINCy0L4g0LLRgdC:0LvRi9Cy0LDRjtGJ0LXQvCDQvtC60L3QtS4iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfcGxhaW5fdGV4dF9sYWJlbCI6ICLQntCx0YvRh9C90YvQuSDRgtC10LrRgdGCIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX3BsYWluX3RleHRfaGVscGVyX3RleHQiOiAi0J:RgNC%0YHRgtC%0LUg0L:QvtC70LUg0L7QsdGL0YfQvdC%0LPQviDRgtC10LrRgdGC0LAg0LTQu9GPINCx0L7Qu9C10LUg0L:RgNC%0YHRgtGL0YUg0L7RgtCy0LXRgtC%0LIuIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX2F1eGlsaWFyX2lucHV0X2xhYmVsIjogItCS0YHQv9C%0LzQvtCz0LDRgtC10LvRjNC90YvQuSDRgdC:0L7RgdC%0LEg0LLQstC%0LTQsCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9kaXNwbGF5X2F1eGlsaWFyX2lucHV0X2xhYmVsIjogItCe0YLQvtCx0YDQsNC30LjRgtGMINCy0YHQv9C%0LzQvtCz0LDRgtC10LvRjNC90L7QtSDRgdGA0LXQtNGB0YLQstC%IENhbGNNZSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9kaXNwbGF5X2F1eGlsaWFyX2lucHV0X2hlbHBlcl90ZXh0IjogItCe0YLQvtCx0YDQsNC20LDQtdGCINCy0YHQv9C%0LzQvtCz0LDRgtC10LvRjNC90YvQuSDQutCw0LvRjNC60YPQu9GP0YLQvtGAIENhbGNNZSDQsiDQtNC%0L:QvtC70L3QtdC90LjQtSDQuiDRgdGC0LDQvdC00LDRgNGC0L3QvtC80YMg0L:QvtC70Y4g0L7RgtCy0LXRgtCwINGB0YLRg9C00LXQvdGC0LAuIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX3RleHRfYXV4aWxpYXJfaW5wdXRfbGFiZWwiOiAi0J7RgtC%0LHRgNCw0LfQuNGC0Ywg0LLRgdC:0L7QvNC%0LPQsNGC0LXQu9GM0L3QvtC1INGC0LXQutGB0YLQvtCy0L7QtSDQv9C%0LvQtSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF90ZXh0X2F1eGlsaWFyX2lucHV0X2hlbHBlcl90ZXh0IjogItCe0YLQvtCx0YDQsNC20LDQtdGCINCy0YHQv9C%0LzQvtCz0LDRgtC10LvRjNC90L7QtSDRgtC10LrRgdGC0L7QstC%0LUg0L:QvtC70LUg0LIg0LTQvtC:0L7Qu9C90LXQvdC40LUg0Log0YHRgtCw0L3QtNCw0YDRgtC90L7QvNGDINC:0L7Qu9GOINC%0YLQstC10YLQsCDRgdGC0YPQtNC10L3RgtCwLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9yZXBsYWNlX2F1eGlsaWFyX2lucHV0X2xhYmVsIjogItCX0LDQvNC10L3QuNGC0Ywg0YHQv9C%0YHQvtCxINCy0LLQvtC00LAg0L7RgtCy0LXRgtCwINCy0YHQv9C%0LzQvtCz0LDRgtC10LvRjNC90YvQvCDRgdC:0L7RgdC%0LHQvtC8IENhbGNNZSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9yZXBsYWNlX2F1eGlsaWFyX2lucHV0X2hlbHBlcl90ZXh0IjogItCX0LDQvNC10L3Rj9C10YIg0L:QvtC70LUg0LLQstC%0LTQsCDQvtGC0LLQtdGC0LAg0LLRgdC:0L7QvNC%0LPQsNGC0LXQu9GM0L3Ri9C8INC60LDQu9GM0LrRg9C70Y:RgtC%0YDQvtC8IENhbGNNZSDQtNC70Y8g0L7RgtCy0LXRgtCwINGB0YLRg9C00LXQvdGC0LAuIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX25vX2F1eGlsaWFyX2lucHV0X2xhYmVsIjogItCd0LUg0L:QvtC60LDQt9GL0LLQsNGC0Ywg0LLRgdC:0L7QvNC%0LPQsNGC0LXQu9GM0L3Ri9C5INGB0L:QvtGB0L7QsSDQstCy0L7QtNCwIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX25vX2F1eGlsaWFyX2lucHV0X2hlbHBlcl90ZXh0IjogItCh0LrRgNGL0LLQsNC10YIg0LLRgdC:0L7QvNC%0LPQsNGC0LXQu9GM0L3Ri9C5INC60LDQu9GM0LrRg9C70Y:RgtC%0YAgQ2FsY01lINC00LvRjyDQv9C%0LvRjyDQstCy0L7QtNCwINC%0YLQstC10YLQsCDRgdGC0YPQtNC10L3RgtCwLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9kZWZpbmVfaW5pdGlhbF9jb250ZW50X2J1dHRvbl9sYWJlbCI6ICLQntC:0YDQtdC00LXQu9C40YLRjCDQvdCw0YfQsNC70YzQvdC%0LUg0YHQvtC00LXRgNC20LjQvNC%0LUiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfY3VzdG9taXplX3Rvb2xiYXJfbGFiZWwiOiAi0J3QsNGB0YLRgNC%0LjRgtGMINC:0LDQvdC10LvRjCDQuNC90YHRgtGA0YPQvNC10L3RgtC%0LIiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfYXV4aWxpYXJfaW5wdXRfaGlkZV9maWxlX21lbnVfbGFiZWwiOiAi0KHQutGA0YvRgtGMINGE0YPQvdC60YbQuNC4INC%0LHRgNCw0LHQvtGC0LrQuCDRhNCw0LnQu9C%0LIgQ2FsY01lIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX2F1eGlsaWFyX2lucHV0X2hpZGVfZmlsZV9tZW51X2hlbHBlcl90ZXh0IjogItCh0LrRgNGL0LLQsNC10YIg0YLQsNC60LjQtSDRhNGD0L3QutGG0LjQuCwg0LrQsNC6INC%0YLQutGA0YvRgtC40LUsINGB0L7RhdGA0LDQvdC10L3QuNC1INC4INC30LDQs9GA0YPQt9C60LAg0YTQsNC50LvQvtCyIENhbGNNZSDQtNC70Y8g0YHRgtGD0LTQtdC90YLQvtCyIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3RpdGxlIjogItCh0LjQvdGC0LDQutGB0LjRgSDQstCy0L7QtNCwIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3NlbGVjdF9hbGxfbGFiZWwiOiAi0JLRgdC1IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfY2xlYXJfYWxsX2xhYmVsIjogItCh0LHRgNC%0YEiLAoKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfY29uc3RhbnRzX2xhYmVsIjogItCf0L7RgdGC0L7Rj9C90L3Ri9C1IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfY29uc3RhbnRzX2hlbHBlcl90ZXh0IjogItCS0YvQsdC10YDQuNGC0LUg0LHRg9C60LLRiywg0LrQvtGC0L7RgNGL0LUg0LHRg9C00YPRgiDRgNCw0YHRgdC80LDRgtGA0LjQstCw0YLRjNGB0Y8g0LrQsNC6INC:0L7RgdGC0L7Rj9C90L3Ri9C1INCy0LzQtdGB0YLQviDRgdCy0L7QsdC%0LTQvdGL0YUg0L:QtdGA0LXQvNC10L3QvdGL0YUuINCd0LAg0L:QsNC90LXQu9C4IMKr0J7Qv9GA0LXQtNC10LvQuNGC0Ywg0YHQu9GD0YfQsNC50L3Ri9C1INC:0LXRgNC10LzQtdC90L3Ri9C1INC4INGE0YPQvdC60YbQuNC4wrsg0LzQvtC20L3QviDQvtC:0YDQtdC00LXQu9C40YLRjCDQtNGA0YPQs9C40LUg0L:QvtGB0YLQvtGP0L3QvdGL0LUuIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfY29uc3RhbnRzX3BpX2xhYmVsIjogIs%AIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfY29uc3RhbnRzX2VfbGFiZWwiOiAiZSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2NvbnN0YW50c19pX2xhYmVsIjogImkiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9jb25zdGFudHNfal9sYWJlbCI6ICJqIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfY29uc3RhbnRzX21vcmVfY29uc3RhbnRzIjogItCU0YDRg9Cz0LjQtSDQv9C%0YHRgtC%0Y:QvdC90YvQtS4uLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2NvbnN0YW50c19kZWZpbmVfY29uc3RhbnRfYnV0dG9uX2xhYmVsIjogItCe0L:RgNC10LTQtdC70LjRgtGMINC90L7QstGD0Y4g0L:QvtGB0YLQvtGP0L3QvdGD0Y4iLAoKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfZnVuY3Rpb25zX2xhYmVsIjogItCk0YPQvdC60YbQuNC4IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfZnVuY3Rpb25zX2hlbHBlcl90ZXh0IjogItCS0YvQsdC10YDQuNGC0LUg0LjQvNC10L3QsCDQtNC70Y8g0YTRg9C90LrRhtC40LkuINCd0LAg0L:QsNC90LXQu9C4IMKr0J7Qv9GA0LXQtNC10LvQuNGC0Ywg0YHQu9GD0YfQsNC50L3Ri9C1INC:0LXRgNC10LzQtdC90L3Ri9C1INC4INGE0YPQvdC60YbQuNC4wrsg0LzQvtC20L3QviDQvtC:0YDQtdC00LXQu9C40YLRjCDQtNGA0YPQs9C40LUg0YTRg9C90LrRhtC40LguIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfZnVuY3Rpb25zX2V4cF9sb2dfbGFiZWwiOiAiZXhwL2xvZyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2Z1bmN0aW9uc190cmlnb25vbWV0cmljX2xhYmVsIjogItCi0YDQuNCz0L7QvdC%0LzQtdGC0YDQuNGH0LXRgdC60LDRjyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2Z1bmN0aW9uc19oeXBlcmJvbGljX2xhYmVsIjogItCT0LjQv9C10YDQsdC% :0YDQuNGB0YLQsNCy0LrQuCDQtNC70Y8g0LXQtNC40L3QuNGGINC40LfQvNC10YDQtdC90LjRjy4iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF91bml0X3ByZWZpeGVzX3lvdHRhX2xhYmVsIjogItCZIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc196ZXR0YV9sYWJlbCI6ICLQlyIsCiAgICAgICAgInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfZXhhX2xhYmVsIjogItCtIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19wZXRhX2xhYmVsIjogItCfIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc190ZXJhX2xhYmVsIjogItCiIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19naWdhX2xhYmVsIjogItCTIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19tZWdhX2xhYmVsIjogItCcIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19raWxvX2xhYmVsIjogItC6IiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19oZWN0b19sYWJlbCI6ICLQsyIsCiAgICAgICAgInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfZGVjYV9sYWJlbCI6ICLQtNCwIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19kZWNpX2xhYmVsIjogItC0IiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19jZW50aV9sYWJlbCI6ICLRgSIsCiAgICAgICAgInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfbWlsbGlfbGFiZWwiOiAi0LwiLAogICAgICAgICJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF91bml0X3ByZWZpeGVzX21pY3JvX2xhYmVsIjogItCdIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19uYW5vX2xhYmVsIjogItC9IiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19waWNvX2xhYmVsIjogItC:IiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19mZW10b19sYWJlbCI6ICLRhCIsCiAgICAgICAgInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfYXR0b19sYWJlbCI6ICLQsCIsCiAgICAgICAgInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfemVwdG9fbGFiZWwiOiAi0LciLAogICAgICAgICJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF91bml0X3ByZWZpeGVzX3lvY3RvX2xhYmVsIjogItC4IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19tb3JlX3ByZWZpeGVzX2xhYmVsIjogItCU0YDRg9Cz0LjQtSDQv9GA0LjRgdGC0LDQstC60LguLi4iLAoKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfYWxsb3dlZF9jb25zdHJ1Y3Rpb25zX2xhYmVsIjogItCU0L7Qv9GD0YHRgtC40LzRi9C1INC60L7QvdGB0YLRgNGD0LrRhtC40LgiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfbWl4ZWRfZnJhY3Rpb25zX2xhYmVsIjogItCh0LzQtdGI0LDQvdC90YvQtSDQtNGA0L7QsdC4IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfYWxsb3dlZF9jb25zdHJ1Y3Rpb25zX21peGVkX2ZyYWN0aW9uc19oZWxwZXJfdGV4dCI6ICLQpNC%0YDQvNGD0LvRiyDRgtC40L:QsCAiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfbWl4ZWRfZnJhY3Rpb25zX2hlbHBlcl90ZXh0XzIiOiAiINC40L3RgtC10YDQv9GA0LXRgtC40YDRg9GO0YLRgdGPINC60LDQuiAiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfbWl4ZWRfZnJhY3Rpb25zX2hlbHBlcl90ZXh0XzMiOiAiLiDQmNC90LDRh9C1INC%0L3QuCDQuNC90YLQtdGA0L:RgNC10YLQuNGA0YPRjtGC0YHRjyDQutCw0LogIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfYWxsb3dlZF9jb25zdHJ1Y3Rpb25zX21peGVkX2ZyYWN0aW9uc19oZWxwZXJfdGV4dF80IjogIi4iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfbGlzdHNfbGFiZWwiOiAi0KHQv9C40YHQutC4IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfYWxsb3dlZF9jb25zdHJ1Y3Rpb25zX2xpc3RzX2hlbHBlcl90ZXh0IjogItCk0LjQs9GD0YDQvdGL0LUg0YHQutC%0LHQutC4IHsgfSDQuNC90YLQtdGA0L:RgNC10YLQuNGA0YPRjtGC0YHRjyDQutCw0Log0L7Qs9GA0LDQvdC40YfQuNGC0LXQu9C4INGB0L:QuNGB0LrQsC4g0JjQvdCw0YfQtSDQvtC90Lgg0LjQvdGC0LXRgNC:0YDQtdGC0LjRgNGD0Y7RgtGB0Y8g0LrQsNC6INC:0YDQvtGB0YLRi9C1INGB0LrQvtCx0LrQuC4iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfbGlzdHNfd2l0aG91dF9lbmNsb3NlcnNfbGFiZWwiOiAi0KHQv9C40YHQutC4INCx0LXQtyDQvtCz0YDQsNC90LjRh9C40YLQtdC70LXQuSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2FsbG93ZWRfY29uc3RydWN0aW9uc19saXN0c193aXRob3V0X2VuY2xvc2Vyc19oZWxwZXJfdGV4dCI6ICLQm9GO0LHQvtC5INGN0LvQtdC80LXQvdGCINC40LvQuCDQv9C%0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0Ywg0Y3Qu9C10LzQtdC90YLQvtCyINC40L3RgtC10YDQv9GA0LXRgtC40YDRg9C10YLRgdGPINC60LDQuiDRgdC:0LjRgdC%0Log0LTQsNC20LUg0LHQtdC3INC%0LPRgNCw0L3QuNGH0LjRgtC10LvQtdC5IHsgfS4iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfaW50ZXJ2YWxzX2xhYmVsIjogItCY0L3RgtC10YDQstCw0LvRiyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2FsbG93ZWRfY29uc3RydWN0aW9uc19pbnRlcnZhbHNfaGVscGVyX3RleHQiOiAi0KTQvtGA0LzRg9C70Ysg0YLQuNC:0LAgKDAsMSkg0LjQvdGC0LXRgNC:0YDQtdGC0LjRgNGD0Y7RgtGB0Y8g0LrQsNC6INC40L3RgtC10YDQstCw0LvRiy4g0JjQvdCw0YfQtSDQvtC90Lgg0L:RgNC10LTRgdGC0LDQstC70Y:RjtGCINGB0L7QsdC%0Lkg0LTQstGD0YXRjdC70LXQvNC10L3RgtC90YvQtSDQstC10LrRgtC%0YDRiy4iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfcmF0aW9zX2xhYmVsIjogItCe0YLQvdC%0YjQtdC90LjRjyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2FsbG93ZWRfY29uc3RydWN0aW9uc19yYXRpb3NfaGVscGVyX3RleHQiOiAi0KTQvtGA0LzRg9C70Ysg0YLQuNC:0LAgMjozOjUg0LjQvdGC0LXRgNC:0YDQtdGC0LjRgNGD0Y7RgtGB0Y8g0LrQsNC6INC%0YLQvdC%0YjQtdC90LjRjy4g0JjQvdCw0YfQtSDQvtC90Lgg0L:RgNC10LTRgdGC0LDQstC70Y:RjtGCINGB0L7QsdC%0Lkg0L7QsdGL0YfQvdGL0LUg0L:QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdGL0LUg0LTQtdC70LXQvdC40Y8uIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfYWxsb3dlZF9jb25zdHJ1Y3Rpb25zX3NjaWVudGlmaWNfbm90YXRpb25fbGFiZWwiOiAi0JrQvtC80L:RjNGO0YLQtdGA0L3QvtC1INGN0LrRgdC:0L7QvdC10L3RhtC40LDQu9GM0L3QvtC1INC:0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfYWxsb3dlZF9jb25zdHJ1Y3Rpb25zX3NjaWVudGlmaWNfbm90YXRpb25faGVscGVyX3RleHQiOiAi0KTQvtGA0LzRg9C70Ysg0YLQuNC:0LAgMSw1ZS01INC4IDEsNUUtNSDQuNC90YLQtdGA0L:RgNC10YLQuNGA0YPRjtGC0YHRjyDQutCw0Log0LTQtdGB0Y:RgtC40YfQvdGL0LUg0YfQuNGB0LvQsCDQsiDRjdC60YHQv9C%0L3QtdC90YbQuNCw0LvRjNC90L7QvCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQuC4iLAoKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfc2VwYXJhdG9yX3N5bWJvbHNfbGFiZWwiOiAi0KHQuNC80LLQvtC70Yst0YDQsNC30LTQtdC70LjRgtC10LvQuCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3NlcGFyYXRvcl9zeW1ib2xzX3BvaW50X2Ryb3Bkb3duX2xhYmVsIjogItCi0L7Rh9C60LAiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9zZXBhcmF0b3Jfc3ltYm9sc19jb21tYV9kcm9wZG93bl9sYWJlbCI6ICLQl9Cw0L:Rj9GC0LDRjyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3NlcGFyYXRvcl9zeW1ib2xzX3NwYWNlX2Ryb3Bkb3duX2xhYmVsIjogItCf0YDQvtCx0LXQuyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3NlcGFyYXRvcl9zeW1ib2xzX2Ryb3Bkb3duX25vdGhpbmdfbGFiZWwiOiAi0J7RgtGB0YPRgtGB0YLQstGD0Y7RgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3NlcGFyYXRvcl9zeW1ib2xzX2Ryb3Bkb3duX2RlY2ltYWxfcGxhY2VzX2xhYmVsIjogItCn0LjRgdC70L4g0LTQtdGB0Y:RgtC40YfQvdGL0YUg0LfQvdCw0LrQvtCyIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfc2VwYXJhdG9yX3N5bWJvbHNfZHJvcGRvd25fZGlnaXRfZ3JvdXBzX2xhYmVsIjogItCT0YDRg9C:0L:RiyDQt9C90LDQutC%0LIiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9zZXBhcmF0b3Jfc3ltYm9sc19kcm9wZG93bl9saXN0X2l0ZW1zX2xhYmVsIjogItCt0LvQtdC80LXQvdGC0Ysg0YHQv9C40YHQutCwIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfc2VwYXJhdG9yX3N5bWJvbHNfaGVscGVyX3RleHQiOiAi0JLRi9Cx0LXRgNC40YLQtSDQt9C90LDRh9C10L3QuNC1INGB0LjQvNCy0L7Qu9C%0LIg0YLQvtGH0LrQuCwg0LfQsNC:0Y:RgtC%0Lkg0Lgg0L:RgNC%0LHQtdC70LAuINCe0L3QviDQvtC:0YDQtdC00LXQu9GP0LXRgiDRgdC:0L7RgdC%0LEg0L:RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0LTQtdGB0Y:RgtC40YfQvdGL0YUg0LfQvdCw0LrQvtCyINC4INGB0L:QuNGB0LrQvtCyLiIsCgoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl90aXRsZSI6ICLQodGA0LDQstC90LXQvdC40LUg0YEg0L7RgtCy0LXRgtC%0Lwg0YHRgtGD0LTQtdC90YLQsCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2xpdGVyYWxseV9lcXVhbF9sYWJlbCI6ICLQn9C%0YHQuNC80LLQvtC70YzQvdC%INGA0LDQstC10L0iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9saXRlcmFsbHlfZXF1YWxfaGVscGVyX3RleHQiOiAi0J7RgtCy0LXRgiDRgdGC0YPQtNC10L3RgtCwINC00L7Qu9C20LXQvSDQsiDRgtC%0YfQvdC%0YHRgtC4INGB0L7QstC:0LDQtNCw0YLRjCDRgSDQv9GA0LDQstC40LvRjNC90YvQvCDQvtGC0LLQtdGC0L7QvCAo0LHQtdC3INGD0YfQtdGC0LAg0YHQutC%0LHQvtC6INC4INCw0L3QsNC70L7Qs9C40YfQvdGL0YUg0LfQvdCw0LrQvtCyKS4g0JTQvtC:0YPRgdC6INGB0L7RhdGA0LDQvdGP0LXRgiDRgdC40LvRgy4iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9tYXRoZW1hdGljYWxseV9lcXVhbF9sYWJlbCI6ICLQnNCw0YLQtdC80LDRgtC40YfQtdGB0LrQuCDRgNCw0LLQtdC9IiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fbWF0aGVtYXRpY2FsbHlfZXF1YWxfaGVscGVyX3RleHQiOiAi0J7RgtCy0LXRgiDRgdGC0YPQtNC10L3RgtCwINGB0YDQsNCy0L3QuNCy0LDQtdGC0YHRjyDRgSDQv9GA0LDQstC40LvRjNC90YvQvCDQvtGC0LLQtdGC0L7QvCDRgSDQv9C%0LzQvtGJ0YzRjiDQvNCw0YLQtdC80LDRgtC40YfQtdGB0LrQvtCz0L4g0LzQvtC00YPQu9GPLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX29yZGVyX2FuZF9yZXBldGl0aW9uX21hdHRlcnNfbGFiZWwiOiAi0J:QvtGA0Y:QtNC%0Log0Lgg0L:QvtCy0YLQvtGA0LXQvdC40LUg0LjQvNC10Y7RgiDQt9C90LDRh9C10L3QuNC1INCyINGB0L:QuNGB0LrQsNGFIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fb3JkZXJfYW5kX3JlcGV0aXRpb25fbWF0dGVyc19oZWxwZXJfdGV4dCI6ICLQldGB0LvQuCDQvtGC0LLQtdGCINC:0YDQtdC00YHRgtCw0LLQu9GP0LXRgiDRgdC%0LHQvtC5INGB0L:QuNGB0L7QuiDRjdC70LXQvNC10L3RgtC%0LIsINC:0L7RgNGP0LTQvtC6INGB0LvQtdC00L7QstCw0L3QuNGPINC4INC60L7Qu9C40YfQtdGB0YLQstC%INCy0YXQvtC20LTQtdC90LjQuSDRjdC70LXQvNC10L3RgtC%0LIg0LIg0L7RgtCy0LXRgtC1INGB0YLRg9C00LXQvdGC0LAg0LTQvtC70LbQvdGLINCx0YvRgtGMINGC0LDQutC40LzQuCDQttC1LCDQutCw0Log0LIg0L:RgNCw0LLQuNC70YzQvdC%0Lwg0L7RgtCy0LXRgtC1LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX3JlcGV0aXRpb25fbWF0dGVyc19sYWJlbCI6ICLQn9C%0LLRgtC%0YDQtdC90LjQtSDQuNC80LXQtdGCINC30L3QsNGH0LXQvdC40LUg0LIg0YHQv9C40YHQutCw0YUsINCwINC:0L7RgNGP0LTQvtC6IOKAlCDQvdC10YIiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9yZXBldGl0aW9uX21hdHRlcnNfaGVscGVyX3RleHQiOiAi0JXRgdC70Lgg0L7RgtCy0LXRgiDQv9GA0LXQtNGB0YLQsNCy0LvRj9C10YIg0YHQvtCx0L7QuSDRgdC:0LjRgdC%0Log0Y3Qu9C10LzQtdC90YLQvtCyLCDQutC%0LvQuNGH0LXRgdGC0LLQviDQstGF0L7QttC00LXQvdC40Lkg0Y3Qu9C10LzQtdC90YLQvtCyINCyINC%0YLQstC10YLQtSDRgdGC0YPQtNC10L3RgtCwINC00L7Qu9C20L3QviDQsdGL0YLRjCDRgtCw0LrQuNC8INC20LUsINC60LDQuiDQsiDQv9GA0LDQstC40LvRjNC90L7QvCDQvtGC0LLQtdGC0LUsINCwINC:0L7RgNGP0LTQvtC6INC40YUg0YHQu9C10LTQvtCy0LDQvdC40Y8g0LzQvtC20LXRgiDQsdGL0YLRjCDQtNGA0YPQs9C40LwuIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fdW5yZXN0cmljdGVkX2xpc3RzX2xhYmVsIjogItCf0L7RgNGP0LTQvtC6INC4INC:0L7QstGC0L7RgNC10L3QuNC1INC90LUg0LjQvNC10Y7RgiDQt9C90LDRh9C10L3QuNGPINCyINGB0L:QuNGB0LrQsNGFIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fdW5yZXN0cmljdGVkX2xpc3RzX2hlbHBlcl90ZXh0IjogItCV0YHQu9C4INC%0YLQstC10YIg0L:RgNC10LTRgdGC0LDQstC70Y:QtdGCINGB0L7QsdC%0Lkg0YHQv9C40YHQvtC6INGN0LvQtdC80LXQvdGC0L7Qsiwg0L:QvtGA0Y:QtNC%0Log0LjRhSDRgdC70LXQtNC%0LLQsNC90LjRjyDQuCDQuNGFINC:0L7QstGC0L7RgNC10L3QuNC1INC:0YDQuCDRgdGA0LDQstC90LXQvdC40Lgg0L7RgtCy0LXRgtCwINGB0YLRg9C00LXQvdGC0LAg0YEg0L:RgNCw0LLQuNC70YzQvdGL0Lwg0L7RgtCy0LXRgtC%0Lwg0L3QtSDRg9GH0LjRgtGL0LLQsNGO0YLRgdGPLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX21hdGNoX2xldHRlcl9jYXNlX2xhYmVsIjogItChINGD0YfQtdGC0L7QvCDRgNC10LPQuNGB0YLRgNCwINCx0YPQutCyIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fbWF0Y2hfbGV0dGVyX2Nhc2VfaGVscGVyX3RleHQiOiAi0JHRg9C60LLRiyDQsiDQstC10YDRhdC90LXQvCDQuCDQvdC40LbQvdC10Lwg0YDQtdCz0LjRgdGC0YDQtSDQtNC%0LvQttC90Ysg0LIg0YLQvtGH0L3QvtGB0YLQuCDRgdC%0LLQv9Cw0LTQsNGC0YwuIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fbWF0Y2hfc3BhY2VzX2xhYmVsIjogItChINGD0YfQtdGC0L7QvCDQv9GA0L7QsdC10LvQvtCyIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fbWF0Y2hfc3BhY2VzX2hlbHBlcl90ZXh0IjogItCf0YDQvtCx0LXQu9GLINCyINC%0YLQstC10YLQtSDRgdGC0YPQtNC10L3RgtCwINC00L7Qu9C20L3RiyDRgNCw0YHQv9C%0LvQsNCz0LDRgtGM0YHRjyDQsiDRgtC%0YfQvdC%0YHRgtC4INCyINGC0LXRhSDQttC1INC80LXRgdGC0LDRhSwg0YfRgtC%INC4INCyINC:0YDQsNCy0LjQu9GM0L3QvtC8INC%0YLQstC10YLQtS4iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9lcXVpdmFsZW50X2VxdWF0aW9uc19sYWJlbCI6ICLQrdC60LLQuNCy0LDQu9C10L3RgtC90YvQtSDRg9GA0LDQstC90LXQvdC40Y8iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9lcXVpdmFsZW50X2VxdWF0aW9uc19oZWxwZXJfdGV4dCI6ICLQnNC90L7QttC10YHRgtCy0L4g0YDQtdGI0LXQvdC40Lkg0YPRgNCw0LLQvdC10L3QuNGPLCDQvdC10YDQsNCy0LXQvdGB0YLQstCwINC40LvQuCDRgdC40YHRgtC10LzRiywg0L7Qv9GA0LXQtNC10LvQtdC90L3QvtC1INCyINC%0YLQstC10YLQtSDRgdGC0YPQtNC10L3RgtCwLCDRgdC%0LLQv9Cw0LTQsNC10YIg0YEg0YLQsNC60L7QstGL0Lwg0LIg0L:RgNCw0LLQuNC70YzQvdC%0Lwg0L7RgtCy0LXRgtC1LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2FueV9hbnN3ZXJfbGFiZWwiOiAi0JvRjtCx0L7QuSDQvtGC0LLQtdGCIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fYW55X2Fuc3dlcl9oZWxwZXJfdGV4dCI6ICLQn9GA0L7QstC10YDQutGDINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjRjyDQv9GA0L7RhdC%0LTRj9GCINCy0YHQtSDQvtGC0LLQtdGC0Ysg0YHRgtGD0LTQtdC90YLQsC4g0K3RgtC%0YIg0YDQtdC20LjQvCDQv9C%0LfQstC%0LvRj9C10YIg0L7RgdGC0LDQstC70Y:RgtGMINC60L7QvNC80LXQvdGC0LDRgNC40Lgg0LTQu9GPINGB0YLRg9C00LXQvdGC0L7QsiDQv9C%INC:0L7QstC%0LTRgyDQvdC10L:RgNCw0LLQuNC70YzQvdGL0YUg0L7RgtCy0LXRgtC%0LIuIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fY3VzdG9tX2dyYWRpbmdfZnVuY3Rpb25fbGFiZWwiOiAi0KHQvtCx0YHRgtCy0LXQvdC90LDRjyDRhNGD0L3QutGG0LjRjyDQvtGG0LXQvdC60LgiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9jdXN0b21fZ3JhZGluZ19mdW5jdGlvbl9oZWxwZXJfdGV4dCI6ICLQntC:0YDQtdC00LXQu9C40YLQtSDRgdC%0LHRgdGC0LLQtdC90L3Rg9GOINC:0L7Qu9GM0LfQvtCy0LDRgtC10LvRjNGB0LrRg9GOINGE0YPQvdC60YbQuNGOINC00LvRjyDQv9GA0L7QstC10YDQutC4INC%0YLQstC10YLQsCDRgdGC0YPQtNC10L3RgtCwINC90LAg0L:QsNC90LXQu9C4IMKr0J7Qv9GA0LXQtNC10LvQuNGC0Ywg0YHQu9GD0YfQsNC50L3Ri9C1INC:0LXRgNC10LzQtdC90L3Ri9C1INC4INGE0YPQvdC60YbQuNC4wrsuIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fY3VzdG9tX2dyYWRpbmdfZnVuY3Rpb25fbmFtZV9kcm9wZG93bl9sYWJlbCI6ICLQmNC80Y8g0YTRg9C90LrRhtC40LgiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9jdXN0b21fZ3JhZGluZ19mdW5jdGlvbl9kZWZpbmVfZnVuY3Rpb25fYnV0dG9uX2xhYmVsIjogItCe0L:RgNC10LTQtdC70LjRgtGMINC90L7QstGD0Y4g0YTRg9C90LrRhtC40Y4iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9rZWVwX2FyZ3VtZW50c191bmV2YWx1YXRlZF9sYWJlbCI6ICLQodC%0YXRgNCw0L3Rj9GC0Ywg0LDRgNCz0YPQvNC10L3RgtGLINCx0LXQtyDQvtGG0LXQvdC60LgiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9rZWVwX2FyZ3VtZW50c191bmV2YWx1YXRlZF9oZWxwZXJfdGV4dCI6ICLQntGC0LLQtdGCINGB0YLRg9C00LXQvdGC0LAg0L3QtSDQv9C%0LTQstC10YDQs9Cw0LXRgtGB0Y8g0L7RhtC10L3QutC1LCDQsCDQv9C10YDQtdC00LDQtdGC0YHRjyDQsiDRhNGD0L3QutGG0LjRjiDQutCw0Log0LLRi9GA0LDQttC10L3QuNC1IENhbGNNZS4g0K3RgtC%INC%0YfQtdC90Ywg0L:QtdGA0YHQv9C10LrRgtC40LLQvdCw0Y8g0LLQvtC30LzQvtC20L3QvtGB0YLRjC4iLAoKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfdGl0bGUiOiAi0KfQuNGB0LvQsCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3N5bWJvbGljX2Fuc3dlcl9sYWJlbCI6ICLQodC40LzQstC%0LvRjNC90YvQuSDQvtGC0LLQtdGCIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfc3ltYm9saWNfYW5zd2VyX2hlbHBlcl90ZXh0IjogItCU0LXRgdGP0YLQuNGH0L3Ri9C1INGH0LjRgdC70LAg0L3QtSDQtNC%0L:Rg9GB0LrQsNGO0YLRgdGPLiDQntGC0LLQtdGCINC00L7Qu9C20LXQvSDQv9GA0LXQtNGB0YLQsNCy0LvRj9GC0Ywg0YHQvtCx0L7QuSDRgdC%0LLQvtC60YPQv9C90L7RgdGC0Ywg0L7Qv9C10YDQsNGG0LjQuSwg0LTRgNC%0LHQtdC5LCDQutC%0YDQvdC10Lkg0Lgg0YTRg9C90LrRhtC40Lkg0YbQtdC70YvRhSDRh9C40YHQtdC7LCDQv9C%0YHRgtC%0Y:QvdC90YvRhSDQuCDQv9C10YDQtdC80LXQvdC90YvRhS4iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc190b2xlcmFuY2VfbGFiZWwiOiAi0JTQvtC:0YPRgdC6IiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfdG9sZXJhbmNlX2V4YWN0X2Fuc3dlcl9sYWJlbCI6ICLQotC%0YfQvdGL0Lkg0L7RgtCy0LXRgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3RvbGVyYW5jZV9leGFjdF9hbnN3ZXJfaGVscGVyX3RleHQiOiAi0J7RgtCy0LXRgiDRgdGC0YPQtNC10L3RgtCwINC00L7Qu9C20LXQvSDQsiDRgtC%0YfQvdC%0YHRgtC4INGB0L7QstC:0LDQtNCw0YLRjCDRgSDQv9GA0LDQstC40LvRjNC90YvQvCDQvtGC0LLQtdGC0L7QvC4iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc190b2xlcmFuY2VfZXJyb3JfbWFyZ2luX2xhYmVsIjogItCU0L7Qv9GD0YHRgtC40LzQsNGPINC:0L7Qs9GA0LXRiNC90L7RgdGC0YwiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc190b2xlcmFuY2VfZXJyb3JfbWFyZ2luX2hlbHBlcl90ZXh0IjogItCe0YLQstC10YIg0YHRgtGD0LTQtdC90YLQsCDQtNC%0LvQttC10L0g0L3QsNGF0L7QtNC40YLRjNGB0Y8g0YHRgtGA0L7Qs9C%INCyINC40L3RgtC10YDQstCw0LvQtSDQtNC%0L:Rg9GB0LrQsC4iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc190b2xlcmFuY2VfZXJyb3JfbWFyZ2luX2Ryb3Bkb3duX3BlcmNlbnRfZXJyb3JfbGFiZWwiOiAi0J7RgtC90L7RgdC40YLQtdC70YzQvdCw0Y8g0L:QvtCz0YDQtdGI0L3QvtGB0YLRjCDQsiAlIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfdG9sZXJhbmNlX2Vycm9yX21hcmdpbl9kcm9wZG93bl9hYnNvbHV0ZV9lcnJvcl9sYWJlbCI6ICLQkNCx0YHQvtC70Y7RgtC90LDRjyDQv9C%0LPRgNC10YjQvdC%0YHRgtGMIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfdG9sZXJhbmNlX21hdGNoaW5nX2RpZ2l0c19sYWJlbCI6ICLQodGA0LDQstC90LXQvdC40LUg0YfQuNGB0LvQsCDQt9C90LDQutC%0LIiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc190b2xlcmFuY2VfbWF0Y2hpbmdfZGlnaXRzX2hlbHBlcl90ZXh0IjogItCn0LjRgdC70L4g0L:QtdGA0LLRi9GFINC30L3QsNGH0LDRidC40YUg0YbQuNGE0YAg0LjQu9C4INC00LXRgdGP0YLQuNGH0L3Ri9GFINC30L3QsNC60L7QsiDQsiDQvtGC0LLQtdGC0LUg0YHRgtGD0LTQtdC90YLQsCDQtNC%0LvQttC90L4g0YHQvtC%0YLQstC10YLRgdGC0LLQvtCy0LDRgtGMINC:0YDQsNCy0LjQu9GM0L3QvtC80YMg0L7RgtCy0LXRgtGDLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3RvbGVyYW5jZV9tYXRjaGluZ19kaWdpdHNfZHJvcGRvd25fc2lnbmlmaWNhbnRfZmlndXJlc19sYWJlbCI6ICLRh9C40YHQu9C%INC30L3QsNGH0LDRidC40YUg0YbQuNGE0YAiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc190b2xlcmFuY2VfbWF0Y2hpbmdfZGlnaXRzX2Ryb3Bkb3duX2RlY2ltYWxfcGxhY2VzX2xhYmVsIjogItGH0LjRgdC70L4g0LTQtdGB0Y:RgtC40YfQvdGL0YUg0LfQvdCw0LrQvtCyIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfZm9ybWF0X2xhYmVsIjogItCk0L7RgNC80LDRgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX2Zvcm1hdF9zY2llbnRpZmljX25vdGF0aW9uX2xhYmVsIjogItCt0LrRgdC:0L7QvdC10L3RhtC40LDQu9GM0L3QvtC1INC:0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1IiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfZm9ybWF0X3NjaWVudGlmaWNfbm90YXRpb25faGVscGVyX3RleHQiOiAi0JTQtdGB0Y:RgtC40YfQvdGL0LUg0YfQuNGB0LvQsCDQsiDQvtGC0LLQtdGC0LUg0YHRgtGD0LTQtdC90YLQsCDQtNC%0LvQttC90Ysg0LjQvNC10YLRjCDQv9GA0LjQstC10LTQtdC90L3QvtC1INGN0LrRgdC:0L7QvdC10L3RhtC40LDQu9GM0L3QvtC1INC:0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1OiAiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc19mb3JtYXRfZGVjaW1hbF9ub3RhdGlvbl9sYWJlbCI6ICLQlNC10YHRj9GC0LjRh9C90L7QtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX2Zvcm1hdF9kZWNpbWFsX25vdGF0aW9uX2hlbHBlcl90ZXh0IjogItCU0LXRgdGP0YLQuNGH0L3Ri9C1INGH0LjRgdC70LAg0LTQvtC70LbQvdGLINC40LzQtdGC0Ywg0L:RgNC%0YHRgtC%0LUg0LTQtdGB0Y:RgtC40YfQvdC%0LUg0L:RgNC10LTRgdGC0LDQstC70LXQvdC40LU6IDAsMDIyNCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX2Zvcm1hdF9hbnlfbm90YXRpb25fbGFiZWwiOiAi0J:RgNC%0LjQt9Cy0L7Qu9GM0L3QvtC1INC:0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1IiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfZm9ybWF0X2FueV9ub3RhdGlvbl9oZWxwZXJfdGV4dCI6ICLQlNC10YHRj9GC0LjRh9C90YvQtSDRh9C40YHQu9CwINC80L7Qs9GD0YIg0LjQvNC10YLRjCDQutCw0Log0Y3QutGB0L:QvtC90LXQvdGG0LjQsNC70YzQvdC%0LUsINGC0LDQuiDQuCDQtNC10YHRj9GC0LjRh9C90L7QtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtS4iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc19wcmVjaXNpb25fbGFiZWwiOiAi0KLQvtGH0L3QvtGB0YLRjCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3ByZWNpc2lvbl9wcmVjaXNpb25fY2hlY2tfbGFiZWwiOiAi0J7RgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3ByZWNpc2lvbl9wcmVjaXNpb25fY2hlY2tfbGFiZWxfMiI6ICLQtNC%IiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfcHJlY2lzaW9uX3ByZWNpc2lvbl9jaGVja19kcm9wZG93bl9zaWduaWZpY2FudF9maWd1cmVzX2xhYmVsIjogItGH0LjRgdC70L4g0LfQvdCw0YfQsNGJ0LjRhSDRhtC40YTRgCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3ByZWNpc2lvbl9wcmVjaXNpb25fY2hlY2tfZHJvcGRvd25fZGVjaW1hbF9wbGFjZXNfbGFiZWwiOiAi0YfQuNGB0LvQviDQtNC10YHRj9GC0LjRh9C90YvRhSDQt9C90LDQutC%0LIiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc19wcmVjaXNpb25fcHJlY2lzaW9uX2NoZWNrX2hlbHBlcl90ZXh0IjogItCf0YDQvtCy0LXRgNGM0YLQtSDQvNC40L3QuNC80LDQu9GM0L3QvtC1INC4INC80LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC%0LvQuNGH0LXRgdGC0LLQsCDQt9C90LDRh9Cw0YnQuNGFINGG0LjRhNGAINC40LvQuCDQtNC10YHRj9GC0LjRh9C90YvRhSDQt9C90LDQutC%0LIsINC60L7RgtC%0YDRi9C1INC00L7Qu9C20L3RiyDQsdGL0YLRjCDQsiDQvtGC0LLQtdGC0LUg0YHRgtGD0LTQtdC90YLQsCwg0LIg0YLQvtC8INGH0LjRgdC70LUg0L3Rg9C70LXQstGL0LUg0LzQu9Cw0LTRiNC40LUg0YDQsNC30YDRj9C00YsuIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zaW1wbGlmaWNhdGlvbl90aXRsZSI6ICLQo9C:0YDQvtGJ0LXQvdC40LUiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc2ltcGxpZmljYXRpb25fZ2VuZXJhbF9sYWJlbCI6ICLQntCx0YnQuNC5INCy0LjQtCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zaW1wbGlmaWNhdGlvbl9zaW1wbGlmaWVkX2xhYmVsIjogItCj0L:RgNC%0YnQtdC90L3Ri9C5INCy0LjQtCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zaW1wbGlmaWNhdGlvbl9zaW1wbGlmaWVkX2hlbHBlcl90ZXh0IjogItCU0LDQu9GM0L3QtdC50YjQtdC1INGD0L:RgNC%0YnQtdC90LjQtSDQstGL0YDQsNC20LXQvdC40Y8g0L3QtdCy0L7Qt9C80L7QttC90L4uINCS0LrQu9GO0YfQsNC10YIg0LIg0YHQtdCx0Y8g0LTRgNC%0LHQuCwg0YHRgtC10L:QtdC90Lgg0Lgg0LrQvtGA0L3QuCwg0L:QvtC70LjQvdC%0LzRiywg0LTRgNC%0LHQvdC%LdGA0LDRhtC40L7QvdCw0LvRjNC90YvQtSDRhNGD0L3QutGG0LjQuCwg0YLRgNCw0L3RgdGG0LXQvdC00LXQvdGC0L3Ri9C1INGE0YPQvdC60YbQuNC4LCDQtNC10YHRj9GC0LjRh9C90YvQtSDRh9C40YHQu9CwLi4uIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX2V4cGFuZGVkX2xhYmVsIjogItCg0LDQt9Cy0LXRgNC90YPRgtGL0Lkg0LLQuNC0IiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX2V4cGFuZGVkX2hlbHBlcl90ZXh0IjogItCS0YHQtSDQstC%0LfQvNC%0LbQvdGL0LUg0L7Qv9C10YDQsNGG0LjQuCDQstGL0L:QvtC70L3QtdC90YsuINCf0YDQvtC40LfQstC10LTQtdC90LjRjyDRgNCw0LfQu9C%0LbQtdC90Ysg0L3QsCDRgdC70LDQs9Cw0LXQvNGL0LUsINC40YHQv9C%0LvRjNC30YPRjtGC0YHRjyDQv9GA0L7RgdGC0YvQtSDQtNGA0L7QsdC4LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zaW1wbGlmaWNhdGlvbl9mYWN0b3JzX2xhYmVsIjogItCU0LXQu9C40YLQtdC70LgiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc2ltcGxpZmljYXRpb25fZmFjdG9yaXplZF9sYWJlbCI6ICLQoNCw0LfQu9C%0LbQtdC90L3Ri9C5INC90LAg0LzQvdC%0LbQuNGC0LXQu9C4IiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX2ZhY3Rvcml6ZWRfaGVscGVyX3RleHQiOiAi0KbQtdC70YvQtSDRh9C40YHQu9CwINC4INC:0L7Qu9C40L3QvtC80Ysg0L:RgNC10LTRgdGC0LDQstC70Y:RjtGC0YHRjyDQsiDQstC40LTQtSDQv9GA0L7QuNC30LLQtdC00LXQvdC40Y8g0L:RgNC%0YHRgtGL0YUg0YfQuNGB0LXQuyDQuNC70Lgg0LzQvdC%0LbQuNGC0LXQu9C10LkuIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX2NvbW1vbl9mYWN0b3JfbGFiZWwiOiAi0J7QsdGJ0LjQuSDQtNC10LvQuNGC0LXQu9GMIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX2NvbW1vbl9mYWN0b3JfaGVscGVyX3RleHQiOiAi0JLRi9C00LXQu9C10L3RiyDQvtCx0YnQuNC1INC00LXQu9C40YLQtdC70Lgg0YHQu9Cw0LPQsNC10LzRi9GFLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zaW1wbGlmaWNhdGlvbl9mcmFjdGlvbnNfbGFiZWwiOiAi0JTRgNC%0LHQuCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zaW1wbGlmaWNhdGlvbl9jb21tb25fZGVub21pbmF0b3JfbGFiZWwiOiAi0J7QsdGJ0LjQuSDQt9C90LDQvNC10L3QsNGC0LXQu9GMIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX2NvbW1vbl9kZW5vbWluYXRvcl9oZWxwZXJfdGV4dCI6ICLQlNGA0L7QsdC4INGD0L:RgNC%0YnQsNGO0YLRgdGPINGBINC:0YDQuNCy0LXQtNC10L3QuNC10Lwg0Log0L7QtNC90L7QvNGDINC%0LHRidC10LzRgyDQt9C90LDQvNC10L3QsNGC0LXQu9GOLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zaW1wbGlmaWNhdGlvbl9yb290c19sYWJlbCI6ICLQmtC%0YDQvdC4IiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX3JhdGlvbmFsaXplZF9sYWJlbCI6ICLQn9GA0LjQstC10LTQtdC90L3Ri9C5INC6INGA0LDRhtC40L7QvdCw0LvRjNC90L7QvNGDINCy0LjQtNGDIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX3JhdGlvbmFsaXplZF9oZWxwZXJfdGV4dCI6ICLQkiDQt9C90LDQvNC10L3QsNGC0LXQu9C1INC90LXRgiDQutC%0YDQvdC10LkuIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX21pbmltYWxfcmFkaWNhbmRzX2xhYmVsIjogItCc0LjQvdC40LzQsNC70YzQvdGL0LUg0L:QvtC00LrQvtGA0LXQvdC90YvQtSDQstC10LvQuNGH0LjQvdGLIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX21pbmltYWxfcmFkaWNhbmRzX2hlbHBlcl90ZXh0IjogItCQ0YDQs9GD0LzQtdC90YIg0LrQvtGA0L3RjyDQvdC1INGB0L7QtNC10YDQttC40YIg0LrQsNC60LjRhS3Qu9C40LHQviDQvNC90L7QttC40YLQtdC70LXQuSDQsiDRgdGC0LXQv9C10L3QuCDQv9C%0LrQsNC30LDRgtC10LvRjyDQutC%0YDQvdGPLCDQsiDRgdCy0Y:Qt9C4INGBINGH0LXQvCDQtdCz0L4g0L3QtdCy0L7Qt9C80L7QttC90L4g0YPQv9GA0L7RgdGC0LjRgtGMLiIsCgoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbWVhc3VyZV91bml0c190aXRsZSI6ICLQldC00LjQvdC40YbRiyDQuNC30LzQtdGA0LXQvdC40Y8iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbWVhc3VyZV91bml0c19tYXRjaF91bml0X2xhYmVsIjogItCh0YDQsNCy0L3QuNGC0Ywg0LXQtNC40L3QuNGG0Ysg0LjQt9C80LXRgNC10L3QuNGPIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX21lYXN1cmVfdW5pdHNfbWF0Y2hfdW5pdF9oZWxwZXJfdGV4dCI6ICLQldC00LjQvdC40YbRiyDQuNC30LzQtdGA0LXQvdC40Y8g0LIg0L7RgtCy0LXRgtC1INGB0YLRg9C00LXQvdGC0LAg0LTQvtC70LbQvdGLINCx0YvRgtGMINGC0LDQutC40LzQuCDQttC1LCDQutCw0Log0LIg0L:RgNCw0LLQuNC70YzQvdC%0Lwg0L7RgtCy0LXRgtC1LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19tZWFzdXJlX3VuaXRzX2FsbG93X290aGVyX3ByZWZpeGVzX2xhYmVsIjogItCg0LDQt9GA0LXRiNC40YLRjCDQtNGA0YPQs9C40LUg0L:RgNC40YHRgtCw0LLQutC4IiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX21lYXN1cmVfdW5pdHNfYWxsb3dfb3RoZXJfcHJlZml4ZXNfaGVscGVyX3RleHQiOiAi0KDQsNC30YDQtdGI0LjRgtGMLCDRh9GC0L7QsdGLINC:0YDQuNGB0YLQsNCy0LrQsCDQtdC00LjQvdC40YYg0LjQt9C80LXRgNC10L3QuNGPINCyINC%0YLQstC10YLQtSDRgdGC0YPQtNC10L3RgtCwINC%0YLQu9C40YfQsNC70LDRgdGMINC%0YIg0L:RgNC40YHRgtCw0LLQutC4INC10LTQuNC90LjRhiDQuNC30LzQtdGA0LXQvdC40Y8g0LIg0L:RgNCw0LLQuNC70YzQvdC%0Lwg0L7RgtCy0LXRgtC1LiIsCgoKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX2VsZW1lbnRzX3RpdGxlIjogItCt0LvQtdC80LXQvdGC0YsiLAoJCSJxdWl6emVzX3N0dWRpb19ncmFwaF92YWxpZGF0aW9uX29wdGlvbnNfY3JpdGVyaWFfdGl0bGUiOiAi0JrRgNC40YLQtdGA0LjQuCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2dyYXBoX3ZhbGlkYXRpb25fb3B0aW9uc190b2xlcmFuY2VfdGl0bGUiOiAi0JTQvtC:0YPRgdC6IiwKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX3RvbGVyYW5jZV9oZWxwZXIiOiAi0JfQsNC00LDQudGC0LUg0LTQvtC:0YPRgdGC0LjQvNGD0Y4g0LLQtdC70LjRh9C40L3RgyDQvtGC0LrQu9C%0L3QtdC90LjRjyDQvNC10LbQtNGDINC%0YLQstC10YLQvtC8INGB0YLRg9C00LXQvdGC0LAg0Lgg0L:RgNCw0LLQuNC70YzQvdGL0Lwg0L7RgtCy0LXRgtC%0LwuIiwKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX2VsZW1lbnRzX3N1YnRpdGxlIjogItCS0YvQsdC10YDQuNGC0LUg0Y3Qu9C10LzQtdC90YLRiyDQsiDQvtGC0LLQtdGC0LUsINC60L7RgtC%0YDRi9C1INC:0L7QtNC70LXQttCw0YIg0L7RhtC10L3QutC1IiwKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX3N1cGVyZmx1b3VzX3RleHQiOiAi0JfQsNC:0YDQtdGC0LjRgtC1INC40LfQsdGL0YLQvtGH0L3Ri9C1INGN0LvQtdC80LXQvdGC0Ysg0LIg0L7RgtCy0LXRgtC1INGB0YLRg9C00LXQvdGC0LAiLAoJCSJxdWl6emVzX3N0dWRpb19ncmFwaF92YWxpZGF0aW9uX29wdGlvbnNfc3VwZXJmbHVvdXNfaGVscGVyIjogItCa0L7Qu9C40YfQtdGB0YLQstC%INGN0LvQtdC80LXQvdGC0L7QsiDQsiDQvtGC0LLQtdGC0LUg0YHRgtGD0LTQtdC90YLQsCDQvdC1INC00L7Qu9C20L3QviDQv9GA0LXQstGL0YjQsNGC0Ywg0LrQvtC70LjRh9C10YHRgtCy0L4g0Y3Qu9C10LzQtdC90YLQvtCyINCyINC:0YDQsNCy0LjQu9GM0L3QvtC8INC%0YLQstC10YLQtS4iLAoJCSJxdWl6emVzX3N0dWRpb19ncmFwaF92YWxpZGF0aW9uX29wdGlvbnNfY29sb3JfdGV4dCI6ICLQodGA0LDQstC90LjRgtGMINGG0LLQtdGCIiwKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX2NvbG9yX2hlbHBlciI6ICLQrdC70LXQvNC10L3RgtGLINCyINC%0YLQstC10YLQtSDRgdGC0YPQtNC10L3RgtCwINC00L7Qu9C20L3RiyDQuNC80LXRgtGMINGC0LDQutC%0Lkg0LbQtSDRhtCy0LXRgiwg0LrQsNC6INCyINC:0YDQsNCy0LjQu9GM0L3QvtC8INC%0YLQstC10YLQtS4iLAoJCSJxdWl6emVzX3N0dWRpb19ncmFwaF92YWxpZGF0aW9uX29wdGlvbnNfbGluZV90eXBlX3RleHQiOiAi0KHRgNCw0LLQvdC40YLRjCDRgtC40L8g0LvQuNC90LjQuSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2dyYXBoX3ZhbGlkYXRpb25fb3B0aW9uc19saW5lX3R5cGVfaGVscGVyIjogItCb0LjQvdC40Lgg0L3QsCDRjdC70LXQvNC10L3RgtCw0YUg0LIg0L7RgtCy0LXRgtC1INGB0YLRg9C00LXQvdGC0LAg0LTQvtC70LbQvdGLINC40LzQtdGC0Ywg0YLQsNC60L7QuSDQttC1INGC0LjQvyAo0YHQv9C70L7RiNC90YvQtSwg0L:Rg9C90LrRgtC40YDQvdGL0LUpLCDQutCw0Log0LIg0L:RgNCw0LLQuNC70YzQvdC%0Lwg0L7RgtCy0LXRgtC1LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2dyYXBoX3ZhbGlkYXRpb25fb3B0aW9uc19zZWxlY3Rvcl9zZWxlY3RfYWxsIjogItCS0YHQtSDRjdC70LXQvNC10L3RgtGLIiwKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX3NlbGVjdG9yX2Rpc3RyaWJ1dGVfZ3JhZGVzIjogItCg0LDRgdC:0YDQtdC00LXQu9C40YLRjCDQvtGG0LXQvdC60LgiLAoJCSJxdWl6emVzX3N0dWRpb19ncmFwaF92YWxpZGF0aW9uX29wdGlvbnNfbG9hZGluZ19lbGVtZW50c19lcnJvciI6ICLQn9GA0Lgg0LfQsNCz0YDRg9C30LrQtSDRjdC70LXQvNC10L3RgtC%0LIg0LTQu9GPINC:0YDQvtCy0LXRgNC60Lgg0LPRgNCw0YTQuNC60LAg0L:RgNC%0LjQt9C%0YjQu9CwINC%0YjQuNCx0LrQsC4g0J:QvtC:0YDQvtCx0YPQudGC0LUg0LXRidC1INGA0LDQty4iLAoKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FsY21lX2xhYmVsIjogItCh0L7RgdGC0LDQstGM0YLQtSDQsNC70LPQvtGA0LjRgtC8INC00LvRjyDRhNC%0YDQvNC40YDQvtCy0LDQvdC40Y8g0YHQu9GD0YfQsNC50L3Ri9GFINC:0LXRgNC10LzQtdC90L3Ri9GFLCDRh9C40YHQtdC7LCDQstGL0YDQsNC20LXQvdC40LksINCz0YDQsNGE0LjQutC%0LIg0LjQu9C4INGE0YPQvdC60YbQuNC4OiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19hbGdvcml0aG1fbGFuZ3VhZ2VfbGFiZWwiOiAi0K:Qt9GL0Log0LDQu9Cz0L7RgNC40YLQvNCwIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX2xhYmVsIjogItCf0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1INCy0YvRhdC%0LTQvdGL0YUg0L:QtdGA0LXQvNC10L3QvdGL0YUiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfaGVscGVyX3RleHQiOiAi0J:RgNC40LzQtdGAOiAiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfZXhwcmVzc2lvbl9mb3JtYXRfbGFiZWwiOiAi0KTQvtGA0LzQsNGCINCy0YvRgNCw0LbQtdC90LjRjyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19pbWFnaW5hcnlfdW5pdF9sYWJlbCI6ICLQnNC90LjQvNCw0Y8g0LXQtNC40L3QuNGG0LAiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfaW1hZ2luYXJ5X3VuaXRfaV9sYWJlbCI6ICJpIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX2ltYWdpbmFyeV91bml0X2pfbGFiZWwiOiAiaiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc190aW1lc19vcGVyYXRvcl9sYWJlbCI6ICLQntC:0LXRgNCw0YLQvtGAINGD0LzQvdC%0LbQtdC90LjRjyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc190aW1lc19vcGVyYXRvcl9kb3RfbGFiZWwiOiAi0KLQvtGH0LrQsCBCNyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc190aW1lc19vcGVyYXRvcl9jcm9zc19sYWJlbCI6ICLQotC%0YfQutCwINC:0LXRgNC10YHQtdGH0LXQvdC40Y8gQyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc190aW1lc19vcGVyYXRvcl9pbnZpc2libGVfbGFiZWwiOiAi0J3QtdGP0LLQvdCw0Y8g0YTQvtGA0LzQsCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19udW1iZXJfZm9ybWF0X2xhYmVsIjogItCk0L7RgNC80LDRgiDRh9C40YHQu9CwIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX3ByZWNpc2lvbl9sYWJlbCI6ICLQotC40L8g0YLQvtGH0L3QvtGB0YLQuCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19wcmVjaXNpb25fZHJvcGRvd25fc2lnbmlmaWNhbnRfZmlndXJlc19sYWJlbCI6ICLQp9C40YHQu9C%INC30L3QsNGH0LDRidC40YUg0YbQuNGE0YAiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfcHJlY2lzaW9uX2Ryb3Bkb3duX2RlY2ltYWxfcGxhY2VzX2xhYmVsIjogItCn0LjRgdC70L4g0LTQtdGB0Y:RgtC40YfQvdGL0YUg0LfQvdCw0LrQvtCyIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX25vdGF0aW9uX2xhYmVsIjogItCf0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1INCy0YvRhdC%0LTQvdC%0LPQviDQt9C90LDRh9C10L3QuNGPIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX25vdGF0aW9uX2RlY2ltYWxfbGFiZWwiOiAi0JTQtdGB0Y:RgtC40YfQvdC%0LUiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfbm90YXRpb25fc2NpZW50aWZpY19sYWJlbCI6ICLQrdC60YHQv9C%0L3QtdC90YbQuNCw0LvRjNC90L7QtSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19ub3RhdGlvbl9hdXRvX2xhYmVsIjogItCQ0LLRgtC%0LzQsNGC0LjRh9C10YHQutC%0LUiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfZGVjaW1hbF9sYWJlbCI6ICLQlNC10YHRj9GC0LjRh9C90YvQuSDRgNCw0LfQtNC10LvQuNGC0LXQu9GMIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX2RlY2ltYWxfY29tbWFfbGFiZWwiOiAi0JfQsNC:0Y:RgtCw0Y8iLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfZGVjaW1hbF9wb2ludF9sYWJlbCI6ICLQotC%0YfQutCwIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX3Rob3VzYW5kc19sYWJlbCI6ICLQoNCw0LfQtNC10LvQuNGC0LXQu9GMINCz0YDRg9C:0L8g0LfQvdCw0LrQvtCyIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX3Rob3VzYW5kc19ub25lX2xhYmVsIjogItCe0YLRgdGD0YLRgdGC0LLRg9C10YIiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfdGhvdXNhbmRzX3NwYWNlX2xhYmVsIjogItCf0YDQvtCx0LXQuyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc190aG91c2FuZHNfY29tbWFfbGFiZWwiOiAi0JfQsNC:0Y:RgtCw0Y8iLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfdGhvdXNhbmRzX3BvaW50X2xhYmVsIjogItCi0L7Rh9C60LAiLAoKCQkicXVpenplc19zdHVkaW9fYXV4aWxpYXJfaW5pdGlhbF9jb250ZW50X2NhbGNtZV9sYWJlbCI6ICLQktCy0LXQtNC40YLQtSDQvdCw0YfQsNC70YzQvdC%0LUg0YHQvtC00LXRgNC20LjQvNC%0LUg0LTQu9GPINCy0YHQv9C%0LzQvtCz0LDRgtC10LvRjNC90L7Qs9C%INC60LDQu9GM0LrRg9C70Y:RgtC%0YDQsCBDYWxjTWU6IiwKCQkKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9jb3JyZWN0X2Fuc3dlcl9sYWJlbCI6ICLQn9GA0LDQstC40LvRjNC90YvQuSDQvtGC0LLQtdGCIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9jb3JyZWN0X2Fuc3dlcl9yZWdlbmVyYXRlX2Fuc3dlcl9idXR0b25fbGFiZWwiOiAi0J:QvtCy0YLQvtGA0L3QviDQs9C10L3QtdGA0LjRgNC%0LLQsNGC0Ywg0L7RgtCy0LXRgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fY29ycmVjdF9hbnN3ZXJfY29weV9hbnN3ZXJfYnV0dG9uX2xhYmVsIjogItCa0L7Qv9C40YDQvtCy0LDRgtGMINC%0YLQstC10YIiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2xhYmVsIjogItCe0YLQstC10YIg0YHRgtGD0LTQtdC90YLQsCIsCgoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2xhYmVsIjogItCX0LDQtNCw0LnRgtC1INC%0YLQstC10YIg0YHRgtGD0LTQtdC90YLQsCDQtNC70Y8g0L:RgNC%0YHQvNC%0YLRgNCwINC60L7QvNC80LXQvdGC0LDRgNC40Y8iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2NvcnJlY3RfbGFiZWwiOiAi0J:QoNCQ0JLQmNCb0KzQndCeIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19wYXJ0aWFsbHlfY29ycmVjdF9sYWJlbCI6ICLQp9CQ0KHQotCY0KfQndCeINCf0KDQkNCS0JjQm9Cs0J3QniIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfaW5jb3JyZWN0X2xhYmVsIjogItCd0JXQn9Cg0JDQktCY0JvQrNCd0J4iLAoKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fc3ludGF4X21hdGhfbGFiZWwiOiAi0JzQsNGC0LXQvNCw0YLQuNGH0LXRgdC60LjQuSDRgdC40L3RgtCw0LrRgdC40YEiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9zeW50YXhfZ3JhcGhpY19sYWJlbCI6ICLQk9GA0LDRhNC40YfQtdGB0LrQuNC5INGB0LjQvdGC0LDQutGB0LjRgSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX3N5bnRheF9zdHJpbmdfbGFiZWwiOiAi0KLQtdC60YHRgtC%0LLRi9C5INGB0LjQvdGC0LDQutGB0LjRgSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2VxdWl2YWxlbnRfbGl0ZXJhbF9sYWJlbCI6ICLQn9C%0YHQuNC80LLQvtC70YzQvdC%INGA0LDQstC10L0iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9lcXVpdmFsZW50X3N5bWJvbGljX2xhYmVsIjogItCc0LDRgtC10LzQsNGC0LjRh9C10YHQutC4INGA0LDQstC10L0iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9lcXVpdmFsZW50X2VxdWF0aW9uc19sYWJlbCI6ICLQrdC60LLQuNCy0LDQu9C10L3RgtC90YvQtSDRg9GA0LDQstC90LXQvdC40Y8iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9lcXVpdmFsZW50X2FsbF9sYWJlbCI6ICLQm9GO0LHQvtC5INC%0YLQstC10YIiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9lcXVpdmFsZW50X2Z1bmN0aW9uX2xhYmVsIjogItCk0YPQvdC60YbQuNGPINC%0YbQtdC90LrQuCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2VxdWl2YWxlbnRfZ3JhcGhpY19sYWJlbCI6ICLQk9C10L7QvNC10YLRgNC40YfQtdGB0LrQuCDRgNCw0LLQtdC9IiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfc2ltcGxpZmllZF9sYWJlbCI6ICLQo9C:0YDQvtGJ0LXQvdC90YvQuSDQstC40LQiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19leHBhbmRlZF9sYWJlbCI6ICLQoNCw0LfQstC10YDQvdGD0YLRi9C5INCy0LjQtCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2NoZWNrX2ZhY3Rvcml6ZWRfbGFiZWwiOiAi0KDQsNC30LvQvtC20LXQvdC90YvQuSDQvdCwINC80L3QvtC20LjRgtC10LvQuCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2NoZWNrX3JhdGlvbmFsaXplZF9sYWJlbCI6ICLQn9GA0LjQstC10LTQtdC90L3Ri9C5INC6INGA0LDRhtC40L7QvdCw0LvRjNC90L7QvNGDINCy0LjQtNGDIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfbm9fY29tbW9uX2ZhY3Rvcl9sYWJlbCI6ICLQndC10YIg0L7QsdGJ0LXQs9C%INC00LXQu9C40YLQtdC70Y8iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19taW5pbWFsX3JhZGljYW5kc19sYWJlbCI6ICLQnNC40L3QuNC80LDQu9GM0L3Ri9C1INC:0L7QtNC60L7RgNC10L3QvdGL0LUg0LLQtdC70LjRh9C40L3RiyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2NoZWNrX2NvbW1vbl9kZW5vbWluYXRvcl9sYWJlbCI6ICLQntCx0YnQuNC5INC30L3QsNC80LXQvdCw0YLQtdC70YwiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19zY2llbnRpZmljX25vdGF0aW9uX2xhYmVsIjogItCt0LrRgdC:0L7QvdC10L3RhtC40LDQu9GM0L3QvtC1INC:0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1IiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfZGVjaW1hbF9ub3RhdGlvbl9sYWJlbCI6ICLQlNC10YHRj9GC0LjRh9C90L7QtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2NoZWNrX3N5bWJvbGljX2xhYmVsIjogItCh0LjQvNCy0L7Qu9GM0L3Ri9C5INC%0YLQstC10YIiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19wcmVjaXNpb25fbGFiZWwiOiAi0J7RgiAke21pbn0g0LTQviAke21heH0gJHtyZWxhdGl2ZX0iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19wcmVjaXNpb25fbWluX2xhYmVsIjogItCd0LUg0LzQtdC90LXQtSAke21pbn0gJHtyZWxhdGl2ZX0iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19wcmVjaXNpb25fbWF4X2xhYmVsIjogItCd0LUg0LHQvtC70LXQtSAke21heH0gJHtyZWxhdGl2ZX0iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19wcmVjaXNpb25fZXF1YWxfbGFiZWwiOiAiJHttaW59ICR7cmVsYXRpdmV9IiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfcHJlY2lzaW9uX2RlY2ltYWxfcGxhY2VzX2xhYmVsIjogItGH0LjRgdC70L4g0LTQtdGB0Y:RgtC40YfQvdGL0YUg0LfQvdCw0LrQvtCyIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfcHJlY2lzaW9uX3NpZ25pZmljYW50X2ZpZ3VyZXNfbGFiZWwiOiAi0YfQuNGB0LvQviDQt9C90LDRh9Cw0YnQuNGFINGG0LjRhNGAIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfZXF1aXZhbGVudF91bml0c19sYWJlbCI6ICLQodGA0LDQstC90LXQvdC40LUg0LXQtNC40L3QuNGGINC40LfQvNC10YDQtdC90LjRjyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2NoZWNrX25vX3N1cGVyZmx1b3VzX2xhYmVsIjogItCd0LXRgiDQuNC30LHRi9GC0L7Rh9C90YvRhSDRjdC70LXQvNC10L3RgtC%0LIiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19jb2xvcl9sYWJlbCI6ICLQptCy0LXRgiIsCiAgCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfbGluZXN0eWxlX2xhYmVsIjogItCi0LjQvyDQu9C40L3QuNC4IiwKCgoJCSJxdWl6emVzX3N0dWRpb192aWV3X3NvdXJjZV9xdWVzdGlvbl94bWxfbGFiZWwiOiAiWE1MINCy0L7Qv9GA0L7RgdCwIiwKCQkicXVpenplc19zdHVkaW9fdmlld19zb3VyY2VfZ3JhbW1hcl91cmxfbGFiZWwiOiAiVVJMINCz0YDQsNC80LzQsNGC0LjQutC4IiwKCQkicXVpenplc19zdHVkaW9fdmlld19zb3VyY2VfcmVzZXJ2ZWRfd29yZHNfbGFiZWwiOiAi0JfQsNGA0LXQt9C10YDQstC40YDQvtCy0LDQvdC90YvQtSDRgdC70L7QstCwIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3N1bW1hcnlfdGl0bGUiOiAi0J:RgNC%0LLQtdGA0LrQsCDRgdC%0L7RgtCy0LXRgtGB0YLQstC40Y8g0Lgg0L:QtdGA0LXQvNC10L3QvdGL0LUiLAoJCSJxdWl6emVzX3N0dWRpb19zdW1tYXJ5X2lucHV0X21ldGhvZF90aXRsZSI6ICLQodC:0L7RgdC%0LEg0LLQstC%0LTQsCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3N1bW1hcnlfYWxsb3dlZF9pbnB1dF90aXRsZSI6ICLQlNC%0L:Rg9GB0YLQuNC80YvQuSDRgdC:0L7RgdC%0LEg0LLQstC%0LTQsCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3N1bW1hcnlfY29tcGFyaXNvbl90aXRsZSI6ICLQodGA0LDQstC90LXQvdC40LUiLAoJCSJxdWl6emVzX3N0dWRpb19zdW1tYXJ5X3Byb3BlcnRpZXNfdGl0bGUiOiAi0KHQstC%0LnRgdGC0LLQsCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3N1bW1hcnlfdmFyaWFibGVzX3RpdGxlIjogItCf0LXRgNC10LzQtdC90L3Ri9C1IiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3N1bW1hcnlfZnJvbV9wcmVjaXNpb25fbGFiZWwiOiAi0L7RgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3N1bW1hcnlfdXBfdG9fcHJlY2lzaW9uX2xhYmVsIjogItC00L4iLAoJCSJxdWl6emVzX3N0dWRpb19zdW1tYXJ5X3NpZ25pZmljYW50X2ZpZ3VyZXNfbGFiZWwiOiAi0YfQuNGB0LvQviDQt9C90LDRh9Cw0YnQuNGFINGG0LjRhNGAIiwKCQkicXVpenplc19zdHVkaW9fc3VtbWFyeV9kZWNpbWFsX3BsYWNlc19sYWJlbCI6ICLRh9C40YHQu9C%INC00LXRgdGP0YLQuNGH0L3Ri9GFINC30L3QsNC60L7QsiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3N1bW1hcnlfcGVyY2VudF9lcnJvcl9sYWJlbCI6ICLQvtGC0L3QvtGB0LjRgtC10LvRjNC90LDRjyDQv9C%0LPRgNC10YjQvdC%0YHRgtGMINCyICUiLAoJCSJxdWl6emVzX3N0dWRpb19zdW1tYXJ5X2Fic29sdXRlX2Vycm9yX2xhYmVsIjogItCw0LHRgdC%0LvRjtGC0L3QsNGPINC:0L7Qs9GA0LXRiNC90L7RgdGC0YwiLAoJCSJxdWl6emVzX3N0dWRpb19zdW1tYXJ5X2lubGluZV9oYW5kX2xhYmVsIjogItCS0YHRgtGA0L7QtdC90L3Ri9C5IE1hdGhUeXBlINGBINGA0YPQutC%0L:QuNGB0L3Ri9C8INCy0LLQvtC00L7QvCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3N1bW1hcnlfcHJlY2lzaW9uX2xhYmVsIjogItCi0L7Rh9C90L7RgdGC0YwiLAoJCSJxdWl6emVzX3N0dWRpb19zdW1tYXJ5X2hhc19hbGdvcml0aG1fbGFiZWwiOiAi0JjQvNC10LXRgiDQsNC70LPQvtGA0LjRgtC8IiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2ltcG9ydF9kaWFsb2dfdGl0bGUiOiAi0JjQvNC:0L7RgNGC0LjRgNC%0LLQsNGC0Ywg0LLQvtC:0YDQvtGBPyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2ltcG9ydF9kaWFsb2dfbGFiZWwiOiAi0JLQvtC:0YDQvtGBLCDQutC%0YLQvtGA0YvQuSDQstGLINGB0L7QsdC40YDQsNC10YLQtdGB0Ywg0L7RgtC60YDRi9GC0YwsINGB0L7QtNC10YDQttC40YIg0L3QtdGA0LXQutC%0LzQtdC90LTRg9C10LzRi9C1INGN0LvQtdC80LXQvdGC0YsuINCf0YDQvtGG0LXRgdGBINC40LzQv9C%0YDRgtCwINC80L7QttC10YIg0LLQvdC10YHRgtC4INC90LXQutC%0YLQvtGA0YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LIg0YDQsNCx0L7RgtGDINCy0L7Qv9GA0L7RgdCwLiDQndCw0YHRgtC%0Y:RgtC10LvRjNC90L4g0YDQtdC60L7QvNC10L3QtNGD0LXRgtGB0Y8g0YLRidCw0YLQtdC70YzQvdC%INC:0YDQvtCy0LXRgNC40YLRjCDQstC%0L:RgNC%0YEg0L:QvtGB0LvQtSDQuNC80L:QvtGA0YLQsC4iLAoJCSJxdWl6emVzX3N0dWRpb19pbXBvcnRfZGlhbG9nX2NvbmZpcm1fYnV0dG9uX2xhYmVsIjogItCf0YDQuNC90Y:RgtGMIiwKCQkicXVpenplc19zdHVkaW9faW1wb3J0X2RpYWxvZ19jYW5jZWxfYnV0dG9uX2xhYmVsIjogItCe0YLQvNC10L3QsCIsCgoJCSJxdWl6emVzX3N0dWRpb19yZWxldmFudF9vcHRpb25zX2RpYWxvZ190aXRsZSI6ICLQndC10YHQvtCy0LzQtdGB0YLQuNC80YvQtSDQv9Cw0YDQsNC80LXRgtGA0YsiLAoJCSJxdWl6emVzX3N0dWRpb19yZWxldmFudF9vcHRpb25zX2RpYWxvZ19sYWJlbCI6ICLQktGL0LHRgNCw0L3QvdGL0LUg0L:QsNGA0LDQvNC10YLRgNGLINC90LXRgdC%0LLQvNC10YHRgtC40LzRiyDRgSDRg9GC0LLQtdGA0LbQtNC10L3QuNGP0LzQuCDQuNC3INC:0YDQsNCy0LjQu9GM0L3QvtCz0L4g0L7RgtCy0LXRgtCwLiDQpdC%0YLQuNGC0LUg0L:RgNC%0LTQvtC70LbQuNGC0Yw:IiwKCQkicXVpenplc19zdHVkaW9fcmVsZXZhbnRfb3B0aW9uc19kaWFsb2dfY29uZmlybV9idXR0b25fbGFiZWwiOiAi0JTQsCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3JlbGV2YW50X29wdGlvbnNfZGlhbG9nX2NhbmNlbF9idXR0b25fbGFiZWwiOiAi0J3QtdGCIiwKCgkJImFuc3dlcl9maWVsZF9tYXRodHlwZV9wb3B1cF9idXR0b25fdG9vbHRpcCI6ICLQntGC0LrRgNGL0YLRjCDQvNCw0YLQtdC80LDRgtC40YfQtdGB0LrQuNC5INGA0LXQtNCw0LrRgtC%0YAgTWF0aFR5cGUiLAoJCQoJCSJwb3B1cF90ZXh0X2ZpZWxkX3dhcm5pbmdfdGl0bGUiOiAi0J3QtdGB0L7RhdGA0LDQvdC10L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPIiwKCQkicG9wdXBfdGV4dF9maWVsZF93YXJuaW5nX21lc3NhZ2UiOiAi0J:QvtGB0LvQtSDQt9Cw0LrRgNGL0YLQuNGPINGN0YLQvtCz0L4g0L7QutC90LAg0LLRgdC1INC90LXRgdC%0YXRgNCw0L3QtdC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQsdGD0LTRg9GCINGD0YLQtdGA0Y:QvdGLLiDQpdC%0YLQuNGC0LUg0L:RgNC%0LTQvtC70LbQuNGC0Yw:IiwKCQkicG9wdXBfdGV4dF9maWVsZF93YXJuaW5nX2FjY2VwdF9idXR0b25fbGFiZWwiOiAi0J:RgNC40L3Rj9GC0YwiLAoJCSJwb3B1cF90ZXh0X2ZpZWxkX3dhcm5pbmdfY2FuY2VsX2J1dHRvbl9sYWJlbCI6ICLQntGC0LzQtdC90LAiLAoJCSJwb3B1cF90ZXh0X2ZpZWxkX3dhcm5pbmdfc2F2ZV9hbmRfY2xvc2VfYnV0dG9uX2xhYmVsIjogItCh0L7RhdGA0LDQvdC40YLRjCDQuCDQt9Cw0LrRgNGL0YLRjCIsCgkJInBvcHVwX3RleHRfZmllbGRfd2FybmluZ19jbG9zZV93aXRob3V0X3NhdmluZ19idXR0b25fbGFiZWwiOiAi0JfQsNC60YDRi9GC0Ywg0LHQtdC3INGB0L7RhdGA0LDQvdC10L3QuNGPIiwKCQkKCQkiY2xpY2t0b2VkaXRhbGdvcml0aG0iOiAi0J3QsNC20LzQuNGC0LUg0LrQvdC%0L:QutGDLCDRh9GC0L7QsdGLINC30LDQs9GA0YPQt9C40YLRjCDQv9GA0LjQu9C%0LbQtdC90LjQtSBXaXJpcyBDQVMg0Lgg0LfQsNC:0YPRgdGC0LjRgtGMINC10LPQviDQtNC70Y8g0YDQtdC00LDQutGC0LjRgNC%0LLQsNC90LjRjyDQsNC70LPQvtGA0LjRgtC80LAg0LLQvtC:0YDQvtGB0LAuIiwKCQkicnVuY2FsY3VsYXRvciI6ICLQl9Cw0L:Rg9GB0Log0LrQsNC70YzQutGD0LvRj9GC0L7RgNCwIiwKCQkiY2xpY2t0b3J1bmNhbGN1bGF0b3IiOiAi0J3QsNC20LzQuNGC0LUg0LrQvdC%0L:QutGDLCDRh9GC0L7QsdGLINC30LDQs9GA0YPQt9C40YLRjCDQv9GA0LjQu9C%0LbQtdC90LjQtSBXaXJpcyBDQVMg0Lgg0LfQsNC:0YPRgdGC0LjRgtGMINC10LPQviDQtNC70Y8g0L:RgNC%0LLQtdC00LXQvdC40Y8g0L3QtdC%0LHRhdC%0LTQuNC80YvRhSDQstGL0YfQuNGB0LvQtdC90LjQuS4iLAoJCSJzZW5kaW5naW5pdGlhbHNlc3Npb24iOiAi0J:QtdGA0LXQtNCw0YfQsCDQvdCw0YfQsNC70YzQvdC%0LPQviDRgdC10LDQvdGB0LAuLi4iLAoJCSJ3YWl0aW5nZm9ydXBkYXRlcyI6ICLQntC20LjQtNCw0L3QuNC1INC%0LHQvdC%0LLQu9C10L3QuNC5Li4uIiwKCQkic2Vzc2lvbmNsb3NlZCI6ICLQktGB0LUg0LjQt9C80LXQvdC10L3QuNGPINGB0L7RhdGA0LDQvdC10L3RiyIsCgkJImdvdHNlc3Npb24iOiAi0JjQt9C80LXQvdC10L3QuNGPINGB0L7RhdGA0LDQvdC10L3RiyAo0LLQtdGA0YHQuNGPICR7bn0pLiIsCgkJInNob3djYXMiOiAi0JjRgdC:0L7Qu9GM0LfQvtCy0LDRgtGMIFdpcmlzIENBUyIsCgkJInNob3djYWxjbWUiOiAi0JjRgdC:0L7Qu9GM0LfQvtCy0LDRgtGMIENhbGNNZSIsCgkJImxlYXJubW9yZSI6ICLQlNC%0L:QvtC70L3QuNGC0LXQu9GM0L3QsNGPINC40L3RhNC%0YDQvNCw0YbQuNGPIiwKCgoJCSJjYXRhbGFuIjogIkNhdGFsw6AiLAoJCSJlbmdsaXNoIjogIkVuZ2xpc2giLAoJCSJzcGFuaXNoIjogIkVzcGHDsW9sIiwKCQkiZXN0aW9uaWFuIjogIkVlc3RpIiwKCQkiYmFzcXVlIjogIkV1c2thcmEiLAoJCSJmcmVuY2giOiAiRnJhbsOnYWlzIiwKCQkiZ2VybWFuIjogIkRldXRzY2giLAoJCSJpdGFsaWFuIjogIkl0YWxpYW5vIiwKCQkiZHV0Y2giOiAiTmVkZXJsYW5kcyIsCgkJInBvcnR1Z3Vlc2UiOiAiUG9ydHVndcOqcyAoUG9ydHVnYWwpIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19hbGdvcml0aG1fY29udmVydF90b19jYWxjbWVfYnV0dG9uX2xhYmVsIjogItCf0YDQtdC%0LHRgNCw0LfQvtCy0LDRgtGMINCyINGE0L7RgNC80LDRgiBDYWxjTWUiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfYWxnb3JpdGhtX2NvbnZlcnRfdG9fY2FsY21lX2Rlc2NyaXB0aW9uX2xhYmVsIjogItCQ0LvQs9C%0YDQuNGC0Lwg0LLQvtC:0YDQvtGB0LAg0LHRg9C00LXRgiDQuNC80L:QvtGA0YLQuNGA0L7QstCw0L0g0LjQtyBXaXJpcyBDQVMg0LIg0L3QsNGIINC90L7QstGL0Lkg0YDQtdC00LDQutGC0L7RgCDQsNC70LPQvtGA0LjRgtC80L7QsiBDYWxjTWUuINCf0L7Qu9GD0YfQtdC90L3Ri9C5INCw0LvQs9C%0YDQuNGC0Lwg0L3QtdC%0LHRhdC%0LTQuNC80L4g0LjRgdC:0YDQsNCy0LjRgtGMINC4INC:0YDQvtCy0LXRgNC40YLRjCDQsiDRgNGD0YfQvdC%0Lwg0YDQtdC20LjQvNC1LiDQkNC70LPQvtGA0LjRgtC80YssINC40LzQv9C%0YDRgtC40YDQvtCy0LDQvdC90YvQtSDQsiBDYWxjTWUsINC90LXQstC%0LfQvNC%0LbQvdC%INC%0YLQutGA0YvRgtGMINGBINC:0L7QvNC%0YnRjNGOIFdpcmlzIENBUy4g0JXRgdC70Lgg0YLRgNC10LHRg9C10YLRgdGPINC%0YLQvNC10L3QuNGC0Ywg0LjQvNC:0L7RgNGCINC:0L7RgdC70LUg0LXQs9C%INC:0YDQuNC90Y:RgtC40Y8sINC90LUg0YHQvtGF0YDQsNC90Y:QudGC0LUg0LLQvtC:0YDQvtGBOiDQvdCw0LbQvNC40YLQtSDQutC90L7Qv9C60YMg0L7RgtC80LXQvdGLINCyINC%0LrQvdC1IFdpcmlzIFF1aXp6ZXMgU3R1ZGlvINC4INC%0YLQutGA0L7QudGC0LUg0LXQs9C%INGB0L3QvtCy0LAuINCU0LvRjyDRgdC70L7QttC90YvRhSDQsNC70LPQvtGA0LjRgtC80L7QsiDRgSDQv9GA0L7Qs9GA0LDQvNC80L3QvtC5INC70L7Qs9C40LrQvtC5INC40YHQv9C%0LvRjNC30YPQudGC0LUg0YDQtdC20LjQvCDCq9Cf0YDQtdC%0LHRgNCw0LfQvtCy0LDRgtGMINC60LDQuiDQsNC70LPQvtGA0LjRgtC8wrssINGH0YLQvtCx0Ysg0L:QvtCy0YvRgdC40YLRjCDRjdGE0YTQtdC60YLQuNCy0L3QvtGB0YLRjCDQuCDRg9C:0YDQvtGB0YLQuNGC0Ywg0YDQsNCx0L7RgtGDLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19hbGdvcml0aG1fY29udmVydF90b19hbGdvcml0aG1fZGVzY3JpcHRpb25fbGFiZWwiOiAi0J:RgNC10L7QsdGA0LDQt9C%0LLQsNGC0Ywg0LrQsNC6INCw0LvQs9C%0YDQuNGC0LwiLAoKCQkiYW5zd2VyX2ZpZWxkX21hdGh0eXBlX3BvcHVwX2FjY2VwdF9kaWFsb2ciOiAi0J:RgNC40L3Rj9GC0YwiLAoJCSJhbnN3ZXJfZmllbGRfbWF0aHR5cGVfcG9wdXBfY2FuY2VsX2RpYWxvZyI6ICLQntGC0LzQtdC90LAiLAoJCQoJCSJzeW50YXhfZ3JhcGhpYyI6ICLQs9GA0LDRhNC40LrQsCIsCgkJInN5bnRheF9ncmFwaGljX2Rlc2NyaXB0aW9uIiA6IijQs9GA0LDRhNC40LrQuCwg0LPQtdC%0LzQtdGC0YDQuNGH0LXRgdC60LjQtSDRjdC70LXQvNC10L3RgtGLLi4uKSIsCgkJInN5bnRheF9ncmFwaGljX2NvcmVjdF9mZWVkYmFjayI6ICLQodC40L3RgtCw0LrRgdC40YEg0L7RgtCy0LXRgtCwINGP0LLQu9GP0LXRgtGB0Y8g0L:RgNCw0LLQuNC70YzQvdGL0LwiLAoJCgkJImNoZWNrX2NvbG9yIjogItGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCINC:0L4g0YbQtdC90YLRgNGDIiwKCQkiY2hlY2tfbGluZXN0eWxlIjogItGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCINC:0L4g0YLQuNC:0YMg0LvQuNC90LjQuSIsCgkJImNoZWNrX25vX3N1cGVyZmx1b3VzIjogItC90LUg0YHQvtC00LXRgNC20LjRgiDQuNC30LHRi9GC0L7Rh9C90YvRhSDRjdC70LXQvNC10L3RgtC%0LIiLAoJCgkJImVxdWl2YWxlbnRfZ3JhcGhpYyI6ICLQs9C10L7QvNC10YLRgNC40YfQtdGB0LrQuCDRgNCw0LLQtdC9IiwKCQkiZXF1aXZhbGVudF9ncmFwaGljX2NvcnJlY3RfZmVlZGJhY2siOiAi0J7RgtCy0LXRgiDQs9C10L7QvNC10YLRgNC40YfQtdGB0LrQuCDRgNCw0LLQtdC9IiwKCgkJInBhcmFtZXRlciI6ICLQv9Cw0YDQsNC80LXRgtGAIiwKCQkiYW5zd2VyIjogItC%0YLQstC10YIiLAoKCQkicXVpenplc19zdHVkaW9faG9tZV9jb3B5X2luaXRpYWxfY29udGVudF9idXR0b25fdGV4dCI6ICLQmtC%0L:QuNGA0L7QstCw0YLRjCDQuNC3INC90LDRh9Cw0LvRjNC90L7Qs9C%INGB0L7QtNC10YDQttC40LzQvtCz0L4iLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2NvcHlfY29ycmVjdF9hbnN3ZXJfYnV0dG9uX3RleHQiOiAi0JrQvtC:0LjRgNC%0LLQsNGC0Ywg0LjQtyDQv9GA0LDQstC40LvRjNC90L7Qs9C%INC%0YLQstC10YLQsCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYW5zd2VyX3R5cGVfZ2VvbWV0cnlfbGFiZWwiOiAi0J:Qu9C%0YLRgtC10YAiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2Fuc3dlcl90eXBlX3N0YXRpc3RpY2FsX2NoYXJ0c19sYWJlbCI6ICLQodGC0LDRgtC40YHRgtC40YfQtdGB0LrQuNC1INC00LjQsNCz0YDQsNC80LzRiyIsCgkJCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfY29ycmVjdF9hbnN3ZXJfZGVzY3JpcHRpb25fbWF0aCI6ICLQktCy0LXQtNC40YLQtSDQv9GA0LDQstC40LvRjNC90YvQuSDQvtGC0LLQtdGCINC90LAg0LTQsNC90L3Ri9C5INCy0L7Qv9GA0L7RgS4g0JrRgNC40YLQtdGA0LjQuCDQtdCz0L4g0YHRgNCw0LLQvdC10L3QuNGPINGBINC%0YLQstC10YLQvtC8INCy0LDRiNC40YUg0YHRgtGD0LTQtdC90YLQvtCyINC80L7QttC90L4g0LjQt9C80LXQvdC40YLRjCwg0LjRgdC:0L7Qu9GM0LfRg9GPINC80LXQvdGOINC:0LDRgNCw0LzQtdGC0YDQvtCyINC:0YDQvtCy0LXRgNC60Lgg0YHQvtC%0YLQstC10YLRgdGC0LLQuNGPLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfY29ycmVjdF9hbnN3ZXJfZGVzY3JpcHRpb25fZ3JhcGhpYyI6ICLQktCy0LXQtNC40YLQtSDQv9GA0LDQstC40LvRjNC90YvQuSDQvtGC0LLQtdGCINC90LAg0LTQsNC90L3Ri9C5INCy0L7Qv9GA0L7RgS4g0J:QvtGA0Y:QtNC%0Log0LXQs9C%INGB0YDQsNCy0L3QtdC90LjRjyDRgSDQvtGC0LLQtdGC0L7QvCDQstCw0YjQuNGFINGB0YLRg9C00LXQvdGC0L7Qsiwg0LAg0YLQsNC60LbQtSDRjdC70LXQvNC10L3RgtGLLCDQv9C%0LTQu9C10LbQsNGJ0LjQtSDQvtGG0LXQvdC60LUsINC80L7QttC90L4g0LjQt9C80LXQvdC40YLRjCwg0LjRgdC:0L7Qu9GM0LfRg9GPINC80LXQvdGOINC90LDRgdGC0YDQvtC10LouIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9jb3JyZWN0X2Fuc3dlcl9kZXNjcmlwdGlvbl90ZXh0IjogItCS0LLQtdC00LjRgtC1INC:0YDQsNCy0LjQu9GM0L3Ri9C5INC%0YLQstC10YIg0L3QsCDQtNCw0L3QvdGL0Lkg0LLQvtC:0YDQvtGBLiDQmtGA0LjRgtC10YDQuNC4INC10LPQviDRgdGA0LDQstC90LXQvdC40Y8g0YEg0L7RgtCy0LXRgtC%0Lwg0LLQsNGI0LjRhSDRgdGC0YPQtNC10L3RgtC%0LIg0LzQvtC20L3QviDQuNC30LzQtdC90LjRgtGMLCDQuNGB0L:QvtC70YzQt9GD0Y8g0LzQtdC90Y4g0L:QsNGA0LDQvNC10YLRgNC%0LIg0L:RgNC%0LLQtdGA0LrQuCDRgdC%0L7RgtCy0LXRgtGB0YLQstC40Y8uIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9pbml0aWFsX2NvbnRlbnRfZGVzY3JpcHRpb25fbWF0aCI6ICLQrdGC0L4g0L3QsNGH0LDQu9GM0L3Ri9C5INCy0LjQtCDQvNCw0YLQtdC80LDRgtC40YfQtdGB0LrQvtCz0L4g0YDQtdC00LDQutGC0L7RgNCwLCDQutC%0YLQvtGA0YvQuSDQv9GA0LXQtNGB0YLQsNCy0LvRj9C10YLRgdGPINGB0YLRg9C00LXQvdGC0LDQvCDQv9GA0Lgg0L:QvtC:0YvRgtC60LUg0L7RgtCy0LXRgtC40YLRjCDQvdCwINCy0L7Qv9GA0L7RgS4g0KEg0LXQs9C%INC:0L7QvNC%0YnRjNGOINC80L7QttC90L4g0YHQvtC30LTQsNGC0Ywg0YHRgtGA0YPQutGC0YPRgNGDINC00LvRjyDQuNGFINC%0YLQstC10YLQvtCyINC40LvQuCDQv9C%0LTQs9C%0YLQvtCy0LjRgtGMINC:0L7Qu9GPINC00LvRjyDQstCy0L7QtNCwINC00LDQvdC90YvRhS4iLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2luaXRpYWxfY29udGVudF9kZXNjcmlwdGlvbl9ncmFwaGljIjogItCt0YLQviDQvdCw0YfQsNC70YzQvdGL0Lkg0LLQuNC0INCz0YDQsNGE0LjRh9C10YHQutC%0LPQviDRgNC10LTQsNC60YLQvtGA0LAsINC60L7RgtC%0YDRi9C5INC:0YDQtdC00YHRgtCw0LLQu9GP0LXRgtGB0Y8g0YHRgtGD0LTQtdC90YLQsNC8INC:0YDQuCDQv9C%0L:Ri9GC0LrQtSDQvtGC0LLQtdGC0LjRgtGMINC90LAg0LLQvtC:0YDQvtGBLiDQrdC70LXQvNC10L3RgtGLINC:0LDQvdC10LvQuCDQuNC90YHRgtGA0YPQvNC10L3RgtC%0LIsINC%0YLQvtCx0YDQsNC20LDQtdC80YvQtSDQsiDQstCw0YDQuNCw0L3RgtCw0YUg0LLQstC%0LTQsCwg0LzQvtC20L3QviDQvdCw0YHRgtGA0LDQuNCy0LDRgtGMLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfaW5pdGlhbF9jb250ZW50X2Rlc2NyaXB0aW9uX3RleHQiOiAi0K3RgtC%INC90LDRh9Cw0LvRjNC90YvQuSDQstC40LQg0YLQtdC60YHRgtC%0LLQvtCz0L4g0YDQtdC00LDQutGC0L7RgNCwLCDQutC%0YLQvtGA0YvQuSDQv9GA0LXQtNGB0YLQsNCy0LvRj9C10YLRgdGPINGB0YLRg9C00LXQvdGC0LDQvCDQv9GA0Lgg0L:QvtC:0YvRgtC60LUg0L7RgtCy0LXRgtC40YLRjCDQvdCwINCy0L7Qv9GA0L7RgS4g0J7RgtCy0LXRgtGLINGN0YLQvtCz0L4g0YLQuNC:0LAg0L3QtSDQvtGG0LXQvdC40LLQsNGO0YLRgdGPINC80LDRgtC10LzQsNGC0LjRh9C10YHQutC40LzQuCDQvNC10YLQvtC00LDQvNC4LiIsCgkJCQkKCQkicXVpenplc19zdHVkaW9faG9tZV9wcm9kdWN0X21lc3NhZ2VfaGVhZGVyX2xhYmVsIjogItCS0Ysg0LjRgdC:0L7Qu9GM0LfRg9C10YLQtSBXaXJpc1F1aXp6ZXMgNC42IiwKCQkicXVpenplc19zdHVkaW9faG9tZV9wcm9kdWN0X21lc3NhZ2VfdGV4dF9sYWJlbCI6ICLQotC10L:QtdGA0Ywg0LLRiyDQvNC%0LbQtdGC0LUg0LLQvtGB0L:QvtC70YzQt9C%0LLQsNGC0YzRgdGPINC90LDRiNC10Lkg0L3QvtCy0L7QuSDRhNGD0L3QutGG0LjQtdC5INC%0L:RgNC10LTQtdC70LXQvdC40Y8g0YHQu9GD0YfQsNC50L3Ri9GFINC:0LXRgNC10LzQtdC90L3Ri9GFLCDQutC%0YLQvtGA0LDRjyDQv9C%0LfQstC%0LvRj9C10YIg0LHRi9GB0YLRgNC10LUg0Lgg0L:RgNC%0YnQtSDRgdC%0LfQtNCw0LLQsNGC0Ywg0LTQuNC90LDQvNC40YfQtdGB0LrQuNC1INCy0L7Qv9GA0L7RgdGLLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcHJvZHVjdF9tZXNzYWdlX3JlbGVhc2Vfbm90ZXNfbGluayI6ICLQmNC30YPRh9C40YLRjCDQvdCw0YjQuCDQv9GA0LjQvNC10YfQsNC90LjRjyDQuiDQstC10YDRgdC40LguIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9wcm9kdWN0X21lc3NhZ2VfZ2l2ZV91c19mZWVkYmFja19saW5rIjogItCe0YHRgtCw0LLQuNGC0Ywg0L7RgtC30YvQsi4iLAkJCgoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfaW5pdGlhbF9jb250ZW50X2xhYmVsIjogItCd0LDRh9Cw0LvRjNC90L7QtSDRgdC%0LTQtdGA0LbQuNC80L7QtSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9sb2NrX2luaXRpYWxfY29udGVudF9sYWJlbCI6ICLQl9Cw0LHQu9C%0LrQuNGA0L7QstCw0YLRjCDQvdCw0YfQsNC70YzQvdC%0LUg0YHQvtC00LXRgNC20LjQvNC%0LUiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfbG9ja19pbml0aWFsX2NvbnRlbnRfaGVscGVyX3RleHQiOiAi0JfQsNC:0YDQtdGJ0LDQtdGCINGB0YLRg9C00LXQvdGC0YMg0LjQt9C80LXQvdGP0YLRjCDQvtGC0LLQtdGCINC30LAg0L:RgNC10LTQtdC70LDQvNC4INC:0YPRgdGC0YvRhSDQv9C%0LvQtdC5INC00LvRjyDQt9Cw0L:QvtC70L3QtdC90LjRjywg0L7RgdGC0LDQstC70LXQvdC90YvRhSDQsiDQvdCw0YfQsNC70YzQvdC%0Lwg0YHQvtC00LXRgNC20LjQvNC%0LwuINCSINGN0YLQvtC8INGA0LXQttC40LzQtSDRgdGC0YPQtNC10L3RgiDQvNC%0LbQtdGCINC70LjRiNGMINC30LDQv9C%0LvQvdGP0YLRjCDQv9C%0LvRjyDQsiDQvdCw0YfQsNC70YzQvdC%0Lwg0YHQvtC00LXRgNC20LjQvNC%0LwuIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9kaXNwbGF5X3NldHRpbmdzX2xhYmVsIjogItCd0LDRgdGC0YDQvtC50LrQuCDQvtGC0L7QsdGA0LDQttC10L3QuNGPIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX2Rpc3BsYXlfc2V0dGluZ3NfbGFiZWxfbmFtZSI6ICLQntGC0L7QsdGA0LDQttC10L3QuNC1INC90LDQt9Cy0LDQvdC40Lkg0LzQtdGC0L7QuiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9kaXNwbGF5X3NldHRpbmdzX2xhYmVsX3ZhbHVlIjogItCe0YLQvtCx0YDQsNC20LXQvdC40LUg0LfQvdCw0YfQtdC90LjQuSDQvNC10YLQvtC6IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX2Rpc3BsYXlfc2V0dGluZ3NfaGVscGVyX3RleHQiOiAi0JLRi9Cx0LXRgNC40YLQtSDQvdCw0YHRgtGA0L7QudC60YMg0L7RgtC%0LHRgNCw0LbQtdC90LjRjyDQtNC70Y8g0L3QsNC30LLQsNC90LjQuSDQuCDQt9C90LDRh9C10L3QuNC5INC80LXRgtC%0LouINCS0Ysg0LzQvtC20LXRgtC1INC%0L:RgNC10LTQtdC70LjRgtGMLCDQutC%0LPQtNCwINGD0YfQsNGJ0LjQudGB0Y8g0LHRg9C00LXRgiDQstC40LTQtdGC0Ywg0LfQvdCw0YfQtdC90LjRjyDQvNC10YLQvtC6OiDQstGB0LXQs9C00LAsINC90LjQutC%0LPQtNCwINC40LvQuCDQutC%0LPQtNCwINC%0L3QuCDQsiDRhtC10L3RgtGA0LUg0LLQvdC40LzQsNC90LjRjy4iLAoJCSJhbHdheXMiOiAi0JLRgdC10LPQtNCwIiwKCQkiZm9jdXMiOiAi0JIg0YbQtdC90YLRgNC1INCy0L3QuNC80LDQvdC40Y8iLAoJCSJuZXZlciI6ICLQndC40LrQvtCz0LTQsCIsCgoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfbWFnbmV0aWNfZ3JpZF9sYWJlbCI6ICLQndCw0YHRgtGA0L7QudC60Lgg0LzQsNCz0L3QuNGC0L3QvtC5INGB0LXRgtC60LgiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfbWFnbmV0aWNfZ3JpZF9sYWJlbF90ZXh0IjogItCS0YvQsdC10YDQuNGC0LUg0LLQsNGA0LjQsNC90YIg0LzQsNCz0L3QuNGC0L3QvtC5INGB0LXRgtC60Lgg0LTQu9GPINC:0L7Qu9GPINC%0YLQstC10YLQsCDRg9GH0LDRidC10LPQvtGB0Y8uIiwKCQkiZm9yY2UiOiAi0J:RgNC40LzQtdC90LjRgtGMIiwKCQkic25hcCI6ICLQodC90LjQvNC%0LoiLAoJCSJkaXNhYmxlZCI6ICLQntGC0LrQu9GO0YfQtdC90L4iLAoKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVzX3RpdGxlIjogItCh0LvRg9GH0LDQudC90YvQtSDQv9C10YDQtdC80LXQvdC90YvQtSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlc190aXRsZV9iYXNpY19tb2RlIjogItCe0YHQvdC%0LLQvdC%0Lkg0YDQtdC20LjQvCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYWR2YW5jZWRfcmFuZG9tX3ZhcmlhYmxlc19idXR0b25fdGV4dCI6ICLQoNCw0YHRiNC40YDQtdC90L3Ri9C5INGA0LXQttC40LwiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2FkdmFuY2VkX3JhbmRvbV92YXJpYWJsZXNfYnV0dG9uX3RleHRfc3RyaW5nX3N5bnRheCI6ICLQodC70YPRh9Cw0LnQvdGL0LUg0L:QtdGA0LXQvNC10L3QvdGL0LUiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZXNfZGVzY3JpcHRpb25fdGV4dCI6ICLQodC00LXQu9Cw0LnRgtC1INGB0LLQvtC4INCy0L7Qv9GA0L7RgdGLINC00LjQvdCw0LzQuNGH0LXRgdC60LjQvNC4LCDQtNC%0LHQsNCy0LjQsiDQsiDRhNC%0YDQvNGD0LvQuNGA0L7QstC60YMg0LLQvtC:0YDQvtGB0LAg0YHQu9GD0YfQsNC50L3Ri9C1INC:0LXRgNC10LzQtdC90L3Ri9C1LiDQndC1INC30LDQsdGD0LTRjNGC0LUg0LTQvtCx0LDQstC40YLRjCDRjdGC0Lgg0L:QtdGA0LXQvNC10L3QvdGL0LUg0Lgg0LIg0L:RgNCw0LLQuNC70YzQvdGL0Lkg0L7RgtCy0LXRgiwg0LAg0LXRgdC70Lgg0L3Rg9C20L3Qviwg0YfRgtC%0LHRiyDQvtC90Lgg0YPRh9Cw0YHRgtCy0L7QstCw0LvQuCDQsiDQvtGG0LXQvdC60LUsINGC0L7Qs9C00LAg0LTQvtCx0LDQstGM0YLQtSDQutC%0LzQsNC90LTRgyDCq9C%0YbQtdC90LjQstCw0YLRjMK7LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlc19zaW1wbGVfYWxnb3JpdGhtX3RleHQiOiAi0KHQtNC10LvQsNC50YLQtSDRgdCy0L7QuCDQstC%0L:RgNC%0YHRiyDQtNC40L3QsNC80LjRh9C10YHQutC40LzQuCwg0LTQvtCx0LDQstC40LIg0LIg0YTQvtGA0LzRg9C70LjRgNC%0LLQutGDINCy0L7Qv9GA0L7RgdCwINGB0LvRg9GH0LDQudC90YvQtSDQv9C10YDQtdC80LXQvdC90YvQtS4g0J3QtSDQt9Cw0LHRg9C00YzRgtC1INC00L7QsdCw0LLQuNGC0Ywg0Y3RgtC4INC:0LXRgNC10LzQtdC90L3Ri9C1INC4INCyINC:0YDQsNCy0LjQu9GM0L3Ri9C5INC%0YLQstC10YIsINCwINC10YHQu9C4INC90YPQttC90L4sINGH0YLQvtCx0Ysg0L7QvdC4INGD0YfQsNGB0YLQstC%0LLQsNC70Lgg0LIg0L7RhtC10L3QutC1LCDRgtC%0LPQtNCwINC00L7QsdCw0LLRjNGC0LUg0LrQvtC80LDQvdC00YMgwqvQvtGG0LXQvdC40LLQsNGC0YzCuy4iLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZXNfc3RyaW5nX3N5bnRheF90ZXh0IjogItCn0YLQvtCx0Ysg0YHQvtGB0YLQsNCy0LjRgtGMINCw0LvQs9C%0YDQuNGC0Lwg0LTQu9GPINCz0LXQvdC10YDQsNGG0LjQuCDRgdC70YPRh9Cw0LnQvdGL0YUg0L:QtdGA0LXQvNC10L3QvdGL0YUsINC40YHQv9C%0LvRjNC30YPQudGC0LUgQ2FsY01lISIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlc19hZGRfbmV3X2J1dHRvbl90ZXh0IjogIisg0JTQvtCx0LDQstC40YLRjCDQv9C10YDQtdC80LXQvdC90YPRjiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlc19jb21wbGV4X2FsZ29yaXRobV90ZXh0IjogItCS0Ysg0YHQvtC30LTQsNC10YLQtSDRgdC70L7QttC90YvQuSDQsNC70LPQvtGA0LjRgtC8LCDQuNGB0L:QvtC70YzQt9GD0LnRgtC1INGA0LDRgdGI0LjRgNC10L3QvdGL0Lkg0YDQtdC20LjQvCEiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZXNfaGVscF9idXR0b24iOiAi0JTQvtC60YPQvNC10L3RgtCw0YbQuNGPINC:0L4g0YHQu9GD0YfQsNC50L3Ri9C8INC:0LXRgNC10LzQtdC90L3Ri9C8IiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlX3Jvd192YXJpYWJsZV9uYW1lX3RleHQiOiAi0JjQvNGPINC:0LXRgNC10LzQtdC90L3QvtC5IiwKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVfcm93X3ByZWZpeF90ZXh0IjogIiMiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZV90eXBlX3RleHQiOiAi0Y:QstC70Y:QtdGC0YHRjyDRhtC10LvRi9C8INGH0LjRgdC70L7QvCDQsiDQtNC40LDQv9Cw0LfQvtC90LUg0L7RgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlX21pbl92YWx1ZV90ZXh0IjogItC80LjQvS4g0LfQvdCw0YfQtdC90LjRjyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlX3Jvd19hbmRfdGV4dCI6ICLQtNC%IiwKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVfbWF4X3ZhbHVlX3RleHQiOiAi0LzQsNC60YEuINC30L3QsNGH0LXQvdC40Y8iLAoKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVfbmFtZV9hbHJlYWR5X3VzZWRfZXJyb3IiOiAi0JjQvNGPINC:0LXRgNC10LzQtdC90L3QvtC5INGD0LbQtSDQuNGB0L:QvtC70YzQt9GD0LXRgtGB0Y8hIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVfbnVtYmVyX25vdF9pbnRlZ2VyX2Vycm9yIjogItCd0LUg0Y:QstC70Y:QtdGC0YHRjyDRhtC10LvRi9C8INGH0LjRgdC70L7QvCEiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZV9pbnZhbGlkX25hbWVfZXJyb3IiOiAi0J3QtdC00L7Qv9GD0YHRgtC40LzQvtC1INC40LzRjyDQv9C10YDQtdC80LXQvdC90L7QuSEiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZV9tYXhfdmFsdWVfZXJyb3IiOiAi0JzQsNC60YEuINC30L3QsNGH0LXQvdC40LUg0LTQvtC70LbQvdC%INCx0YvRgtGMINCx0L7Qu9GM0YjQtSEiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZV9uYW1lX21pc3NpbmdfZXJyb3IiOiAi0JjQvNGPINC:0LXRgNC10LzQtdC90L3QvtC5INC%0YLRgdGD0YLRgdGC0LLRg9C10YIiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZV9tYXhfdmFsdWVfbWlzc2luZ19lcnJvciI6ICLQnNCw0LrRgS4g0LfQvdCw0YfQtdC90LjQtSDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVfbWluX3ZhbHVlX21pc3NpbmdfZXJyb3IiOiAi0JzQuNC9LiDQt9C90LDRh9C10L3QuNC1INC%0YLRgdGD0YLRgdGC0LLRg9C10YIiLAoJCQoJCSJldmFsdWF0ZV9rZXl3b3JkIjogItC%0YbQtdC90LjQstCw0YLRjCIsCgkJCgkJImhvbWVfZ2V0dGluZ19zdGFydGVkX3dlbGNvbWVfaGVhZGVyX3RleHQiOiAi0J:RgNC10LTRgdGC0LDQstC70LXQvdC40LUgV2lyaXNRdWl6emVzIDQuOC4wOiDRgtC10L:QtdGA0Ywg0YEg0L7RgtCy0LXRgtCw0LzQuCDRgSDQv9C%0LTQtNC10YDQttC60L7QuSDRgNGD0LrQvtC:0LjRgdC90L7Qs9C%INCy0LLQvtC00LAg0LPRgNCw0YTQuNC60L7QsiIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19zdGFydGVkX3dlbGNvbWVfZGVzY3JpcHRpb25fdGV4dCI6ICLQoSDRgNCw0LTQvtGB0YLRjNGOINC:0YDQtdC00YHRgtCw0LLQu9GP0LXQvCDQvdC%0LLRi9C5INGC0LjQvyDQvtGC0LLQtdGC0L7Qsiwg0LrQvtGC0L7RgNGL0Lkg0L:QvtC30LLQvtC70Y:QtdGCINGB0YLRg9C00LXQvdGC0LDQvCDQvtGC0LLQtdGH0LDRgtGMINC90LAg0LLQvtC:0YDQvtGB0YssINC40YHQv9C%0LvRjNC30YPRjyDRgNGD0LrQvtC:0LjRgdC90YvQuSDQstCy0L7QtCDQs9GA0LDRhNC40LrQvtCyLiDQp9GC0L7QsdGLINC:0L7Qu9GD0YfQuNGC0Ywg0LTQvtC:0L7Qu9C90LjRgtC10LvRjNC90YPRjiDQuNC90YTQvtGA0LzQsNGG0LjRjiDQvtCxINGN0YLQvtC5INCy0L7Qt9C80L7QttC90L7RgdGC0LgsINC%0LfQvdCw0LrQvtC80YzRgtC10YHRjCDRgSDQvdCw0YjQuNC80Lgg0L:RgNC40LzQtdGH0LDQvdC40Y:QvNC4INC6INCy0LXRgNGB0LjQuCDQuCDQtNC%0LrRg9C80LXQvdGC0LDRhtC40LXQuS4g0J3QsNC00LXQtdC80YHRjywg0LLRiyDQuCDQstCw0YjQuCDRgdGC0YPQtNC10L3RgtGLINC:0L4g0LTQvtGB0YLQvtC40L3RgdGC0LLRgyDQvtGG0LXQvdC40YLQtSDRjdGC0L4g0L3QvtCy0L7QstCy0LXQtNC10L3QuNC1INCyIFdpcmlzUXVpenplcyEiLAogICAgICAgICJob21lX2dldHRpbmdfc3RhcnRlZF9yZWxlYXNlX25vdGVzX2J1dHRvbl90ZXh0IjogItCf0YDQuNC80LXRh9Cw0L3QuNGPINC6INCy0LXRgNGB0LjQuCIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19naXZlX3VzX2ZlZWRiYWNrX2J1dHRvbl90ZXh0IjogItCe0YHRgtCw0LLQuNGC0Ywg0L7RgtC30YvQsiIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19zdGFydGVkX2NyZWF0ZV9xdWVzdGlvbl9oZWFkZXJfdGV4dCI6ICLQmtCw0Log0YHQvtC30LTQsNGC0Ywg0L:QtdGA0LLRi9C5INCy0L7Qv9GA0L7RgSIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19zdGFydGVkX2NyZWF0ZV9xdWVzdGlvbl90ZXh0IjogItCY0LfRg9GH0LjRgtC1INC:0L7RgNGP0LTQvtC6INGB0L7Qt9C00LDQvdC40Y8g0LLQvtC:0YDQvtGB0LAg0LIgV2lyaXNRdWl6emVzLCDQsCDRgtCw0LrQttC1INGB0L:QvtGB0L7QsdGLINC40YHQv9C%0LvRjNC30L7QstCw0L3QuNGPINC10LPQviDRhNGD0L3QutGG0LjQuSDQv9GA0L7QstC10YDQutC4INGB0L7QvtGC0LLQtdGC0YHRgtCy0LjRjy4iLAogICAgICAgICJob21lX2dldHRpbmdfc3RhcnRlZF9jcmVhdGVfcmFuZG9tX3F1ZXN0aW9uX2hlYWRlcl90ZXh0IjogItCa0LDQuiDRgdC%0LfQtNCw0YLRjCDRgdC70YPRh9Cw0LnQvdGL0Lkg0LLQvtC:0YDQvtGBIiwKICAgICAgICAiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfY3JlYXRlX3JhbmRvbV9xdWVzdGlvbl90ZXh0IjogItCj0LfQvdCw0LnRgtC1LCDQvdCw0YHQutC%0LvRjNC60L4g0L:RgNC%0YHRgtC%INGB0L7Qt9C00LDRgtGMINGB0LvRg9GH0LDQudC90YvQuSDQstC%0L:RgNC%0YEg0LIgV2lyaXNRdWl6emVzLCDQuNGB0L:QvtC70YzQt9GD0Y8g0L7RgdC90L7QstC90L7QuSDQuCDRgNCw0YHRiNC40YDQtdC90L3Ri9C5INGA0LXQttC40LzRiy4iLAogICAgICAgICJob21lX2dldHRpbmdfc3RhcnRlZF90cmFpbmluZ19wYW5lbF9oZWFkZXJfdGV4dCI6ICLQo9C30L3QsNC50YLQtSDQstGB0LUg0L4gV2lyaXNRdWl6emVzLCDQv9GA0L7QudC00Y8g0L3QsNGI0LUg0LHQtdGB0L:Qu9Cw0YLQvdC%0LUg0L7QsdGD0YfQtdC90LjQtSIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19zdGFydGVkX3RyYWluaW5nX3BhbmVsX3RleHQiOiAi0JzRiyDQv9GA0LXQtNC%0YHRgtCw0LLQu9GP0LXQvCDQstC%0LfQvNC%0LbQvdC%0YHRgtGMINC:0YDQvtC50YLQuCDQsdC10YHQv9C70LDRgtC90L7QtSDRgdCw0LzQvtC%0LHRg9GH0LXQvdC40LUsINCwINGC0LDQutC20LUg0L:Qu9Cw0YLQvdC%0LUg0L7QsdGD0YfQtdC90LjQtSwg0LrQvtGC0L7RgNC%0LUg0L:QvtC30LLQvtC70Y:QtdGCINC40LfRg9GH0LjRgtGMINCy0YHQtSDQstC%0LfQvNC%0LbQvdC%0YHRgtC4INC4INGA0LDRgdGI0LjRgNC10L3QvdGL0LUg0L3QsNGB0YLRgNC%0LnQutC4IFdpcmlzUXVpenplcy4iLAogICAgICAgICJob21lX2dldHRpbmdfc3RhcnRlZF9sZWFybl9tb3JlX2J1dHRvbl90ZXh0IjogItCU0L7Qv9C%0LvQvdC40YLQtdC70YzQvdCw0Y8g0LjQvdGE0L7RgNC80LDRhtC40Y8iLAogICAgICAgICJob21lX2dldHRpbmdfc3RhcnRlZF9iYXNpY19tb2RlX2J1dHRvbl90ZXh0IjogItCe0YHQvdC%0LLQvdC%0Lkg0YDQtdC20LjQvCIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19zdGFydGVkX2FkdmFuY2VkX21vZGVfYnV0dG9uX3RleHQiOiAi0KDQsNGB0YjQuNGA0LXQvdC90YvQuSDRgNC10LbQuNC8IiwKICAgICAgICAiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfZW5yb2xsX21lX2J1dHRvbl90ZXh0IjogItCg0LXQs9C40YHRgtGA0LDRhtC40Y8iLAogICAgICAgICJob21lX2dldHRpbmdfc3RhcnRlZF9jb250YWN0X3VzX2J1dHRvbl90ZXh0IjogItCe0LHRgNCw0YLQvdCw0Y8g0YHQstGP0LfRjCIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19zdGFydGVkX3Zpc2l0X291cl93ZWJwYWdlX2J1dHRvbl90ZXh0IjogItCf0L7RgdC10YLQuNGC0Ywg0L3QsNGIINCy0LXQsS3RgdCw0LnRgiIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19zdGFydGVkX3JlcG9ydF9hbl9pc3N1ZV9idXR0b25fdGV4dCI6ICLQodC%0L7QsdGJ0LjRgtGMINC%INC:0YDQvtCx0LvQtdC80LUiLAoJCSJob21lX2dldHRpbmdfc3RhcnRlZF9saXN0X2J1dHRvbl90ZXh0IjogItCd0LDRh9Cw0LvQviDRgNCw0LHQvtGC0YsiLAoKCQkicXVpenplc19zdHVkaW9faG9tZV9hbnN3ZXJfdHlwZV9za2V0Y2hfbGFiZWwiOiAi0K3RgdC60LjQtyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfaW5pdGlhbF9jb250ZW50X2Rlc2NyaXB0aW9uX3NrZXRjaCI6ICLQrdGC0L4g0L3QsNGH0LDQu9GM0L3Ri9C5INCy0LjQtCDQs9GA0LDRhNC40YfQtdGB0LrQvtCz0L4g0YDQtdC00LDQutGC0L7RgNCwLCDQutC%0YLQvtGA0YvQuSDQv9GA0LXQtNGB0YLQsNCy0LvRj9C10YLRgdGPINGB0YLRg9C00LXQvdGC0LDQvCDQv9GA0Lgg0L:QvtC:0YvRgtC60LUg0L7RgtCy0LXRgtC40YLRjCDQvdCwINCy0L7Qv9GA0L7RgS4g0JjQvNC10LnRgtC1INCyINCy0LjQtNGDLCDRh9GC0L4g0L3QsCDQv9Cw0L3QtdC70Lgg0LjQvdGB0YLRgNGD0LzQtdC90YLQvtCyINGB0YLRg9C00LXQvdGC0LAg0L7RgtC%0LHRgNCw0LbQsNGO0YLRgdGPINGC0L7Qu9GM0LrQviDQutC90L7Qv9C60Lgg0YDRg9C60L7Qv9C40YHQvdC%0LPQviDQstCy0L7QtNCwINC4INGD0LTQsNC70LXQvdC40Y8uINCY0YHQv9C%0LvRjNC30YPQudGC0LUg0YTRg9C90LrRhtC40Y4gwqvQn9GA0L7QstC10YDQuNGC0Ywg0LTQsNC90L3Ri9C5INCy0L7Qv9GA0L7RgcK7LCDRh9GC0L7QsdGLINGD0LfQvdCw0YLRjCwg0LrQsNC6INC%0L0g0LHRg9C00LXRgiDQstGL0LPQu9GP0LTQtdGC0YwuIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9jb3JyZWN0X2Fuc3dlcl9kZXNjcmlwdGlvbl9za2V0Y2hfcGFyYWdyYXBoXzEiOiAi0JLQstC10LTQuNGC0LUg0L:RgNCw0LLQuNC70YzQvdGL0Lkg0L7RgtCy0LXRgiDQvdCwINC00LDQvdC90YvQuSDQstC%0L:RgNC%0YEuINCY0L3RgdGC0YDRg9C80LXQvdGCINGA0YPQutC%0L:QuNGB0L3QvtCz0L4g0LLQstC%0LTQsCDQtNCw0LXRgiDRgdGC0YPQtNC10L3RgtCw0Lwg0LLQvtC30LzQvtC20L3QvtGB0YLRjCDQv9GA0LXQtNGB0YLQsNCy0LjRgtGMINGB0LLQvtC1INGA0LXRiNC10L3QuNC1INCyINCy0LjQtNC1INGN0YHQutC40LfQsCwg0L:QvtGN0YLQvtC80YMg0LzRiyDQv9GA0LXQtNGD0YHQvNC%0YLRgNC10LvQuCDQvNC40L3QuNC80LDQu9GM0L3Ri9C5INC00L7Qv9GD0YHQuiDQvdCwINC90LXQt9C90LDRh9C40YLQtdC70YzQvdGL0LUg0L3QtdGC0L7Rh9C90L7RgdGC0Lgg0LIg0L7RgtCy0LXRgtCw0YUuINCV0LPQviDQvNC%0LbQvdC%INC90LDRgdGC0YDQvtC40YLRjCwg0L7RgtC60YDRi9CyINC:0LDRgNCw0LzQtdGC0YDRiyDQv9GA0L7QstC10YDQutC4INGB0L7QvtGC0LLQtdGC0YHRgtCy0LjRjy4iLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2NvcnJlY3RfYW5zd2VyX2Rlc2NyaXB0aW9uX3NrZXRjaF9wYXJhZ3JhcGhfMiI6ICLQndCw0LbQvNC40YLQtSDQutC90L7Qv9C60YMgwqvQn9GA0L7QstC10YDQuNGC0Ywg0LTQsNC90L3Ri9C5INCy0L7Qv9GA0L7RgcK7LCDRh9GC0L7QsdGLINGD0LfQvdCw0YLRjCwg0YfRgtC%INGD0LLQuNC00LjRgiDRgdGC0YPQtNC10L3Rgi4iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9lcXVpdmFsZW50X3NrZXRjaF9sYWJlbCIgOiAi0K3RgdC60LjQtyDRgNCw0LLQtdC9IiwKCQkicXVpenplc19kZW1vX3NrZXRjaF90aXRsZV9tZW51IiA6ICLQrdGB0LrQuNC3IiwKCQkiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfZG9jdW1lbnRhdGlvbl9idXR0b25fdGV4dCIgOiAi0JTQvtC60YPQvNC10L3RgtCw0YbQuNGPIiwgCgoJCSJjbG9zZV9tYXRodHlwZV9wb3B1cCIgOiAi0JfQsNC60YDRi9GC0YwgTWF0aFR5cGUiLAoKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fa2VlcF9hcmd1bWVudHNfZXZhbHVhdGVkX2xhYmVsIjogIkV2YWx1YXRlZCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2tlZXBfYXJndW1lbnRzX3VuZXZhbHVhdGVkX2xhYmVsIjogItCh0L7RhdGA0LDQvdGP0YLRjCDQsNGA0LPRg9C80LXQvdGC0Ysg0LHQtdC3INC%0YbQtdC90LrQuCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2tlZXBfYXJndW1lbnRzX3N0cmluZ19sYWJlbCI6ICJTdHJpbmciLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9hcmd1bWVudHNfaGVscGVyX3RleHQiOiAiRGVmaW5lIGhvdyB0aGUgc3R1ZGVudCBhbnN3ZXIgd2lsbCBiZSBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIGdyYWRpbmcgZnVuY3Rpb24uIFRoaXMgaXMgYSB2ZXJ5IGFkdmFuY2VkIGZlYXR1cmUuIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2ltcG9ydF9kZXByZWNhdGVkX21lc3NhZ2VfdGl0bGUiIDogIkRlcHJlY2F0ZWQgZmVhdHVyZXMiLAoJCSJxdWl6emVzX3N0dWRpb19pbXBvcnRfZGVwcmVjYXRlZF9tZXNzYWdlX3RleHQiIDogIlRoZSBxdWVzdGlvbiB5b3UgYXJlIGFib3V0IHRvIG9wZW4gY29udGFpbnMgZGVwcmVjYXRlZCBmZWF0dXJlcy4gVGhlIGltcG9ydCBwcm9jZXNzIG1heSBjaGFuZ2Ugc2xpZ2h0bHkgdGhlIGJlaGF2aW9yIG9mIHRoZSBxdWVzdGlvbi4gSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNhcmVmdWxseSB0ZXN0IGRlIHF1ZXN0aW9uIGFmdGVyIGltcG9ydC4gXG4gICAgVGhlIGRlcHJlY2F0ZWQgZmVhdHVyZXMgYXJlIHRoZSBmb2xsb3dpbmcgb25lczoiLAoKCQkicXVpenplc19zdHVkaW9fZXF1aXZhbGVudF9zZXRfYXNzZXJ0aW9uIjogIkVxdWl2YWxlbnQgc2V0IGFzc2VydGlvbiBpcyBubyBsb25nZXIgYXZhaWxhYmxlIiwKCQkicXVpenplc19zdHVkaW9fc3ludGF4X2xpc3RfYXNzZXJ0aW9uIjogIlN5bnRheCBsaXN0IGFzc2VydGlvbiBpcyBubyBsb25nZXIgYXZhaWxhYmxlIiwKCQkicXVpenplc19zdHVkaW9fdGV4dF9sb2dpY19vcGVyYXRvcnMiIDogIlRleHQgbG9naWMgb3BlcmF0b3JzIGFyZSBubyBsb25nZXIgYXZhaWxhYmxlIiwKCQkicXVpenplc19zdHVkaW9fZXF1aXZhbGVudF91bml0X2xpdGVyYWwiIDogIkVxdWl2YWxlbnQgdW5pdCBsaXRlcmFsIGFzc2VydGlvbiBpcyBubyBsb25nZXIgYXZhaWxhYmxlIgoKCX0KfQoKCg"},{ name : "strings_quizzes.da.json", data : "s75690: "},{ name : "strings_graph.en.json", data : "s11124: "},{ name : "strings_quizzes.es.json", data : "s78704:ewoJIm1ldGEiOiB7CgkJImxhbmciOiAiZXMiCgl9LAoJIndvcmRzIjogewoJCSJzeW50YXhfbWF0aCI6ICJtYXRlbcOhdGljYXMiLAoJCSJzeW50YXhfc3RyaW5nIjogInRleHRvIiwKCgkJImVxdWl2YWxlbnRfbGl0ZXJhbCI6ICJsaXRlcmFsbWVudGUgaWd1YWwiLAoJCSJlcXVpdmFsZW50X3N5bWJvbGljIjogIm1hdGVtw6F0aWNhbWVudGUgaWd1YWwiLAoJCSJlcXVpdmFsZW50X2VxdWF0aW9ucyI6ICJlY3VhY2lvbmVzIGVxdWl2YWxlbnRlcyIsCgkJImVxdWl2YWxlbnRfYWxsIjogIkN1YWxxdWllciByZXNwdWVzdGEiLAoJCSJlcXVpdmFsZW50X2Z1bmN0aW9uIjogImZ1bmNpw7NuIGRlIGNhbGlmaWNhY2nDs24iLAoKCQkiY2hlY2tfaW50ZWdlcl9mb3JtIjogInRpZW5lIGZvcm1hIGRlIG7Dum1lcm8gZW50ZXJvIiwKCQkiY2hlY2tfZnJhY3Rpb25fZm9ybSI6ICJ0aWVuZSBmb3JtYSBkZSBmcmFjY2nDs24iLAoJCSJjaGVja19wb2x5bm9taWFsX2Zvcm0iOiAidGllbmUgZm9ybWEgZGUgcG9saW5vbWlvIiwKCQkiY2hlY2tfcmF0aW9uYWxfZnVuY3Rpb25fZm9ybSI6ICJ0aWVuZSBmb3JtYSBkZSBmdW5jacOzbiByYWNpb25hbCIsCgkJImNoZWNrX2VsZW1lbnRhbF9mdW5jdGlvbl9mb3JtIjogImVzIHVuYSBjb21iaW5hY2nDs24gZGUgZnVuY2lvbmVzIGVsZW1lbnRhbGVzIiwKCQkiY2hlY2tfc2NpZW50aWZpY19ub3RhdGlvbiI6ICJlc3TDoSBleHByZXNhZGEgZW4gbm90YWNpw7NuIGNpZW50w61maWNhIiwKCQkiY2hlY2tfc2ltcGxpZmllZCI6ICJlc3TDoSBzaW1wbGlmaWNhZGEiLAoJCSJjaGVja19leHBhbmRlZCI6ICJlc3TDoSBleHBhbmRpZGEiLAoJCSJjaGVja19mYWN0b3JpemVkIjogImVzdMOhIGZhY3Rvcml6YWRhIiwKCQkiY2hlY2tfcmF0aW9uYWxpemVkIjogImVzdMOhIHJhY2lvbmFsaXphZGEiLAoJCSJjaGVja19ub19jb21tb25fZmFjdG9yIjogIm5vIHRpZW5lIGZhY3RvcmVzIGNvbXVuZXMiLAoJCSJjaGVja19taW5pbWFsX3JhZGljYW5kcyI6ICJ0aWVuZSByYWRpY2FuZG9zIG1pbmltYWxlcyIsCgkJImNoZWNrX2RpdmlzaWJsZSI6ICJlcyBkaXZpc2libGUgcG9yIiwKCQkiY2hlY2tfY29tbW9uX2Rlbm9taW5hdG9yIjogInRpZW5lIGRlbm9taW5hZG9yIGNvbcO6biIsCgkJImNoZWNrX3VuaXQiOiAidGllbmUgdW5pZGFkIGVxdWl2YWxlbnRlIGEiLAoJCSJjaGVja191bml0X2xpdGVyYWwiOiAidGllbmUgdW5pZGFkIGxpdGVyYWxtZW50ZSBpZ3VhbCBhIiwKCQkiY2hlY2tfcHJlY2lzaW9uIjogInRpZW5lIiwKCQkiY2hlY2tfc3ltYm9saWMiOiAicmVzcHVlc3RhIHNpbWLDs2xpY2EiLAoJCSJjaGVja19lcXVpdmFsZW50X3VuaXRzIjogInRpZW5lIHVuaWRhZGVzIGVxdWl2YWxlbnRlcyIsCgoJCSJsaXN0IjogImxpc3RhIiwKCQkib3JkZXJtYXR0ZXJzIjogImVsIG9yZGVuIGltcG9ydGEiLAoJCSJvcmRlcmRvZXNudG1hdHRlciI6ICJlbCBvcmRlbiBubyBpbXBvcnRhIiwKCQkicXVlc3Rpb254bWwiOiAicXVlc3Rpb24gWE1MIiwKCQkiZ3JhbW1hcnVybCI6ICJncmFtbWFyIFVSTCIsCgkJInJlc2VydmVkd29yZHMiOiAicGFsYWJyYXMgcmVzZXJ2YWRhcyIsCgkJImZvcmNlYnJhY2tldHMiOiAiTGFzIGxpc3RhcyBzaWVtcHJlIG5lY2VzaXRhbiBsbGF2ZXMgXCJ7fVwiLiIsCgkJImNvbW1hYXNpdGVtc2VwYXJhdG9yIjogIlV0aWxpemEgbGEgY29tYSBcIixcIiBjb21vIHNlcGFyYWRvciBkZSBlbGVtZW50b3MgZGUgbGlzdGFzLiIsCgkJImNvbmZpcm1pbXBvcnRkZXByZWNhdGVkIjogIsK:SW1wb3J0YXIgbGEgcHJlZ3VudGE: "},{ name : "strings_quizzes.ca.json", data : "s78144: % "},{ name : "graph_actions.json", data : "s16964: %AIgogIH0sCiAgewogICAgImlkIjogIm51bWJlclBpIiwKICAgICJ0aXRsZSI6ICLPgCIsCiAgICAidmFsdWUiOiAiz4AiCiAgfSwKICB7CiAgICAiaWQiOiAibnVtYmVyRSIsCiAgICAidGl0bGUiOiAiZSIsCiAgICAidmFsdWUiOiAiZSIKICB9LAogIHsKICAgICJpZCI6ICJmdW5jdGlvbnMiLAogICAgInRpdGxlIjogInR0X2Z1bmN0aW9ucyIsCiAgICAidmFsdWUiOiAic2luIgogIH0sCiAgewogICAgImlkIjogInNpbnVzIiwKICAgICJ0aXRsZSI6ICJzaW4iLAogICAgInZhbHVlIjogInNpbiIKICB9LAogIHsKICAgICJpZCI6ICJjb3NpbnVzIiwKICAgICJ0aXRsZSI6ICJjb3MiLAogICAgInZhbHVlIjogImNvcyIKICB9LAogIHsKICAgICJpZCI6ICJ0YW5nZW50IiwKICAgICJ0aXRsZSI6ICJ0YW4iLAogICAgInZhbHVlIjogInRhbiIKICB9LAogIHsKICAgICJpZCI6ICJhcmNzaW51cyIsCiAgICAidGl0bGUiOiAiYXJjc2luIiwKICAgICJ2YWx1ZSI6ICJhcmNzaW4iCiAgfSwKICB7CiAgICAiaWQiOiAiYXJjY29zaW51cyIsCiAgICAidGl0bGUiOiAiYXJjY29zIiwKICAgICJ2YWx1ZSI6ICJhcmNjb3MiCiAgfSwKICB7CiAgICAiaWQiOiAiYXJjdGFuZ2VudCIsCiAgICAidGl0bGUiOiAiYXJjdGFuIiwKICAgICJ2YWx1ZSI6ICJhcmN0YW4iCiAgfSwKICB7CiAgICAiaWQiOiAibG9nQmFzZSIsCiAgICAidGl0bGUiOiAibG9nPHN1YiBzdHlsZT1cImZvbnQtc2l6ZTogN3B0OyB2ZXJ0aWNhbC1hbGlnbjogc3ViOyBsaW5lLWhlaWdodDogMHB4O1wiPiYjOTY0Nzs8L3N1Yj4iLAogICAgInZhbHVlIjogImxvZyIsCiAgICAidGl0bGVIdG1sIjogdHJ1ZQogIH0sCiAgewogICAgImlkIjogImxvZyIsCiAgICAidGl0bGUiOiAibG9nIiwKICAgICJ2YWx1ZSI6ICJsb2ciLAogICAgInRpdGxlSHRtbCI6IHRydWUKICB9LAogIHsKICAgICJpZCI6ICJsbiIsCiAgICAidGl0bGUiOiAibG4iLAogICAgInZhbHVlIjogImxuIgogIH0sCiAgewogICAgImlkIjogImV4cCIsCiAgICAidGl0bGUiOiAiZXhwIiwKICAgICJ2YWx1ZSI6ICJleHAiCiAgfQpd"},{ name : "strings_quizzes.no.json", data : "s74299: "},{ name : "strings_quizzes.fr.json", data : "s80240:ewoJIm1ldGEiOiB7CgkJImxhbmciOiAiZnIiCgl9LAoJIndvcmRzIjogewoJCSJzeW50YXhfbWF0aCI6ICJtYXRow6ltYXRpcXVlcyIsCgkJInN5bnRheF9zdHJpbmciOiAidGV4dGUiLAoKCQkiZXF1aXZhbGVudF9saXRlcmFsIjogInN0cmljdGVtZW50IMOpZ2FsIiwKCQkiZXF1aXZhbGVudF9zeW1ib2xpYyI6ICJtYXRow6ltYXRpcXVlbWVudCDDqWdhbCIsCgkJImVxdWl2YWxlbnRfZXF1YXRpb25zIjogIsOpcXVhdGlvbnMgw6lxdWl2YWxlbnRlcyIsCgkJImVxdWl2YWxlbnRfYWxsIjogIk4naW1wb3J0ZSBxdWVsbGUgcsOpcG9uc2UiLAoJCSJlcXVpdmFsZW50X2Z1bmN0aW9uIjogImZvbmN0aW9uIGRlIGdyYWRhdGlvbiIsCgoJCSJjaGVja19pbnRlZ2VyX2Zvcm0iOiAiYSBsYSBmb3JtZSBkJ3VuIGVudGllci4iLAoJCSJjaGVja19mcmFjdGlvbl9mb3JtIjogImEgbGEgZm9ybWUgZCd1bmUgZnJhY3Rpb24iLAoJCSJjaGVja19wb2x5bm9taWFsX2Zvcm0iOiAiYSBsYSBmb3JtZSBkJ3VuIHBvbHluw7RtZSIsCgkJImNoZWNrX3JhdGlvbmFsX2Z1bmN0aW9uX2Zvcm0iOiAiYSBsYSBmb3JtZSBkJ3VuZSBmb25jdGlvbiByYXRpb25uZWxsZSIsCgkJImNoZWNrX2VsZW1lbnRhbF9mdW5jdGlvbl9mb3JtIjogImVzdCB1bmUgY29tYmluYWlzb24gZGUgZm9uY3Rpb25zIMOpbMOpbWVudGFpcmVzIiwKCQkiY2hlY2tfc2NpZW50aWZpY19ub3RhdGlvbiI6ICJlc3QgZXhwcmltw6kgZW4gbm90YXRpb24gc2NpZW50aWZpcXVlIiwKCQkiY2hlY2tfc2ltcGxpZmllZCI6ICJlc3Qgc2ltcGxpZmnDqSIsCgkJImNoZWNrX2V4cGFuZGVkIjogImVzdCBkw6l2ZWxvcHDDqSIsCgkJImNoZWNrX2ZhY3Rvcml6ZWQiOiAiZXN0IGZhY3Rvcmlzw6kiLAoJCSJjaGVja19yYXRpb25hbGl6ZWQiOiAiwqA6IHJhdGlvbmFsaXPDqSIsCgkJImNoZWNrX25vX2NvbW1vbl9mYWN0b3IiOiAibidhIHBhcyBkZSBmYWN0ZXVycyBjb21tdW5zIiwKCQkiY2hlY2tfbWluaW1hbF9yYWRpY2FuZHMiOiAiYSBkZXMgcmFkaWNhbmRlcyBtaW5pbWF1eCIsCgkJImNoZWNrX2RpdmlzaWJsZSI6ICJlc3QgZGl2aXNpYmxlIHBhciIsCgkJImNoZWNrX2NvbW1vbl9kZW5vbWluYXRvciI6ICJhIHVuIHNldWwgZMOpbm9taW5hdGV1ciBjb21tdW4iLAoJCSJjaGVja191bml0IjogImluY2x1dCB1bmUgdW5pdMOpIMOpcXVpdmFsZW50ZSDDoCIsCgkJImNoZWNrX3VuaXRfbGl0ZXJhbCI6ICJhIHVuZSB1bml0w6kgc3RyaWN0ZW1lbnQgw6lnYWxlIMOgIiwKCQkiY2hlY2tfcHJlY2lzaW9uIjogImEiLAoJCSJjaGVja19zeW1ib2xpYyI6ICJlc3Qgc3ltYm9saXF1ZSIsCgkJImNoZWNrX2VxdWl2YWxlbnRfdW5pdHMiOiAiYSBkZXMgdW5pdMOpcyDDqXF1aXZhbGVudGVzIiwKCgkJImxpc3QiOiAibGlzdGUiLAoJCSJvcmRlcm1hdHRlcnMiOiAibCdvcmRyZSBlc3QgaW1wb3J0YW50IiwKCQkib3JkZXJkb2VzbnRtYXR0ZXIiOiAibCdvcmRyZSBuJ2VzdCBwYXMgaW1wb3J0YW50IiwKCQkicXVlc3Rpb254bWwiOiAicXVlc3Rpb27CoFhNTCIsCgkJImdyYW1tYXJ1cmwiOiAiVVJMIGRlIGxhIGdyYW1tYWlyZSIsCgkJInJlc2VydmVkd29yZHMiOiAibW90cyByw6lzZXJ2w6lzIiwKCQkiZm9yY2VicmFja2V0cyI6ICJMZXMgbGlzdGVzIHJlcXVpw6hyZW50IGwndXRpbGlzYXRpb24gZCdhY2NvbGFkZXMgwqvCoHt9wqDCuy4iLAoJCSJjb21tYWFzaXRlbXNlcGFyYXRvciI6ICJVdGlsaXNlciB1bmUgdmlyZ3VsZSDCq8KgLMKgwrsgY29tbWUgc8OpcGFyYXRldXIgZCfDqWzDqW1lbnRzIGRlIGxpc3RlLiIsCgkJImNvbmZpcm1pbXBvcnRkZXByZWNhdGVkIjogIkltcG9ydGVyIGxhIHF1ZXN0aW9uwqA: % % :Dr25jaWRlciBleGFjdGVtZW50LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX21hdGNoX3NwYWNlc19sYWJlbCI6ICJSZXNwZWN0ZXIgbGVzIGVzcGFjZXMiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9tYXRjaF9zcGFjZXNfaGVscGVyX3RleHQiOiAiTGVzIGVzcGFjZXMgZGFucyBsYSByw6lwb25zZSBkZSBs4oCZw6l0dWRpYW50IGRvaXZlbnQgw6p0cmUgc3RyaWN0ZW1lbnQgaWRlbnRpcXVlcyDDoCBjZXV4IGRlIGxhIGJvbm5lIHLDqXBvbnNlLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2VxdWl2YWxlbnRfZXF1YXRpb25zX2xhYmVsIjogIsOJcXVhdGlvbnMgw6lxdWl2YWxlbnRlcyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2VxdWl2YWxlbnRfZXF1YXRpb25zX2hlbHBlcl90ZXh0IjogIkzigJllbnNlbWJsZSBkZSBzb2x1dGlvbnMgZGUgbOKAmcOpcXVhdGlvbiwgbOKAmWluw6lxdWF0aW9uIG91IGxlIHN5c3TDqG1lIGTDqWZpbmkgcGFyIGxhIHLDqXBvbnNlIGRlIGzigJnDqXR1ZGlhbnQgZG9pdCDDqnRyZSBpZGVudGlxdWUgw6AgY2VsdWkgw6l0YWJsaSBkYW5zIGxhIGJvbm5lIHLDqXBvbnNlLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2FueV9hbnN3ZXJfbGFiZWwiOiAiTuKAmWltcG9ydGUgcXVlbGxlIHLDqXBvbnNlIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fYW55X2Fuc3dlcl9oZWxwZXJfdGV4dCI6ICJUb3V0ZXMgbGVzIHLDqXBvbnNlcyBkZSBs4oCZw6l0dWRpYW50IGRvaXZlbnQgY29uY29yZGVyLiBVdGlsaXNleiBjZXR0ZSBvcHRpb24gcG91ciBmb3VybmlyIGRlcyBjb21tZW50YWlyZXMgYXV4IMOpdHVkaWFudHMgZW4gY2FzIGRlIG1hdXZhaXNlcyByw6lwb25zZXMuIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fY3VzdG9tX2dyYWRpbmdfZnVuY3Rpb25fbGFiZWwiOiAiRm9uY3Rpb24gZOKAmcOpdmFsdWF0aW9uIHBlcnNvbm5hbGlzw6llIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fY3VzdG9tX2dyYWRpbmdfZnVuY3Rpb25faGVscGVyX3RleHQiOiAiRMOpZmluaXNzZXogdm90cmUgcHJvcHJlIGZvbmN0aW9uIHBlcnNvbm5hbGlzw6llIHBvdXIgdsOpcmlmaWVyIGxhIHLDqXBvbnNlIGRlIGzigJnDqXR1ZGlhbnQgZGFucyBsZSB2b2xldCBEw6lmaW5pciBsZXMgdmFyaWFibGVzIGFsw6lhdG9pcmVzIGV0IGxlcyBmb25jdGlvbnMuIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fY3VzdG9tX2dyYWRpbmdfZnVuY3Rpb25fbmFtZV9kcm9wZG93bl9sYWJlbCI6ICJOb20gZGUgbGEgZm9uY3Rpb24iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9jdXN0b21fZ3JhZGluZ19mdW5jdGlvbl9kZWZpbmVfZnVuY3Rpb25fYnV0dG9uX2xhYmVsIjogIkTDqWZpbmlyIHVuZSBub3V2ZWxsZSBmb25jdGlvbiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2tlZXBfYXJndW1lbnRzX3VuZXZhbHVhdGVkX2xhYmVsIjogIkNvbnNlcnZlciBsZXMgYXJndW1lbnRzIG5vbiDDqXZhbHXDqXMiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9rZWVwX2FyZ3VtZW50c191bmV2YWx1YXRlZF9oZWxwZXJfdGV4dCI6ICJMYSByw6lwb25zZSBkZSBs4oCZw6l0dWRpYW50IG5lIHNlcmEgcGFzIMOpdmFsdcOpZSBldCBzZXJhIHRyYW5zbWlzZSDDoCBsYSBmb25jdGlvbiBzb3VzIGZvcm1lIGTigJlleHByZXNzaW9uIENhbGNNZS4gSWwgc%KAmWFnaXQgZOKAmXVuZSBmb25jdGlvbm5hbGl0w6kgdHLDqHMgYXZhbmPDqWUuIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3RpdGxlIjogIk5vbWJyZXMiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc19zeW1ib2xpY19hbnN3ZXJfbGFiZWwiOiAiUsOpcG9uc2Ugc3ltYm9saXF1ZSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3N5bWJvbGljX2Fuc3dlcl9oZWxwZXJfdGV4dCI6ICJO4oCZYXV0b3Jpc2UgcGFzIGxlcyBub21icmVzIGTDqWNpbWF1eC4gTGEgcsOpcG9uc2UgZG9pdCBjb3JyZXNwb25kcmUgw6AgdW5lIGFzc29jaWF0aW9uIGTigJlvcMOpcmF0aW9ucywgZGUgZnJhY3Rpb25zLCBkZSByYWNpbmVzIGV0IGRlIGZvbmN0aW9ucyBpbXBsaXF1YW50IGRlcyBlbnRpZXJzLCBkZXMgY29uc3RhbnRlcyBldCBkZXMgdmFyaWFibGVzLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3RvbGVyYW5jZV9sYWJlbCI6ICJUb2zDqXJhbmNlIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfdG9sZXJhbmNlX2V4YWN0X2Fuc3dlcl9sYWJlbCI6ICJSw6lwb25zZSBleGFjdGUiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc190b2xlcmFuY2VfZXhhY3RfYW5zd2VyX2hlbHBlcl90ZXh0IjogIkxhIHLDqXBvbnNlIGRlIGzigJnDqXR1ZGlhbnQgZG9pdCBjb3JyZXNwb25kcmUgZXhhY3RlbWVudCDDoCBsYSBib25uZSByw6lwb25zZS4iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc190b2xlcmFuY2VfZXJyb3JfbWFyZ2luX2xhYmVsIjogIk1hcmdlIGTigJllcnJldXIiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc190b2xlcmFuY2VfZXJyb3JfbWFyZ2luX2hlbHBlcl90ZXh0IjogIkxhIHLDqXBvbnNlIGRlIGzigJnDqXR1ZGlhbnQgZG9pdCBzZSBzaXR1ZXIgc3RyaWN0ZW1lbnQgZGFucyBs4oCZaW50ZXJ2YWxsZSBkZSB0b2zDqXJhbmNlLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3RvbGVyYW5jZV9lcnJvcl9tYXJnaW5fZHJvcGRvd25fcGVyY2VudF9lcnJvcl9sYWJlbCI6ICJwb3VyY2VudGFnZSBk4oCZZXJyZXVyIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfdG9sZXJhbmNlX2Vycm9yX21hcmdpbl9kcm9wZG93bl9hYnNvbHV0ZV9lcnJvcl9sYWJlbCI6ICJlcnJldXIgYWJzb2x1ZSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3RvbGVyYW5jZV9tYXRjaGluZ19kaWdpdHNfbGFiZWwiOiAiQ2hpZmZyZXMgZXhhY3RzIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfdG9sZXJhbmNlX21hdGNoaW5nX2RpZ2l0c19oZWxwZXJfdGV4dCI6ICJMZSBwcmVtaWVyIGNoaWZmcmUgc2lnbmlmaWNhdGlmIG91IG5vbWJyZSBkZSBjaGlmZnJlcyBhcHLDqHMgbGEgdmlyZ3VsZSBkZSBsYSByw6lwb25zZSBkZSBs4oCZw6l0dWRpYW50IGRvaXQgY2: :IiwKCQkicXVpenplc19zdHVkaW9fcmVsZXZhbnRfb3B0aW9uc19kaWFsb2dfY29uZmlybV9idXR0b25fbGFiZWwiOiAiT3VpIiwKCQkicXVpenplc19zdHVkaW9fcmVsZXZhbnRfb3B0aW9uc19kaWFsb2dfY2FuY2VsX2J1dHRvbl9sYWJlbCI6ICJOb24iLAoKCQkiYW5zd2VyX2ZpZWxkX21hdGh0eXBlX3BvcHVwX2J1dHRvbl90b29sdGlwIjogIk91dnJpciBs4oCZw6lkaXRldXIgbWF0aMOpbWF0aXF1ZSBkZSBNYXRoVHlwZSIsCgkJCgkJInBvcHVwX3RleHRfZmllbGRfd2FybmluZ190aXRsZSI6ICJNb2RpZmljYXRpb25zIG5vbiBzYXV2ZWdhcmTDqWVzIiwKCQkicG9wdXBfdGV4dF9maWVsZF93YXJuaW5nX21lc3NhZ2UiOiAiU2kgdm91cyBmZXJtZXogY2V0dGUgZmVuw6p0cmUsIHZvdXMgcGVyZHJleiB0b3V0ZXMgbGVzIG1vZGlmaWNhdGlvbnMgbm9uIHNhdXZlZ2FyZMOpZXMuIENvbmZpcm1lei12b3VzIHZvdWxvaXIgY29udGludWVywqA: %KAmWFnaXQgZGUgbOKAmcOpdGF0IGluaXRpYWwgZGUgbOKAmcOpZGl0ZXVyIG1hdGjDqW1hdGlxdWUgcXVpIHPigJlhZmZpY2hlcmEgw6Agdm9zIMOpbMOodmVzIGxvcnNxdeKAmWlscyByw6lwb25kcm9udCDDoCBsYSBxdWVzdGlvbi4gVm91cyBwb3V2ZXogYWluc2kgZm91cm5pciB1bmUgc3RydWN0dXJlIHBvdXIgbGV1ciByw6lwb25zZSBvdSBsZXMgYmxhbmNzIMOgIHJlbXBsaXIuIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9pbml0aWFsX2NvbnRlbnRfZGVzY3JpcHRpb25fZ3JhcGhpYyI6ICJJbCBz4oCZYWdpdCBkZSBs4oCZw6l0YXQgaW5pdGlhbCBkZSBs4oCZw6lkaXRldXIgZ3JhcGhpcXVlIHF1aSBz4oCZYWZmaWNoZXJhIMOgIHZvcyDDqWzDqHZlcyBsb3JzcXXigJlpbHMgcsOpcG9uZHJvbnQgw6AgbGEgcXVlc3Rpb24uIFZvdXMgcG91dmV6IHBlcnNvbm5hbGlzZXIgbGVzIMOpbMOpbWVudHMgZGUgbGEgYmFycmUgZOKAmW91dGlscyBxdWkgc%KAmWFmZmljaGVyb250IGRhbnMgbGVzIG9wdGlvbnMgZGUgc2Fpc2llLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfaW5pdGlhbF9jb250ZW50X2Rlc2NyaXB0aW9uX3RleHQiOiAiSWwgc% "},{ name : "strings_quizzes.el.json", data : "s99396:ewoJIm1ldGEiOiB7CgkJImxhbmciOiAiZWwiCgl9LAoJIndvcmRzIjogewoJCSJzeW50YXhfbWF0aCI6ICLOvM6xzrjOt868zrHPhM65zrrOrCIsCgkJInN5bnRheF9zdHJpbmciOiAizrrOtc6vzrzOtc69zr8iLAoKCQkiZXF1aXZhbGVudF9saXRlcmFsIjogIs66z4XPgc65zr:Ou861zrrPhM65zrrOrCDOr8%DzrciLAoJCSJlcXVpdmFsZW50X3N5bWJvbGljIjogIs68zrHOuM63zrzOsc%EzrnOus6sIM6vz4POtyIsCgkJImVxdWl2YWxlbnRfZXF1YXRpb25zIjogIs65z4POv860z43Ovc6xzrzOtc%CIM61zr7Ouc%Dz47Pg861zrnPgiIsCgkJImVxdWl2YWxlbnRfYWxsIjogIs6fz4DOv865zrHOtM6uz4DOv8%EzrUgzrHPgM6szr3PhM63z4POtyIsCgkJImVxdWl2YWxlbnRfZnVuY3Rpb24iOiAiz4PPhc69zqzPgc%EzrfPg863IM6yzrHOuM68zr:Ou8%MzrPOt8%DzrfPgiIsCgoJCSJjaGVja19pbnRlZ2VyX2Zvcm0iOiAizq3Ph861zrkgzrzOv8%Bz4bOriDOsc66zq3Pgc6xzrnOv8%FIiwKCQkiY2hlY2tfZnJhY3Rpb25fZm9ybSI6ICLOrc%HzrXOuSDOvM6:z4HPhs6uIM66zrvOrM%DzrzOsc%Ezr:PgiIsCgkJImNoZWNrX3BvbHlub21pYWxfZm9ybSI6ICLOrc%HzrXOuSDPgM6:zrvPhc%Jzr3Phc68zrnOus6uIM68zr:Pgc%Gzq4iLAoJCSJjaGVja19yYXRpb25hbF9mdW5jdGlvbl9mb3JtIjogIs6tz4fOtc65IM68zr:Pgc%Gzq4gzrvOv86zzrnOus6uz4Igz4PPhc69zqzPgc%EzrfPg863z4IiLAoJCSJjaGVja19lbGVtZW50YWxfZnVuY3Rpb25fZm9ybSI6ICLOtc6vzr3Osc65IM%Dz4XOvc60z4XOsc%DzrzPjM%CIM%Dz4TOv865z4fOtc65z4nOtM%Ozr0gz4PPhc69zrHPgc%Ezq7Pg861z4nOvSIsCgkJImNoZWNrX3NjaWVudGlmaWNfbm90YXRpb24iOiAizrXOus%Gz4HOrM62zrXPhM6xzrkgzrzOtSDOtc%AzrnPg8%EzrfOvM6:zr3Ouc66zq4gz4POt868zrXOuc6:zrPPgc6xz4bOr86xIiwKCQkiY2hlY2tfc2ltcGxpZmllZCI6ICLOtc6vzr3Osc65IM6xz4DOu86:z4DOv865zrfOvM6tzr3OtyIsCgkJImNoZWNrX2V4cGFuZGVkIjogIs61zq:Ovc6xzrkgzrHOvc61z4DPhM%FzrPOvM6tzr3OtyIsCgkJImNoZWNrX2ZhY3Rvcml6ZWQiOiAizrXOr869zrHOuSDPgM6xz4HOsc6zzr:Ovc%Ezr:PgM6:zrnOt868zq3Ovc63IiwKCQkiY2hlY2tfcmF0aW9uYWxpemVkIjogIs61zq:Ovc6xzrkgzrHOuc%EzrnOv867zr:Os863zrzOrc69zrciLAoJCSJjaGVja19ub19jb21tb25fZmFjdG9yIjogIs60zrXOvSDOrc%HzrXOuSDOus6:zrnOvc6:z43PgiDPg8%Fzr3PhM61zrvOtc%Dz4TOrc%CIiwKCQkiY2hlY2tfbWluaW1hbF9yYWRpY2FuZHMiOiAizq3Ph861zrkgzrXOu86sz4fOuc%Dz4TOsSDPhc%Az4zPgc%BzrnOts6xIiwKCQkiY2hlY2tfZGl2aXNpYmxlIjogIs60zrnOsc65z4HOtc6vz4TOsc65IM68zrUgz4TOvyIsCgkJImNoZWNrX2NvbW1vbl9kZW5vbWluYXRvciI6ICLOrc%HzrXOuSDOrc69zrHOvSDOus6:zrnOvc%MIM%AzrHPgc6:zr3Ov868zrHPg8%Ezq4iLAoJCSJjaGVja191bml0IjogIs6tz4fOtc65IM68zr:Ovc6szrTOsSDOuc%Dzr:OtM%Nzr3Osc68zrcgzrzOtSIsCgkJImNoZWNrX3VuaXRfbGl0ZXJhbCI6ICLOrc%HzrXOuSDOvM6:zr3OrM60zrEgzrrPhc%BzrnOv867zrXOus%EzrnOus6sIM6vz4POtyDOvM61IiwKCQkiY2hlY2tfcHJlY2lzaW9uIjogIs6tz4fOtc65IiwKCQkiY2hlY2tfc3ltYm9saWMiOiAizrXOr869zrHOuSDPg8%FzrzOss6:zrvOuc66zq4iLAoJCSJjaGVja19lcXVpdmFsZW50X3VuaXRzIjogIs6tz4fOtc65IM65z4POv860z43Ovc6xzrzOtc%CIM68zr:Ovc6szrTOtc%CIiwKCgkJImxpc3QiOiAizrvOr8%Dz4TOsSIsCgkJIm9yZGVybWF0dGVycyI6ICLOtyDPg861zrnPgc6sIM6tz4fOtc65IM%DzrfOvM6xz4POr86xIiwKCQkib3JkZXJkb2VzbnRtYXR0ZXIiOiAizrcgz4POtc65z4HOrCDOtM61zr0gzq3Ph861zrkgz4POt868zrHPg86vzrEiLAoJCSJxdWVzdGlvbnhtbCI6ICJYTUwgzrXPgc%Oz4TOt8%DzrfPgiIsCgkJImdyYW1tYXJ1cmwiOiAiVVJMIM6zz4HOsc68zrzOsc%EzrnOus6uz4IiLAoJCSJyZXNlcnZlZHdvcmRzIjogIs6xzr3Otc%Dz4TPgc6xzrzOvM6tzr3Otc%CIM67zq3Ovs61zrnPgiIsCgkJImZvcmNlYnJhY2tldHMiOiAizpPOuc6xIM%EzrnPgiDOu86vz4PPhM61z4Igz4fPgc61zrnOrM62zr:Ovc%EzrHOuSDPgM6szr3PhM6xIM6szrPOus65z4PPhM%BzrEgwqt7fcK7LiIsCgkJImNvbW1hYXNpdGVtc2VwYXJhdG9yIjogIs6nz4HOt8%DzrnOvM6:z4DOv865zq7Pg8%EzrUgz4TOvyDOus%MzrzOvM6xIMKrLMK7IM%Jz4IgzrTOuc6xz4fPic%BzrnPg8%EzrnOus%MIM%Dz4TOv865z4fOtc6vz4nOvSDOu86vz4PPhM6xz4IuIiwKCQkiY29uZmlybWltcG9ydGRlcHJlY2F0ZWQiOiAizpXOuc%DzrHOs8%JzrPOriDPhM63z4IgzrXPgc%Oz4TOt8%DzrfPgjsgzpcgzrXPgc%Oz4TOt8%Dzrcgz4DOv8%FIM%Az4HPjM66zrXOuc%EzrHOuSDOvc6xIM6xzr3Ov86vzr7Otc%EzrUgz4DOtc%BzrnOrc%HzrXOuSDOtM%Fzr3Osc%Ez4zPhM63z4TOtc%CIM%Azr:PhSDOrc%Hzr:Phc69IM66zrHPhM6xz4HOs863zrjOtc6vLiDOlyDOtM65zrHOtM65zrrOsc%Dzq:OsSDOtc65z4POsc6zz4nOs86uz4IgzrzPgM6:z4HOtc6vIM69zrEgzrHOu867zqzOvs61zrkgzrvOr86zzr8gz4TOtyDPg8%FzrzPgM61z4HOuc%Gzr:Pgc6sIM%EzrfPgiDOtc%Bz47PhM63z4POt8%CLiDOmM6xIM%Az4HOrc%AzrXOuSDOvc6xIM61zr7Otc%EzqzPg861z4TOtSDPgM%Bzr:Pg861zrrPhM65zrrOrCDPhM63zr0gzrXPgc%Oz4TOt8%DzrcgzrzOtc%EzqwgzrHPgM%MIM%EzrfOvSDOtc65z4POsc6zz4nOs86uIM%EzrfPgi4iLAoJCSJjb21wYXJlc2V0cyI6ICLPg8%NzrPOus%BzrnPg863IM%Jz4Igz4PPhc69z4zOu8%Jzr0iLAoJCSJyZWxhdGl2ZXRvbGVyYW5jZSI6ICLPg8%HzrXPhM65zrrOriDOsc69zr:Ph86uIiwKCQkibm9icmFja2V0c2xpc3QiOiAizrvOr8%Dz4TOtc%CIM%Hz4nPgc6vz4IgzqzOs866zrnPg8%Ez4HOsSIsCgoJCSJncmFkaW5nZnVuY3Rpb24iOiAiz4PPhc69zqzPgc%EzrfPg863IM6yzrHOuM68zr:Ou8%MzrPOt8%DzrfPgiIsCgkJImFkZGl0aW9uYWxwcm9wZXJ0aWVzIjogIs%Az4HPjM%DzrjOtc%EzrXPgiDOuc60zrnPjM%EzrfPhM61z4IiLAoJCSJzdHJ1Y3R1cmUiOiAizrTOv868zq4iLAoJCSJleHBsb2ciOiAiZXhwL2xvZyIsCgkJInRyaWdvbm9tZXRyaWMiOiAiz4TPgc65zrPPic69zr:OvM61z4TPgc65zrrOriIsCgkJImh5cGVyYm9saWMiOiAiz4XPgM61z4HOss6:zrvOuc66zq4iLAoJCSJ0b2xlcmFuY2UiOiAizrHOvc6:z4fOriIsCgkJInJlbGF0aXZlIjogIs%Dz4fOtc%EzrnOus6uIiwKCQkicHJlY2lzaW9uIjogIs6xzrrPgc6vzrLOtc65zrEiLAoJCSJpbXBsaWNpdF90aW1lc19vcGVyYXRvciI6ICLOvM63IM6:z4HOsc%Ez4zPgiDPhM61zrvOtc%Dz4TOrs%CIM61z4DOryIsCgkJInRpbWVzX29wZXJhdG9yIjogIs%EzrXOu861z4PPhM6uz4IgzrXPgM6vIiwKCQkiaW1hZ2luYXJ5X3VuaXQiOiAiz4bOsc69z4TOsc%Dz4TOuc66zq4gzrzOv869zqzOtM6xIiwKCQkibWl4ZWRmcmFjdGlvbnMiOiAizrzOuc66z4TOrCDOus67zqzPg868zrHPhM6xIiwKCQkiY29uc3RhbnRzIjogIs%Dz4TOsc64zrXPgc6tz4IiLAoJCSJmdW5jdGlvbnMiOiAiz4PPhc69zrHPgc%Ezq7Pg861zrnPgiIsCgkJInVzZXJmdW5jdGlvbnMiOiAiz4PPhc69zrHPgc%Ezq7Pg861zrnPgiDPh8%Bzq7Pg8%EzrciLAoJCSJ1bml0cyI6ICLOvM6:zr3OrM60zrXPgiIsCgkJInVuaXRwcmVmaXhlcyI6ICLPgM%Bzr:OuM6tzrzOsc%EzrEgzrzOv869zqzOtM%Jzr0iLAoJCSJzeW50YXhwYXJhbXMiOiAizrXPgM65zrvOv86zzq3PgiDPg8%Nzr3PhM6xzr7Ot8%CIiwKCgkJImF1dGhvcmluZ19maWVsZF9idXR0b25fdG9vbHRpcCI6ICLOhs69zr:Ouc6zzrzOsSDPhM6:z4UgV2lyaXNRdWl6emVzIFN0dWRpbyIsCgkJImF1dGhvcmluZ19maWVsZF90ZXh0X2ZpZWxkX2xhYmVsIjogIs6jz4nPg8%Ezq4gzrHPgM6szr3PhM63z4POtyIsCgoJCSJxdWl6emVzX3N0dWRpb19ob21lX2FjdGl2aXR5X3RpdGxlIjogIldpcmlzUXVpenplcyBTdHVkaW8iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2FjdGl2aXR5X3RpdGxlIjogIs6Vz4DOuc67zr:Os86tz4IgzrXOuc%Dz4zOtM6:z4UiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfYWN0aXZpdHlfdGl0bGUiOiAizpXPgM65zrvOv86zzq3PgiDOtc%AzrHOu86uzrjOtc%Fz4POt8%CIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfYWN0aXZpdHlfdGl0bGUiOiAizprOsc64zr:Pgc65z4POvM%Mz4Igz4TPhc%HzrHOr8%Jzr0gzrzOtc%EzrHOss67zrfPhM%Ozr0gzrrOsc65IM%Dz4XOvc6xz4HPhM6uz4POtc%Jzr0iLAoJCSJxdWl6emVzX3N0dWRpb19hdXhpbGlhcl9pbml0aWFsX2NvbnRlbnRfYWN0aXZpdHlfdGl0bGUiOiAizprOsc64zr:Pgc65z4POvM%Mz4IgzrHPgc%HzrnOus6:z40gz4DOtc%BzrnOtc%Hzr:OvM6tzr3Ov8%FIM%Ezr:PhSDOvM6xzrjOt8%Ezq4iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX2FjdGl2aXR5X3RpdGxlIjogIs6Uzr:Ous65zrzOriDOsc%Fz4TOrs%CIM%EzrfPgiDOtc%Bz47PhM63z4POt8%CIiwKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX2FjdGl2aXR5X3RpdGxlIjogIs6Vz4DOuc67zr:Os86tz4IgzrXPgM6xzrvOrs64zrXPhc%DzrfPgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZpZXdfc291cmNlX2FjdGl2aXR5X3RpdGxlIjogIs6gz4HOv86yzr:Ou86uIM%AzrfOs86xzq:Ov8%FIM66z47OtM65zrrOsSDOtc%Bz47PhM63z4POt8%CIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3Rvb2xiYXJfYmFja19idXR0b25fdG9vbHRpcCI6ICLOoM6vz4PPiSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rvb2xiYXJfdGVzdF9xdWVzdGlvbl9idXR0b25fdG9vbHRpcCI6ICLOlM6:zrrOuc68zq4gzrHPhc%Ezq7PgiDPhM63z4IgzrXPgc%Oz4TOt8%DzrfPgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rvb2xiYXJfaGVscF9idXR0b25fdG9vbHRpcCI6ICLOks6:zq7OuM61zrnOsSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3NlbmRfZmVlZGJhY2tfbGFiZWwiOiAizpHPgM6:z4PPhM6:zrvOriDPg8%Hzr:Ou86vz4nOvSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3RyYWluaW5nX2xhYmVsIjogIs6VzrPOs8%BzrHPhs61zq:PhM61IM%Dz4TOvyDOtc66z4DOsc65zrTOtc%Fz4TOuc66z4wgzrzOsc%CIM68zqzOuM63zrzOsSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3dlYnNpdGVfbGFiZWwiOiAizpXPgM65z4POus61z4bPhM61zq:PhM61IM%EzrfOvSDOuc%Dz4TOv8%DzrXOu86vzrTOsSDOvM6xz4IiLAoJCSJxdWl6emVzX3N0dWRpb19yZXBvcnRfaXNzdWVfbGFiZWwiOiAizpHOvc6xz4bOrc%BzrXPhM61IM6tzr3OsSDPgM%Bz4zOss67zrfOvM6xIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3Rvb2xiYXJfbW9yZV9vcHRpb25zX2Ryb3Bkb3duX3Rvb2x0aXAiOiAizqDOtc%BzrnPg8%Dz4zPhM61z4HOtc%CIM61z4DOuc67zr:Os86tz4IiLAoJCSJxdWl6emVzX3N0dWRpb190b29sYmFyX21vcmVfb3B0aW9uc19kcm9wZG93bl9pbXBvcnRfbGFiZWwiOiAizpXOuc%DzrHOs8%JzrPOriIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rvb2xiYXJfbW9yZV9vcHRpb25zX2Ryb3Bkb3duX2V4cG9ydF9sYWJlbCI6ICLOlc6%zrHOs8%JzrPOriIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rvb2xiYXJfbW9yZV9vcHRpb25zX2Ryb3Bkb3duX3ZpZXdfc291cmNlX2xhYmVsIjogIs6gz4HOv86yzr:Ou86uIM%AzrfOs86xzq:Ov8%FIM66z47OtM65zrrOsSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rvb2xiYXJfbW9yZV9vcHRpb25zX2Ryb3Bkb3duX2hlbHBfbGFiZWwiOiAizpLOv86uzrjOtc65zrEiLAoJCSJxdWl6emVzX3N0dWRpb190b29sYmFyX21vcmVfb3B0aW9uc19kcm9wZG93bl9hYm91dF9sYWJlbCI6ICLOo8%HzrXPhM65zrrOrCIsCgoJCSJxdWl6emVzX3N0dWRpb19ob21lX2Fuc3dlcl90eXBlX2xhYmVsIjogIs%Ez43PgM6:z4IgzrHPgM6szr3PhM63z4POt8%CIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9hbnN3ZXJfdHlwZV9lcXVhdGlvbl9sYWJlbCI6ICLOlc6%zq:Pg8%Jz4POtyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYW5zd2VyX3R5cGVfZ3JhcGhpY19sYWJlbCI6ICLOk8%BzrHPhs65zrrPjCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYW5zd2VyX3R5cGVfdGV4dF9sYWJlbCI6ICLOms61zq:OvM61zr3OvyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYW5zd2VyX3R5cGVfc3RhbmRhcmRfZ3JhcGhpY19sYWJlbCI6ICLOoM%Bz4zPhM%Fz4DOvyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYW5zd2VyX3R5cGVfYmFyX2NoYXJ0X2xhYmVsIjogIs6hzrHOss60z4zOs8%BzrHOvM68zrEiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2Fuc3dlcl90eXBlX2xpbmVfY2hhcnRfbGFiZWwiOiAizpPPgc6sz4bOt868zrEgzrPPgc6xzrzOvM6uz4IiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2Fuc3dlcl90eXBlX3BpZV9jaGFydF9sYWJlbCI6ICLOlM65zqzOs8%BzrHOvM68zrEgz4DOr8%EzrHPgiIsCgoKCQkicXVpenplc19zdHVkaW9faG9tZV9xdWVzdGlvbl9tYXRoX2NvbnRlbnRfbGFiZWwiOiAizprOsc64zr:Pgc65z4POvM%Mz4Igz4TOv8%FIM6xz4HPh865zrrOv8%NIM%AzrXPgc65zrXPh86:zrzOrc69zr:PhSDOus6xzrkgz4TOt8%CIM%Dz4nPg8%Ezq7PgiDOsc%AzqzOvc%EzrfPg863z4IgzrPOuc6xIM%EzrfOvSDOtc%Bz47PhM63z4POriDPg86xz4IiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3F1ZXN0aW9uX3RleHRfY29udGVudF9sYWJlbCI6ICLOms6xzrjOv8%BzrnPg868z4zPgiDPhM63z4Igz4PPic%Dz4TOrs%CIM6xz4DOrM69z4TOt8%DzrfPgiDOs865zrEgz4TOt869IM61z4HPjs%EzrfPg86uIM%DzrHPgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfaW5pdGlhbF9jb250ZW50X2xhYmVsIjogIs6Rz4HPh865zrrPjCDPgM61z4HOuc61z4fPjM68zrXOvc6:IiwKCQkicXVpenplc19zdHVkaW9faG9tZV9jb3JyZWN0X2Fuc3dlcl9sYWJlbCI6ICLOo8%Jz4PPhM6uIM6xz4DOrM69z4TOt8%DzrciLAoKCQkicXVpenplc19zdHVkaW9faG9tZV9xdWVzdGlvbl9ncmFwaF9jb250ZW50X2xhYmVsIjogIs6jz4fOtc60zq:Osc%Dzrcgz4TOv8%FIM6xz4HPh865zrrOv8%NIM%AzrXPgc65zrXPh86:zrzOrc69zr:PhSDOus6xzrkgz4TOt8%CIM%Dz4nPg8%Ezq7PgiDOsc%AzqzOvc%EzrfPg863z4IgzrPOuc6xIM%EzrfOvSDOtc%Bz47PhM63z4POriDPg86xz4IiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2luaXRpYWxfZ3JhcGhfY29udGVudF9sYWJlbCI6ICLOkc%Bz4fOuc66z4wgz4DOtc%BzrnOtc%Hz4zOvM61zr3OvyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfY29ycmVjdF9ncmFwaF9hbnN3ZXJfbGFiZWwiOiAizqPPic%Dz4TOriDOsc%AzqzOvc%EzrfPg863IiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYWN0aXZpdHlfbGlzdF9sYWJlbCI6ICLOoc%FzrjOvM6vz4POtc65z4IiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2lucHV0X29wdGlvbnNfbGFiZWwiOiAizpXPgM65zrvOv86zzq3PgiDOtc65z4PPjM60zr:PhSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfdmFsaWRhdGlvbl9vcHRpb25zX2xhYmVsIjogIs6Vz4DOuc67zr:Os86tz4IgzrXPgM6xzrvOrs64zrXPhc%DzrfPgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfdmFyaWFibGVzX29wdGlvbnNfbGFiZWwiOiAizqTPhc%HzrHOr861z4IgzrzOtc%EzrHOss67zrfPhM6tz4IiLAoKCQkicXVpenplc19zdHVkaW9fY3VzdG9taXplX2dyYXBoX3Rvb2xiYXJfbGFiZWwiOiAizpXPgM65zrvOrc6%z4TOtSDOtc%BzrPOsc67zrXOr86xIM%Az4HOv8%CIM%AzrHPgc6:z4fOriDPg8%Ezr:OvSDOvM6xzrjOt8%Ezq4gzrPOuc6xIM6xz4DOrM69z4TOt8%Dzrcgz4TOt8%CIM61z4HPjs%EzrfPg863z4IuIiwKCQkicXVpenplc19zdHVkaW9fY3VzdG9taXplX2dyYXBoX3Rvb2xiYXJfaGVhZGVyIjogIs6gz4HOv8%DzrHPgc68zr:Os86uIM6zz4HOsc68zrzOrs%CIM61z4HOs86xzrvOtc6vz4nOvSIsCgoJCSJxdWl6emVzX3N0dWRpb19ob21lX3Rlc3RfcXVlc3Rpb25fYnV0dG9uX3Rvb2x0aXAiOiAizpTOv866zrnOvM6uIM6xz4XPhM6uz4Igz4TOt8%CIM61z4HPjs%EzrfPg863z4IiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2NhbmNlbF9idXR0b25fdG9vbHRpcCI6ICLOkc66z43Pgc%Jz4POtyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfc2F2ZV9idXR0b25fdG9vbHRpcCI6ICLOkc%Azr:OuM6uzrrOtc%Fz4POtyIsCgoJCSJxdWl6emVzX3N0dWRpb19vcHRpb25zX2ZpbHRlcl9sYWJlbCI6ICLOps65zrvPhM%BzqzPgc65z4POvM6xIM%Ez4nOvSDOtc%AzrnOu86:zrPPjs69IM6yzqzPg861zrkgzrHOvc6szrvPhc%DzrfPgiDPhM63z4Igz4PPic%Dz4TOrs%CIM6xz4DOrM69z4TOt8%DzrfPgi4iLAoJCSJxdWl6emVzX3N0dWRpb19vcHRpb25zX2ZpbHRlcl9hbGxfb3B0aW9uc19sYWJlbCI6ICLOlc68z4bOrM69zrnPg863IM%MzrvPic69IM%Ez4nOvSDOtc%AzrnOu86:zrPPjs69IiwKCQkicXVpenplc19zdHVkaW9fb3B0aW9uc19maWx0ZXJfcmVsZXZhbnRfb3B0aW9uc19sYWJlbCI6ICLOlc68z4bOrM69zrnPg863IM%Dz4fOtc%EzrnOus%Ozr0gzrXPgM65zrvOv86zz47OvSIsCgoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2NvbXBvdW5kX2Fuc3dlcl90aXRsZSI6ICLOo8%FzrPOus61zr3PhM%Bz4nPhM65zrrOriDOsc%AzqzOvc%EzrfPg863IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19jb21wb3VuZF9hbnN3ZXJfZ3JhZGVfYW5zd2VyX2JveGVzX3NlcGFyYXRlbHlfbGFiZWwiOiAizpLOsc64zrzOv867z4zOs863z4POtyDPgM67zrHOuc%Dzq:Pic69IM6xz4DOrM69z4TOt8%DzrfPgiDOvs61z4fPic%BzrnPg8%EzqwiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2NvbXBvdW5kX2Fuc3dlcl9ncmFkZV9hbnN3ZXJfYm94ZXNfc2VwYXJhdGVseV9oZWxwZXJfdGV4dCI6ICLOkc6%zrnOv867z4zOs863z4POtyDOus6szrjOtSDPgM67zrHOuc%Dzq:Ov8%FIM6xz4DOrM69z4TOt8%DzrfPgiDOvs61z4fPic%BzrnPg8%EzqwuIM6UzrnOsc%Gzr:Pgc61z4TOuc66zqwsIM%Ezr8gz4PPhc69zr:Ou865zrrPjCDPgM61z4HOuc61z4fPjM68zrXOvc6:IM6xzr7Ouc6:zrvOv86zzrXOr8%EzrHOuSDPic%CIM68zq:OsSDPhM65zrzOri4gzqTOsSDPgM67zrHOr8%DzrnOsSDOsc%AzqzOvc%EzrfPg863z4Igzr:Pgc6vzrbOv869z4TOsc65IM%Dz4TOvyDOkc%Bz4fOuc66z4wgz4DOtc%BzrnOtc%Hz4zOvM61zr3Ovy4iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2NvbXBvdW5kX2Fuc3dlcl9hbGxfYW5zd2Vyc19jb3JyZWN0X2xhYmVsIjogIs6MzrvOtc%CIM6:zrkgzrHPgM6xzr3PhM6uz4POtc65z4Igz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDPg8%Jz4PPhM6tz4IiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2NvbXBvdW5kX2Fuc3dlcl9hbGxfYW5zd2Vyc19jb3JyZWN0X2hlbHBlcl90ZXh0IjogIs6Rzr0gzr:PgM6:zrnOsc60zq7PgM6:z4TOtSDOsc%Az4wgz4TOuc%CIM6xz4DOsc69z4TOrs%DzrXOuc%CIM60zrXOvSDOtc6vzr3Osc65IM%Dz4nPg8%Ezq4sIM63IM%Dz4XOvc6:zrvOuc66zq4gzrXPgc%Oz4TOt8%DzrcgzrjOsSDOss6xzrjOvM6:zrvOv86zzrfOuM61zq8gz4nPgiDOtc%Dz4bOsc67zrzOrc69zrcuIM6UzrnOsc%Gzr:Pgc61z4TOuc66zqwsIM66zqzOuM61IM6xz4DOrM69z4TOt8%Dzrcgzq3Ph861zrkgzq3Ovc6xIM6yzqzPgc6:z4Igz4PPhM63IM6yzrHOuM68zr:Ou8%MzrPOt8%DzrcuIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19jb21wb3VuZF9hbnN3ZXJfdGFibGVfYW5zd2VyX2NvbHVtbl9sYWJlbCI6ICLOkc%AzqzOvc%EzrfPg863IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19jb21wb3VuZF9hbnN3ZXJfdGFibGVfZ3JhZGVfd2VpZ2h0X2NvbHVtbl9sYWJlbCI6ICLOks6sz4HOv8%CIM6yzrHOuM68zr:Ou86:zrPOr86xz4IiLAoKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX3RpdGxlIjogIs6czq3OuM6:zrTOv8%CIM61zrnPg8%MzrTOv8%FIM6xz4DOrM69z4TOt8%DzrfPgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9hbnN3ZXJfaW5wdXRfZmllbGRfbGFiZWwiOiAizqDOtc60zq:OvyDOtc65z4PPjM60zr:PhSDOsc%AzqzOvc%EzrfPg863z4IiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfbWF0aGVkaXRvcl9lbWJlZGRlZF9sYWJlbCI6ICLOlc69z4PPic68zrHPhM%JzrzOrc69zr:PgiDOtc%AzrXOvs61z4HOs86xz4PPhM6uz4IgzrzOsc64zrfOvM6xz4TOuc66z47OvSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9tYXRoZWRpdG9yX2VtYmVkZGVkX2hlbHBlcl90ZXh0IjogIs6fIM61z4DOtc6%zrXPgc6zzrHPg8%Ezq7PgiDOvM6xzrjOt868zrHPhM65zrrPjs69IE1hdGhUeXBlIM%AzrvOrs%Bz4nOvSDOtM%Fzr3Osc%Ezr:PhM6uz4TPic69IM68zrUgzrPPgc6xzrzOvM6uIM61z4HOs86xzrvOtc6vz4nOvSDOus6xzrkgzrvOtc65z4TOv8%Fz4HOs86vzrXPgiDOtc65z4PPjM60zr:PhSDPh861zrnPgc%MzrPPgc6xz4bOt8%CIM66zrHPhM6xz4fPjs%BzrnPg863z4IuIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX21hdGhlZGl0b3JfcG9wdXBfbGFiZWwiOiAizpXPgM61zr7Otc%BzrPOsc%Dz4TOrs%CIM68zrHOuM63zrzOsc%EzrnOus%Ozr0gz4POtSDOrc69zrEgzrHOvc6xzrTPhc%MzrzOtc69zr8gz4DOu86xzq:Pg865zr8iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfbWF0aGVkaXRvcl9wb3B1cF9oZWxwZXJfdGV4dCI6ICLOiM69zrEgz4DOtc60zq:OvyDOus61zrnOvM6tzr3Ov8%FIM68zrUgzq3Ovc6xIM66zr:Phc68z4DOryDPgM6:z4Ugzr7Otc66zrnOvc6sIM%Ezr:OvSDOtc%AzrXOvs61z4HOs86xz4PPhM6uIM68zrHOuM63zrzOsc%EzrnOus%Ozr0gTWF0aFR5cGUgz4POtSDOsc69zrHOtM%Fz4zOvM61zr3OvyDPgM6xz4HOrM64z4XPgc6:LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9wbGFpbl90ZXh0X2xhYmVsIjogIs6Rz4DOu8%MIM66zrXOr868zrXOvc6:IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX3BsYWluX3RleHRfaGVscGVyX3RleHQiOiAizpzPjM69zr8gzq3Ovc6xIM%AzrXOtM6vzr8gzrHPgM67zr:PjSDOus61zrnOvM6tzr3Ov8%FLCDOs865zrEgz4DOuc6:IM6xz4DOu86tz4IgzrHPgM6xzr3PhM6uz4POtc65z4IuIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX2F1eGlsaWFyX2lucHV0X2xhYmVsIjogIs6Szr:Ot864zrfPhM65zrrOriDOtc6vz4POv860zr:PgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9kaXNwbGF5X2F1eGlsaWFyX2lucHV0X2xhYmVsIjogIs6VzrzPhs6szr3Ouc%DzrcgzrLOv863zrjOt8%EzrnOus6:z40gQ2FsY01lIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX2Rpc3BsYXlfYXV4aWxpYXJfaW5wdXRfaGVscGVyX3RleHQiOiAizpXOvM%GzqzOvc65z4POtyDOss6:zrfOuM63z4TOuc66zq7PgiDOsc%BzrnOuM68zr:OvM63z4fOsc69zq7PgiBDYWxjTWUgzrzOsc62zq8gzrzOtSDPhM6:IM%Ez4XPgM65zrrPjCDPgM61zrTOr86:IM6xz4DOrM69z4TOt8%DzrfPgiDOvM6xzrjOt8%Ezq4uIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX3RleHRfYXV4aWxpYXJfaW5wdXRfbGFiZWwiOiAizpXOvM%GzqzOvc65z4POtyDOss6:zrfOuM63z4TOuc66zr:PjSDPgM61zrTOr86:z4UgzrrOtc65zrzOrc69zr:PhSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF90ZXh0X2F1eGlsaWFyX2lucHV0X2hlbHBlcl90ZXh0IjogIs6VzrzPhs6szr3Ouc%DzrcgzrLOv863zrjOt8%EzrnOus6:z40gz4DOtc60zq:Ov8%FIM66zrXOuc68zq3Ovc6:z4UgzrzOsc62zq8gzrzOtSDPhM6:IM%Ez4XPgM65zrrPjCDPgM61zrTOr86:IM6xz4DOrM69z4TOt8%DzrfPgiDOvM6xzrjOt8%Ezq4uIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX3JlcGxhY2VfYXV4aWxpYXJfaW5wdXRfbGFiZWwiOiAizpHOvc%EzrnOus6xz4TOrM%Dz4TOsc%DzrcgzrXOuc%Dz4zOtM6:z4UgzrHPgM6szr3PhM63z4POt8%CIM68zrUgz4TOvyDOss6:zrfOuM63z4TOuc66z4wgQ2FsY01lIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX3JlcGxhY2VfYXV4aWxpYXJfaW5wdXRfaGVscGVyX3RleHQiOiAizpHOvc%EzrnOus6xz4TOrM%Dz4TOsc%Dzrcgz4TOv8%FIM%AzrXOtM6vzr:PhSDOtc65z4PPjM60zr:PhSDOsc%AzqzOvc%EzrfPg863z4IgzrzOtSDOvM65zrEgzrLOv863zrjOt8%EzrnOus6uIM6xz4HOuc64zrzOv868zrfPh86xzr3OriBDYWxjTWUgzrPOuc6xIM%Ezrcgz4PPic%Dz4TOriDOsc%AzqzOvc%EzrfPg863LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9ub19hdXhpbGlhcl9pbnB1dF9sYWJlbCI6ICLOnc6xIM68zrfOvSDOtc68z4bOsc69zq:Ots61z4TOsc65IM63IM6yzr:Ot864zrfPhM65zrrOriDOtc6vz4POv860zr:PgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9ub19hdXhpbGlhcl9pbnB1dF9oZWxwZXJfdGV4dCI6ICLOnc6xIM68zrfOvSDOtc68z4bOsc69zq:Ots61z4TOsc65IM63IM6yzr:Ot864zrfPhM65zrrOriDOsc%BzrnOuM68zr:OvM63z4fOsc69zq4gQ2FsY01lIM6zzrnOsSDPhM6:IM%AzrXOtM6vzr8gzrXOuc%Dz4zOtM6:z4UgzrHPgM6szr3PhM63z4POt8%CIM68zrHOuM63z4TOri4iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfZGVmaW5lX2luaXRpYWxfY29udGVudF9idXR0b25fbGFiZWwiOiAizprOsc64zr:Pgc65z4POvM%Mz4IgzrHPgc%HzrnOus6:z40gz4DOtc%BzrnOtc%Hzr:OvM6tzr3Ov8%FIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX2N1c3RvbWl6ZV90b29sYmFyX2xhYmVsIjogIs6gz4HOv8%DzrHPgc68zr:Os86uIM6zz4HOsc68zrzOrs%CIM61z4HOs86xzrvOtc6vz4nOvSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9hdXhpbGlhcl9pbnB1dF9oaWRlX2ZpbGVfbWVudV9sYWJlbCI6ICLOkc%Az4zOus%Bz4XPiM63IM61z4DOuc67zr:Os8%Ozr0gzrHPgc%HzrXOr86:z4UgQ2FsY01lIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX2F1eGlsaWFyX2lucHV0X2hpZGVfZmlsZV9tZW51X2hlbHBlcl90ZXh0IjogIs6Rz4DPjM66z4HPhc%IzrcgzrXPgM65zrvOv86zz47OvSDPjM%Az4nPgiDPhM6:IM6szr3Ov865zrPOvM6xLCDOtyDOsc%Azr:OuM6uzrrOtc%Fz4POtyDOriDOtyDOu86uz4jOtyDOtc6zzrPPgc6sz4bPic69IENhbGNNZSDPg861IM68zrHOuM63z4TOrc%CIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3RpdGxlIjogIs6jz43Ovc%EzrHOvs63IM61zrnPg8%MzrTOv8%FIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3NlbGVjdF9hbGxfbGFiZWwiOiAizozOu86xIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfY2xlYXJfYWxsX2xhYmVsIjogIs6jzrHPhs6uIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2NvbnN0YW50c19sYWJlbCI6ICLOo8%EzrHOuM61z4HOrc%CIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfY29uc3RhbnRzX2hlbHBlcl90ZXh0IjogIs6Vz4DOuc67zq3Ovs%EzrUgz4TOsSDOs8%BzqzOvM68zrHPhM6xIM%Azr:PhSDOuM6xIM61z4HOvM63zr3Otc%Nzr:Ovc%EzrHOuSDPic%CIM%Dz4TOsc64zrXPgc6tz4IgzrHOvc%Ezq8gzrPOuc6xIM61zrvOtc%NzrjOtc%BzrXPgiDOvM61z4TOsc6yzrvOt8%Ezq3Pgi4gzpzPgM6:z4HOtc6vz4TOtSDOvc6xIM6:z4HOr8%DzrXPhM61IM%AzrXPgc65z4PPg8%Mz4TOtc%BzrXPgiDPg8%EzrHOuM61z4HOrc%CIM%Dz4TOvyDPhM68zq7OvM6xIMKrzprOsc64zr:Pgc65z4POvM%Mz4Igz4TPhc%HzrHOr8%Jzr0gzrzOtc%EzrHOss67zrfPhM%Ozr0gzrrOsc65IM%Dz4XOvc6xz4HPhM6uz4POtc%Jzr3Cuy4iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9jb25zdGFudHNfcGlfbGFiZWwiOiAiz4AiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9jb25zdGFudHNfZV9sYWJlbCI6ICJlIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfY29uc3RhbnRzX2lfbGFiZWwiOiAiaSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2NvbnN0YW50c19qX2xhYmVsIjogImoiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9jb25zdGFudHNfbW9yZV9jb25zdGFudHMiOiAizqDOtc%BzrnPg8%Dz4zPhM61z4HOtc%CIM%Dz4TOsc64zrXPgc6tz4IuLi4iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9jb25zdGFudHNfZGVmaW5lX2NvbnN0YW50X2J1dHRvbl9sYWJlbCI6ICLOms6xzrjOv8%BzrnPg868z4zPgiDOvc6tzrHPgiDPg8%EzrHOuM61z4HOrM%CIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2Z1bmN0aW9uc19sYWJlbCI6ICLOo8%Fzr3Osc%Bz4TOrs%DzrXOuc%CIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfZnVuY3Rpb25zX2hlbHBlcl90ZXh0IjogIs6Vz4DOuc67zq3Ovs%EzrUgz4TOsSDOv869z4zOvM6xz4TOsSDPgM6:z4UgzrjOsSDOtc%BzrzOt869zrXPjc6:zr3PhM6xzrkgz4nPgiDPg8%Fzr3Osc%Bz4TOrs%DzrXOuc%CLiDOnM%Azr:Pgc61zq:PhM61IM69zrEgzr:Pgc6vz4POtc%EzrUgz4DOtc%BzrnPg8%Dz4zPhM61z4HOtc%CIM%Dz4XOvc6xz4HPhM6uz4POtc65z4Igz4PPhM6:IM%EzrzOrs68zrEgwqvOms6xzrjOv8%BzrnPg868z4zPgiDPhM%Fz4fOsc6vz4nOvSDOvM61z4TOsc6yzrvOt8%Ez47OvSDOus6xzrkgz4PPhc69zrHPgc%Ezq7Pg861z4nOvcK7LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2Z1bmN0aW9uc19leHBfbG9nX2xhYmVsIjogIs61zrrOuM6tz4TOt8%CL867zr:Os86sz4HOuc64zrzOv8%CIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfZnVuY3Rpb25zX3RyaWdvbm9tZXRyaWNfbGFiZWwiOiAizqTPgc65zrPPic69zr:OvM61z4TPgc65zrrOriIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2Z1bmN0aW9uc19oeXBlcmJvbGljX2xhYmVsIjogIs6lz4DOtc%BzrLOv867zrnOus6uIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfZnVuY3Rpb25zX2FyaXRobWV0aWNfbGFiZWwiOiAizpHPgc65zrjOvM63z4TOuc66zq4iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9mdW5jdGlvbnNfbW9yZV9mdW5jdGlvbnMiOiAizqDOtc%BzrnPg8%Dz4zPhM61z4HOtc%CIM%Dz4XOvc6xz4HPhM6uz4POtc65z4IuLi4iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9mdW5jdGlvbnNfZGVmaW5lX2Z1bmN0aW9uX2J1dHRvbl9sYWJlbCI6ICLOms6xzrjOv8%BzrnPg868z4zPgiDOvc6tzrHPgiDPg8%Fzr3OrM%Bz4TOt8%DzrfPgiIsCgoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9tZWFzdXJlX3VuaXRzX2xhYmVsIjogIs6czr:Ovc6szrTOtc%CIM68zq3PhM%BzrfPg863z4IiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9tZWFzdXJlX3VuaXRzX2hlbHBlcl90ZXh0IjogIs6Vz4DOuc67zq3Ovs%EzrUgzr:Ovc%MzrzOsc%EzrEgz4DOv8%FIM64zrEgzrXPgc68zrfOvc61z43Ov869z4TOsc65IM%Jz4IgzrzOv869zqzOtM61z4IgzrzOrc%Ez4HOt8% %Mz4TOtc%BzrXPgiDOvM6:zr3OrM60zrXPgi4uLiIsCgoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF91bml0X3ByZWZpeGVzX2xhYmVsIjogIs6gz4HOv864zq3OvM6xz4TOsSDOvM6:zr3OrM60z4nOvSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfaGVscGVyX3RleHQiOiAizpXPgM65zrvOrc6%z4TOtSDPhM6xIM%Az4HOv864zq3OvM6xz4TOsSDPgM6:z4UgzrjOsSDOtc%AzrnPhM%Bzq3PgM6:zr3PhM6xzrkgzrzOsc62zq8gzrzOtSDOvM6:zr3OrM60zrXPgiDOvM6tz4TPgc63z4POt8%CLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfeW90dGFfbGFiZWwiOiAiWSIsCiAgICAgICAgInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfemV0dGFfbGFiZWwiOiAiWiIsCiAgICAgICAgInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfZXhhX2xhYmVsIjogIkUiLAogICAgICAgICJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF91bml0X3ByZWZpeGVzX3BldGFfbGFiZWwiOiAiUCIsCiAgICAgICAgInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfdGVyYV9sYWJlbCI6ICJUIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19naWdhX2xhYmVsIjogIkciLAogICAgICAgICJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF91bml0X3ByZWZpeGVzX21lZ2FfbGFiZWwiOiAiTSIsCiAgICAgICAgInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfa2lsb19sYWJlbCI6ICJrIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19oZWN0b19sYWJlbCI6ICJoIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19kZWNhX2xhYmVsIjogImRhIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19kZWNpX2xhYmVsIjogImQiLAogICAgICAgICJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF91bml0X3ByZWZpeGVzX2NlbnRpX2xhYmVsIjogImMiLAogICAgICAgICJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF91bml0X3ByZWZpeGVzX21pbGxpX2xhYmVsIjogIm0iLAogICAgICAgICJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF91bml0X3ByZWZpeGVzX21pY3JvX2xhYmVsIjogIs68IiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19uYW5vX2xhYmVsIjogIm4iLAogICAgICAgICJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF91bml0X3ByZWZpeGVzX3BpY29fbGFiZWwiOiAicCIsCiAgICAgICAgInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfZmVtdG9fbGFiZWwiOiAiZiIsCiAgICAgICAgInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfYXR0b19sYWJlbCI6ICJhIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc196ZXB0b19sYWJlbCI6ICJ6IiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc195b2N0b19sYWJlbCI6ICJ5IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19tb3JlX3ByZWZpeGVzX2xhYmVsIjogIs6gzrXPgc65z4PPg8%Mz4TOtc%BzrEgz4DPgc6:zrjOrc68zrHPhM6xLi4uIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2FsbG93ZWRfY29uc3RydWN0aW9uc19sYWJlbCI6ICLOlc%AzrnPhM%BzrXPgM%MzrzOtc69zrXPgiDOtM6:zrzOrc%CIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfYWxsb3dlZF9jb25zdHJ1Y3Rpb25zX21peGVkX2ZyYWN0aW9uc19sYWJlbCI6ICLOnM61zrnOus%EzqwgzrrOu86sz4POvM6xz4TOsSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2FsbG93ZWRfY29uc3RydWN0aW9uc19taXhlZF9mcmFjdGlvbnNfaGVscGVyX3RleHQiOiAizqTPjc%Azr:OuSDPjM%Az4nPgiAiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfbWl4ZWRfZnJhY3Rpb25zX2hlbHBlcl90ZXh0XzIiOiAiIM61z4HOvM63zr3Otc%Nzr:Ovc%EzrHOuSDPic%CICIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2FsbG93ZWRfY29uc3RydWN0aW9uc19taXhlZF9mcmFjdGlvbnNfaGVscGVyX3RleHRfMyI6ICIuIM6UzrnOsc%Gzr:Pgc61z4TOuc66zqwsIM61z4HOvM63zr3Otc%Nzr:Ovc%EzrHOuSDPic%CICIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2FsbG93ZWRfY29uc3RydWN0aW9uc19taXhlZF9mcmFjdGlvbnNfaGVscGVyX3RleHRfNCI6ICIuIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfYWxsb3dlZF9jb25zdHJ1Y3Rpb25zX2xpc3RzX2xhYmVsIjogIs6bzq:Pg8%EzrXPgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2FsbG93ZWRfY29uc3RydWN0aW9uc19saXN0c19oZWxwZXJfdGV4dCI6ICLOpM6xIM6szrPOus65z4PPhM%BzrEgeyB9IM61z4HOvM63zr3Otc%Nzr:Ovc%EzrHOuSDPic%CIM%Dz43OvM6yzr:Ou86xIM%AzrXPgc6vz4bPgc6xzr7Ot8%CIM67zrnPg8%Ez47OvS4gzpTOuc6xz4bOv8%BzrXPhM65zrrOrCwgzrXPgc68zrfOvc61z43Ov869z4TOsc65IM%Jz4Igz4DOsc%BzrXOvc64zq3Pg861zrnPgi4iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfbGlzdHNfd2l0aG91dF9lbmNsb3NlcnNfbGFiZWwiOiAizpvOr8%Dz4TOtc%CIM%Hz4nPgc6vz4Igz4PPjc68zrLOv867zrEgz4DOtc%Bzq:Phs%BzrHOvs63z4IiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfbGlzdHNfd2l0aG91dF9lbmNsb3NlcnNfaGVscGVyX3RleHQiOiAizp:PgM6:zrnOv860zq7PgM6:z4TOtSDPg8%Ezr:Ouc%HzrXOr86:IM6uIM6xzrrOv867zr:Phc64zq:OsSDPg8%Ezr:Ouc%HzrXOr8%Jzr0gzrXPgc68zrfOvc61z43Otc%EzrHOuSDPic%CIM67zq:Pg8%EzrEsIM6xzrrPjM68zrcgzrrOsc65IM%Hz4nPgc6vz4Igz4TOsSDPg8%NzrzOss6:zrvOsSDPgM61z4HOr8%Gz4HOsc6%zrfPgiB7IH0uIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfYWxsb3dlZF9jb25zdHJ1Y3Rpb25zX2ludGVydmFsc19sYWJlbCI6ICLOlM65zrHPg8%Ezq7OvM6xz4TOsSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2FsbG93ZWRfY29uc3RydWN0aW9uc19pbnRlcnZhbHNfaGVscGVyX3RleHQiOiAizqTPjc%Azr:OuSDPjM%Az4nPgiAoMCwxKSDOtc%BzrzOt869zrXPjc6:zr3PhM6xzrkgz4nPgiDOtM65zrHPg8%Ezq7OvM6xz4TOsS4gzpTOuc6xz4bOv8%BzrXPhM65zrrOrCwgzrHPgM6:z4TOtc67zr:Pjc69IM60zrnOsc69z43Pg868zrHPhM6xIM60z43OvyDPg8%Ezr:Ouc%HzrXOr8%Jzr0uIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfYWxsb3dlZF9jb25zdHJ1Y3Rpb25zX3JhdGlvc19sYWJlbCI6ICLOkc69zrHOu86:zrPOr861z4IiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfcmF0aW9zX2hlbHBlcl90ZXh0IjogIs6kz43PgM6:zrkgz4zPgM%Jz4IgMjozOjUgzrXPgc68zrfOvc61z43Ov869z4TOsc65IM%Jz4IgzrHOvc6xzrvOv86zzq:Otc%CLiDOlM65zrHPhs6:z4HOtc%EzrnOus6sLCDOtc6vzr3Osc65IM60zrnOsc60zr:Ph865zrrOrc%CIM66zrHOvc6:zr3Ouc66zq3PgiDOtM65zrHOuc%Bzq3Pg861zrnPgi4iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfc2NpZW50aWZpY19ub3RhdGlvbl9sYWJlbCI6ICLOpc%Azr:Ou86:zrPOuc%Dz4TOuc66zq4gzrXPgM65z4PPhM63zrzOv869zrnOus6uIM%DzrfOvM61zrnOv86zz4HOsc%Gzq:OsSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2FsbG93ZWRfY29uc3RydWN0aW9uc19zY2llbnRpZmljX25vdGF0aW9uX2hlbHBlcl90ZXh0IjogIs6kz43PgM6:zrkgz4zPgM%Jz4IgMS41ZS01IM6uIDEuNUUtNSDOtc%BzrzOt869zrXPjc6:zr3PhM6xzrkgz4nPgiDOtM61zrrOsc60zrnOus6:zq8gzrHPgc65zrjOvM6:zq8gz4POtSDOtc%AzrnPg8%EzrfOvM6:zr3Ouc66zq4gz4POt868zrXOuc6:zrPPgc6xz4bOr86xLiIsCgoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9zZXBhcmF0b3Jfc3ltYm9sc19sYWJlbCI6ICLOlM65zrHPh8%Jz4HOuc%Dz4TOuc66zqwgz4PPjc68zrLOv867zrEiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9zZXBhcmF0b3Jfc3ltYm9sc19wb2ludF9kcm9wZG93bl9sYWJlbCI6ICLOpM61zrvOtc6vzrEiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9zZXBhcmF0b3Jfc3ltYm9sc19jb21tYV9kcm9wZG93bl9sYWJlbCI6ICLOms%MzrzOvM6xIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfc2VwYXJhdG9yX3N5bWJvbHNfc3BhY2VfZHJvcGRvd25fbGFiZWwiOiAizprOtc69z4wiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9zZXBhcmF0b3Jfc3ltYm9sc19kcm9wZG93bl9ub3RoaW5nX2xhYmVsIjogIs6kzq:PgM6:z4TOsSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3NlcGFyYXRvcl9zeW1ib2xzX2Ryb3Bkb3duX2RlY2ltYWxfcGxhY2VzX2xhYmVsIjogIs6UzrXOus6xzrTOuc66zq3PgiDOuM6tz4POtc65z4IiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9zZXBhcmF0b3Jfc3ltYm9sc19kcm9wZG93bl9kaWdpdF9ncm91cHNfbGFiZWwiOiAizp:OvM6szrTOtc%CIM%IzrfPhs6vz4nOvSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3NlcGFyYXRvcl9zeW1ib2xzX2Ryb3Bkb3duX2xpc3RfaXRlbXNfbGFiZWwiOiAizqPPhM6:zrnPh861zq:OsSDOu86vz4PPhM6xz4IiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9zZXBhcmF0b3Jfc3ltYm9sc19oZWxwZXJfdGV4dCI6ICLOlc%AzrnOu86tzr7PhM61IM%EzrfOvSDOtc%BzrzOt869zrXOr86xIM%Ezr:PhSDPg8%FzrzOss%MzrvOv8%FIM%EzrXOu861zq:Osc%CLCDOus%MzrzOvM6xz4TOv8%CIM66zrHOuSDOus61zr3Ov8%NLiDOn8%Bzq:Ots61zrkgz4DPjs%CIM%Az4HOrc%AzrXOuSDOvc6xIM61zrrPhs%BzqzOts6:zr3PhM6xzrkgz4TOsSDOtM61zrrOsc60zrnOus6sIM%IzrfPhs6vzrEgzrrOsc65IM6:zrkgzrvOr8%Dz4TOtc%CLiIsCgoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl90aXRsZSI6ICLOo8%NzrPOus%BzrnPg863IM68zrUgzrHPgM6szr3PhM63z4POtyDOvM6xzrjOt8%Ezq4iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9saXRlcmFsbHlfZXF1YWxfbGFiZWwiOiAizprPhc%BzrnOv867zrXOus%EzrnOus6sIM6vzrTOuc6xIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fbGl0ZXJhbGx5X2VxdWFsX2hlbHBlcl90ZXh0IjogIs6XIM6xz4DOrM69z4TOt8%Dzrcgz4TOv8%FIM68zrHOuM63z4TOriDOuM6xIM%Az4HOrc%AzrXOuSDOvc6xIM%AzrvOt866z4TPgc6:zrvOv86zzrfOuM61zq8gzrHOus%BzrnOss%Oz4Igz4zPgM%Jz4Igzrcgz4PPic%Dz4TOriDOsc%AzqzOvc%EzrfPg863LCDOtc66z4TPjM%CIM6xz4DPjCDPhM65z4Igz4DOsc%BzrXOvc64zq3Pg861zrnPgiDOus6xzrkgz4TOv8%Fz4IgzrnPg86:zrTPjc69zrHOvM6:z4XPgiDPhM61zrvOtc%Dz4TOrc%CLiDOlc6%zrHOus6:zrvOv8%FzrjOtc6vIM69zrEgzrnPg8%Hz43Otc65IM6xzr3Ov8%Hzq4uIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fbWF0aGVtYXRpY2FsbHlfZXF1YWxfbGFiZWwiOiAizpzOsc64zrfOvM6xz4TOuc66zqwgzq:OtM65zrEiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9tYXRoZW1hdGljYWxseV9lcXVhbF9oZWxwZXJfdGV4dCI6ICLOlyDOsc%AzqzOvc%EzrfPg863IM%Ezr:PhSDOvM6xzrjOt8%Ezq4gz4PPhc6zzrrPgc6vzr3Otc%EzrHOuSDOvM61IM%Ezrcgz4PPic%Dz4TOriDOsc%AzqzOvc%EzrfPg863IM68zrUgz4fPgc6uz4POtyDPhM6:z4UgzrzOsc64zrfOvM6xz4TOuc66zr:PjSDOvM63z4fOsc69zrnPg868zr:PjS4iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9vcmRlcl9hbmRfcmVwZXRpdGlvbl9tYXR0ZXJzX2xhYmVsIjogIs6XIM%DzrXOuc%BzqwgzrrOsc65IM63IM61z4DOsc69zqzOu863z4jOtyDOrc%Hzr:Phc69IM%DzrfOvM6xz4POr86xIM%Dz4TOuc%CIM67zq:Pg8%EzrXPgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX29yZGVyX2FuZF9yZXBldGl0aW9uX21hdHRlcnNfaGVscGVyX3RleHQiOiAizpHOvSDOtyDOsc%AzqzOvc%EzrfPg863IM61zq:Ovc6xzrkgzrzOuc6xIM67zq:Pg8%EzrEgz4PPhM6:zrnPh861zq:Pic69LCDPhM6xIM%Dz4TOv865z4fOtc6vzrEgz4PPhM63zr0gzrHPgM6szr3PhM63z4POtyDPhM%Jzr0gzrzOsc64zrfPhM%Ozr0gzrjOsSDPgM%Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM%Dz4TOt869IM6vzrTOuc6xIM%DzrXOuc%BzqwgzrrOsc65IM69zrEgzrXOvM%GzrHOvc6vzrbOv869z4TOsc65IM%Ez4zPg861z4Igz4bOv8%Bzq3PgiDPjM%DzrXPgiDOus6xzrkgz4PPhM63IM%Dz4nPg8%Ezq4gzrHPgM6szr3PhM63z4POty4iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9yZXBldGl0aW9uX21hdHRlcnNfbGFiZWwiOiAizp:OuSDOtc%AzrHOvc6xzrvOrs%IzrXOuc%CIM6tz4fOv8%Fzr0gz4POt868zrHPg86vzrEgz4PPhM65z4IgzrvOr8%Dz4TOtc%CLCDOsc67zrvOrCDOtyDPg861zrnPgc6sIM%Mz4fOuSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX3JlcGV0aXRpb25fbWF0dGVyc19oZWxwZXJfdGV4dCI6ICLOkc69IM63IM6xz4DOrM69z4TOt8%DzrcgzrXOr869zrHOuSDOvM65zrEgzrvOr8%Dz4TOsSDPg8%Ezr:Ouc%HzrXOr8%Jzr0sIM%EzrEgz4PPhM6:zrnPh861zq:OsSDPg8%EzrfOvSDOsc%AzqzOvc%EzrfPg863IM%Ez4nOvSDOvM6xzrjOt8%Ez47OvSDOuM6xIM%Az4HOrc%AzrXOuSDOvc6xIM61zrzPhs6xzr3Or862zr:Ovc%EzrHOuSDPhM%Mz4POtc%CIM%Gzr:Pgc6tz4Igz4zPg861z4IgzrrOsc65IM%Dz4TOtyDPg8%Jz4PPhM6uIM6xz4DOrM69z4TOt8%DzrcsIM6xzrvOu86sIM%Mz4fOuSDOsc%AzrHPgc6xzq:PhM63z4TOsSDOvM61IM%EzrfOvSDOr860zrnOsSDPg861zrnPgc6sLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX3VucmVzdHJpY3RlZF9saXN0c19sYWJlbCI6ICLOlyDPg861zrnPgc6sIM66zrHOuSDOv865IM61z4DOsc69zrHOu86uz4jOtc65z4IgzrTOtc69IM6tz4fOv8%Fzr0gz4POt868zrHPg86vzrEgz4PPhM65z4IgzrvOr8%Dz4TOtc%CIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fdW5yZXN0cmljdGVkX2xpc3RzX2hlbHBlcl90ZXh0IjogIs6Rzr0gzrcgzrHPgM6szr3PhM63z4POtyDOtc6vzr3Osc65IM68zrnOsSDOu86vz4PPhM6xIM%Dz4TOv865z4fOtc6vz4nOvSwgzrzOtyDOu86szrLOtc%EzrUgz4XPgM%Mz4jOtyDPg86xz4Igz4TOtyDPg861zrnPgc6sIM66zrHOuSDPhM65z4IgzrXPgM6xzr3Osc67zq7PiM61zrnPgiDOs865zrEgzr3OsSDPg8%FzrPOus%Bzq:Ovc61z4TOtSDPhM63zr0gzrHPgM6szr3PhM63z4POtyDPhM%Jzr0gzrzOsc64zrfPhM%Ozr0gzrrOsc65IM%Ezrcgz4PPic%Dz4TOriDOsc%AzqzOvc%EzrfPg863LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX21hdGNoX2xldHRlcl9jYXNlX2xhYmVsIjogIs6Rzr3PhM65z4PPhM6:zq:Ph865z4POtyDPgM61zrbPjs69IM66zrHOuSDOus61z4bOsc67zrHOr8%Jzr0iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9tYXRjaF9sZXR0ZXJfY2FzZV9oZWxwZXJfdGV4dCI6ICLOpM6xIM66zrXPhs6xzrvOsc6vzrEgzrrOsc65IM%EzrEgz4DOtc62zqwgzrjOsSDPgM%Bzq3PgM61zrkgzr3OsSDPhM6xzrnPgc65zqzOts6:z4XOvSDOvM61IM6xzrrPgc6vzrLOtc65zrEuIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fbWF0Y2hfc3BhY2VzX2xhYmVsIjogIs6Rzr3PhM65z4PPhM6:zq:Ph865z4POtyDOus61zr3Pjs69IiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fbWF0Y2hfc3BhY2VzX2hlbHBlcl90ZXh0IjogIs6YzrEgz4DPgc6tz4DOtc65IM69zrEgz4XPgM6sz4HPh86:z4XOvSDOsc66z4HOuc6yz47PgiDPhM6xIM6vzrTOuc6xIM66zrXOvc6sIM%Dz4TOt869IM6xz4DOrM69z4TOt8%Dzrcgz4TOv8%FIM68zrHOuM63z4TOriDPjM%DzrEgzrrOsc65IM%Dz4TOtyDPg8%Jz4PPhM6uIM6xz4DOrM69z4TOt8%DzrcuIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fZXF1aXZhbGVudF9lcXVhdGlvbnNfbGFiZWwiOiAizpnPg86:zrTPjc69zrHOvM61z4IgzrXOvs65z4PPjs%DzrXOuc%CIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fZXF1aXZhbGVudF9lcXVhdGlvbnNfaGVscGVyX3RleHQiOiAizqTOvyDPg8%Nzr3Ov867zr8gzrvPjc%DzrXPic69IM%EzrfPgiDOtc6%zq:Pg8%Jz4POt8%CLCDPg8%NzrPOus%BzrnPg863z4Igzq4gz4TOv8%FIM%Dz4XPg8%Ezq7OvM6xz4TOv8%CIM%Azr:PhSDOv8%Bzq:Ots61z4TOsc65IM6xz4DPjCDPhM63zr0gzrHPgM6szr3PhM63z4POtyDPhM6:z4UgzrzOsc64zrfPhM6uIM64zrEgz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDPhM6:IM6vzrTOuc6:IM68zrUgzrHPhc%Ez4wgz4DOv8%FIM6:z4HOr862zrXPhM6xzrkgzrHPgM%MIM%Ezrcgz4PPic%Dz4TOriDOsc%AzqzOvc%EzrfPg863LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2FueV9hbnN3ZXJfbGFiZWwiOiAizp:PgM6:zrnOsc60zq7PgM6:z4TOtSDOsc%AzqzOvc%EzrfPg863IiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fYW55X2Fuc3dlcl9oZWxwZXJfdGV4dCI6ICLOkc69z4TOuc%Dz4TOv86vz4fOuc%Dzrcgz4zOu8%Jzr0gz4TPic69IM6xz4DOsc69z4TOrs%DzrXPic69IM%Ez4nOvSDOvM6xzrjOt8%Ez47OvS4gzqfPgc63z4POuc68zr:PgM6:zrnOrs%Dz4TOtSDOsc%Fz4TOrs69IM%EzrfOvSDOtc%AzrnOu86:zrPOriDOs865zrEgzr3OsSDPg8%EzrXOr867zrXPhM61IM%Dz4fPjM67zrnOsSDPg8%Ezr:Phc%CIM68zrHOuM63z4TOrc%CIM%Jz4Igz4DPgc6:z4Igz4TOuc%CIM61z4PPhs6xzrvOvM6tzr3Otc%CIM6xz4DOsc69z4TOrs%DzrXOuc%CLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2N1c3RvbV9ncmFkaW5nX2Z1bmN0aW9uX2xhYmVsIjogIs6gz4HOv8%DzrHPgc68zr:Pg868zq3Ovc63IM%Dz4XOvc6sz4HPhM63z4POtyDOss6xzrjOvM6:zrvPjM6zzrfPg863z4IiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9jdXN0b21fZ3JhZGluZ19mdW5jdGlvbl9oZWxwZXJfdGV4dCI6ICLOms6xzrjOv8%Bzq:Pg8%EzrUgz4TOtyDOtM65zrrOriDPg86xz4Igz4DPgc6:z4POsc%BzrzOv8%DzrzOrc69zrcgz4PPhc69zqzPgc%EzrfPg863IM6zzrnOsSDOrc67zrXOs8%Hzr8gz4TOt8%CIM6xz4DOrM69z4TOt8%DzrfPgiDOvM6xzrjOt8%Ezq4gz4PPhM6:IM%EzrzOrs68zrEgwqvOms6xzrjOv8%BzrnPg868z4zPgiDPhM%Fz4fOsc6vz4nOvSDOvM61z4TOsc6yzrvOt8%Ez47OvSDOus6xzrkgz4PPhc69zrHPgc%Ezq7Pg861z4nOvcK7LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2N1c3RvbV9ncmFkaW5nX2Z1bmN0aW9uX25hbWVfZHJvcGRvd25fbGFiZWwiOiAizozOvc6:zrzOsSDPg8%Fzr3OrM%Bz4TOt8%DzrfPgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2N1c3RvbV9ncmFkaW5nX2Z1bmN0aW9uX2RlZmluZV9mdW5jdGlvbl9idXR0b25fbGFiZWwiOiAizprOsc64zr:Pgc65z4POvM%Mz4Igzr3Orc6xz4Igz4PPhc69zqzPgc%EzrfPg863z4IiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9rZWVwX2FyZ3VtZW50c191bmV2YWx1YXRlZF9sYWJlbCI6ICLOlM61zr0gzrHOvs65zr:Ou86:zrPOv8%Nzr3PhM6xzrkgzr:OuSDOsc69zrXOvs6sz4HPhM63z4TOtc%CIM68zrXPhM6xzrLOu863z4TOrc%CIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fa2VlcF9hcmd1bWVudHNfdW5ldmFsdWF0ZWRfaGVscGVyX3RleHQiOiAizpcgzrHPgM6szr3PhM63z4POtyDPhM6:z4UgzrzOsc64zrfPhM6uIM60zrXOvSDOuM6xIM6xzr7Ouc6:zrvOv86zzrfOuM61zq8gzrrOsc65IM64zrEgzrTOv864zrXOryDPg8%Ezrcgz4PPhc69zqzPgc%EzrfPg863IM%Jz4Igz4DOsc%BzqzPg8%EzrHPg863IENhbGNNZS4gzpHPhc%Ezq4gzrcgzrTPhc69zrHPhM%Mz4TOt8%EzrEgzrXOr869zrHOuSDPgM6:zrvPjSDPgM%Bzr:Ot86zzrzOrc69zrcuIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3RpdGxlIjogIs6Rz4HOuc64zrzOv86vIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfc3ltYm9saWNfYW5zd2VyX2xhYmVsIjogIs6jz4XOvM6yzr:Ou865zrrOriDOsc%AzqzOvc%EzrfPg863IiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfc3ltYm9saWNfYW5zd2VyX2hlbHBlcl90ZXh0IjogIs6UzrXOvSDOtc%AzrnPhM%Bzq3PgM6:zr3PhM6xzrkgzr:OuSDOtM61zrrOsc60zrnOus6:zq8gzrHPgc65zrjOvM6:zq8uIM6XIM6xz4DOrM69z4TOt8%Dzrcgz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDOrc69zrHPgiDPg8%Fzr3OtM%FzrHPg868z4zPgiDPgM%BzqzOvs61z4nOvSwgzrrOu86xz4POvM6sz4TPic69LCDPgc65zrbPjs69IM66zrHOuSDPg8%Fzr3Osc%Bz4TOrs%DzrXPic69IM6xzrrOtc%BzrHOr8%Jzr0sIM%Dz4TOsc64zrXPgc%Ozr0gzrrOsc65IM68zrXPhM6xzrLOu863z4TPjs69LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3RvbGVyYW5jZV9sYWJlbCI6ICLOkc69zr:Ph86uIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfdG9sZXJhbmNlX2V4YWN0X2Fuc3dlcl9sYWJlbCI6ICLOkc66z4HOuc6yzq7PgiDOsc%AzqzOvc%EzrfPg863IiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfdG9sZXJhbmNlX2V4YWN0X2Fuc3dlcl9oZWxwZXJfdGV4dCI6ICLOlyDOsc%AzqzOvc%EzrfPg863IM%Ezr:PhSDOvM6xzrjOt8%Ezq4gz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDOsc66z4HOuc6yz47PgiDOr860zrnOsSDOvM61IM%Ezrcgz4PPic%Dz4TOriDOsc%AzqzOvc%EzrfPg863LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3RvbGVyYW5jZV9lcnJvcl9tYXJnaW5fbGFiZWwiOiAizqDOtc%BzrnOuM%Oz4HOuc6:IM%Dz4bOrM67zrzOsc%Ezr:PgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3RvbGVyYW5jZV9lcnJvcl9tYXJnaW5faGVscGVyX3RleHQiOiAizpcgz4PPic%Dz4TOriDOsc%AzqzOvc%EzrfPg863IM%Az4HOrc%AzrXOuSDOvc6xIM61zq:Ovc6xzrkgzrHPhc%Dz4TOt8%BzqwgzrXOvc%Ez4zPgiDPhM6:z4UgzrTOuc6xz4PPhM6uzrzOsc%Ezr:PgiDOsc69zr:Ph86uz4IuIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfdG9sZXJhbmNlX2Vycm9yX21hcmdpbl9kcm9wZG93bl9wZXJjZW50X2Vycm9yX2xhYmVsIjogIiUgz4DOv8%Dzr:Pg8%EzrnOsc6vzr8gz4PPhs6szrvOvM6xIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfdG9sZXJhbmNlX2Vycm9yX21hcmdpbl9kcm9wZG93bl9hYnNvbHV0ZV9lcnJvcl9sYWJlbCI6ICLOsc%Az4zOu8%Fz4TOvyDPg8%GzqzOu868zrEiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc190b2xlcmFuY2VfbWF0Y2hpbmdfZGlnaXRzX2xhYmVsIjogIs6KzrTOuc6xIM%IzrfPhs6vzrEiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc190b2xlcmFuY2VfbWF0Y2hpbmdfZGlnaXRzX2hlbHBlcl90ZXh0IjogIs6kzrEgz4DPgc%Oz4TOsSDPg863zrzOsc69z4TOuc66zqwgz4jOt8%Gzq:OsSDOriDOtM61zrrOsc60zrnOus6tz4IgzrjOrc%DzrXOuc%CIM%EzrfPgiDOsc%AzqzOvc%EzrfPg863z4Igz4TOv8%FIM68zrHOuM63z4TOriDOuM6xIM%Az4HOrc%AzrXOuSDOvc6xIM61zq:Ovc6xzrkgzq:OtM65zrEgzrzOtSDPhM63IM%Dz4nPg8%Ezq4gzrHPgM6szr3PhM63z4POty4iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc190b2xlcmFuY2VfbWF0Y2hpbmdfZGlnaXRzX2Ryb3Bkb3duX3NpZ25pZmljYW50X2ZpZ3VyZXNfbGFiZWwiOiAiz4POt868zrHOvc%EzrnOus6sIM%IzrfPhs6vzrEiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc190b2xlcmFuY2VfbWF0Y2hpbmdfZGlnaXRzX2Ryb3Bkb3duX2RlY2ltYWxfcGxhY2VzX2xhYmVsIjogIs60zrXOus6xzrTOuc66zq3PgiDOuM6tz4POtc65z4IiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc19mb3JtYXRfbGFiZWwiOiAizpzOv8%Bz4bOriIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX2Zvcm1hdF9zY2llbnRpZmljX25vdGF0aW9uX2xhYmVsIjogIs6Vz4DOuc%Dz4TOt868zr:Ovc65zrrOriDPg863zrzOtc65zr:Os8%BzrHPhs6vzrEiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc19mb3JtYXRfc2NpZW50aWZpY19ub3RhdGlvbl9oZWxwZXJfdGV4dCI6ICLOn865IM60zrXOus6xzrTOuc66zr:OryDOsc%BzrnOuM68zr:OryDPg8%Ezrcgz4PPic%Dz4TOriDOsc%AzqzOvc%EzrfPg863IM64zrEgz4DPgc6tz4DOtc65IM69zrEgzrXOus%Gz4HOrM62zr:Ovc%EzrHOuSDPg861IM66zrHOvc6:zr3Ouc66zr:PgM6:zrnOt868zq3Ovc63IM61z4DOuc%Dz4TOt868zr:Ovc65zrrOriDPg863zrzOtc65zr:Os8%BzrHPhs6vzrE6ICIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX2Zvcm1hdF9kZWNpbWFsX25vdGF0aW9uX2xhYmVsIjogIs6UzrXOus6xzrTOuc66zq4gz4POt868zrXOuc6:zrPPgc6xz4bOr86xIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfZm9ybWF0X2RlY2ltYWxfbm90YXRpb25faGVscGVyX3RleHQiOiAizp:OuSDOtM61zrrOsc60zrnOus6:zq8gzrHPgc65zrjOvM6:zq8gzrjOsSDPgM%Bzq3PgM61zrkgzr3OsSDOtc66z4bPgc6szrbOv869z4TOsc65IM%DzrUgzrHPgM67zq4gzrTOtc66zrHOtM65zrrOriDPg863zrzOtc65zr:Os8%BzrHPhs6vzrE6IDAsMDIyNCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX2Zvcm1hdF9hbnlfbm90YXRpb25fbGFiZWwiOiAizp:PgM6:zrnOsc60zq7PgM6:z4TOtSDPg863zrzOtc65zr:Os8%BzrHPhs6vzrEiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc19mb3JtYXRfYW55X25vdGF0aW9uX2hlbHBlcl90ZXh0IjogIs6fzrkgzrTOtc66zrHOtM65zrrOv86vIM6xz4HOuc64zrzOv86vIM64zrEgz4DPgc6tz4DOtc65IM69zrEgzrXOus%Gz4HOrM62zr:Ovc%EzrHOuSDOtc6vz4TOtSDPg861IM61z4DOuc%Dz4TOt868zr:Ovc65zrrOriDOtc6vz4TOtSDPg861IM60zrXOus6xzrTOuc66zq4gz4POt868zrXOuc6:zrPPgc6xz4bOr86xLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3ByZWNpc2lvbl9sYWJlbCI6ICLOkc66z4HOr86yzrXOuc6xIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfcHJlY2lzaW9uX3ByZWNpc2lvbl9jaGVja19sYWJlbCI6ICLOkc%Az4wiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc19wcmVjaXNpb25fcHJlY2lzaW9uX2NoZWNrX2xhYmVsXzIiOiAizq3Pic%CIM66zrHOuSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3ByZWNpc2lvbl9wcmVjaXNpb25fY2hlY2tfZHJvcGRvd25fc2lnbmlmaWNhbnRfZmlndXJlc19sYWJlbCI6ICLPg863zrzOsc69z4TOuc66zqwgz4jOt8%Gzq:OsSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3ByZWNpc2lvbl9wcmVjaXNpb25fY2hlY2tfZHJvcGRvd25fZGVjaW1hbF9wbGFjZXNfbGFiZWwiOiAizrTOtc66zrHOtM65zrrOrc%CIM64zq3Pg861zrnPgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3ByZWNpc2lvbl9wcmVjaXNpb25fY2hlY2tfaGVscGVyX3RleHQiOiAizpXOu86tzrPOvs%EzrUgz4TOv869IM61zrvOrM%HzrnPg8%Ezr8gzrrOsc65IM68zq3Os865z4PPhM6:IM6xz4HOuc64zrzPjCDPg863zrzOsc69z4TOuc66z47OvSDPiM63z4bOr8%Jzr0gzq4gzrTOtc66zrHOtM65zrrPjs69IM64zq3Pg861z4nOvSDPgM6:z4Ugz4DPgc6tz4DOtc65IM69zrEgzq3Ph861zrkgzrcgzrHPgM6szr3PhM63z4POtyDPhM6:z4UgzrzOsc64zrfPhM6uLCDPg8%FzrzPgM61z4HOuc67zrHOvM6yzrHOvc6:zrzOrc69z4nOvSDPhM%Jzr0gz4TOtc67zrnOus%Ozr0gzrzOt860zrXOvc65zrrPjs69LiIsCgoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc2ltcGxpZmljYXRpb25fdGl0bGUiOiAizpHPgM67zr:PgM6:zq:Ot8%DzrciLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc2ltcGxpZmljYXRpb25fZ2VuZXJhbF9sYWJlbCI6ICLOk861zr3Ouc66zqwiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc2ltcGxpZmljYXRpb25fc2ltcGxpZmllZF9sYWJlbCI6ICLOkc%AzrvOv8%Azr:Ouc63zrzOrc69zrciLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc2ltcGxpZmljYXRpb25fc2ltcGxpZmllZF9oZWxwZXJfdGV4dCI6ICLOlyDPgM6xz4HOrM%Dz4TOsc%DzrcgzrTOtc69IM68z4DOv8%BzrXOryDOvc6xIM6xz4DOu86:z4DOv865zrfOuM61zq8gzqzOu867zr8uIM6gzrXPgc65zrvOsc68zrLOrM69zrXOuSDOus67zqzPg868zrHPhM6xLCDOtM%Fzr3OrM68zrXOuc%CLCDPgc6vzrbOtc%CLCDPgM6:zrvPhc%Ozr3Phc68zrEsIM67zr:Os865zrrOrc%CIM%Dz4XOvc6xz4HPhM6uz4POtc65z4IsIM%Fz4DOtc%BzrLOsc%EzrnOus6tz4Igz4PPhc69zrHPgc%Ezq7Pg861zrnPgiwgzrTOtc66zrHOtM65zrrOv8%Nz4IgzrHPgc65zrjOvM6:z43Pgi4uLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zaW1wbGlmaWNhdGlvbl9leHBhbmRlZF9sYWJlbCI6ICLOlc66z4TOtc%EzrHOvM6tzr3OtyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zaW1wbGlmaWNhdGlvbl9leHBhbmRlZF9oZWxwZXJfdGV4dCI6ICLOjM67zrXPgiDOv865IM%Az4HOrM6%zrXOuc%CIM%Azr:PhSDOvM%Azr:Pgc6:z43OvSDOvc6xIM6zzq:Ovc6:z4XOvSDOtc66z4TOtc67zr:Pjc69z4TOsc65LiDOpM6xIM6zzrnOvc%MzrzOtc69zrEgzrrOsc%EzrHOvc6tzrzOv869z4TOsc65IM%DzrUgzrHOuM%Bzr:Or8%DzrzOsc%EzrEsIM61zrrPhM61zrvOtc6vz4TOsc65IM63IM%Az4HOrM6%zrcgz4TPic69IM6xz4DOu8%Ozr0gzrrOu86xz4POvM6sz4TPic69LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zaW1wbGlmaWNhdGlvbl9mYWN0b3JzX2xhYmVsIjogIs6gzrHPgc6szrPOv869z4TOtc%CIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX2ZhY3Rvcml6ZWRfbGFiZWwiOiAizqDOsc%BzrHOs86:zr3PhM6:z4DOv865zrfOvM6tzr3OtyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zaW1wbGlmaWNhdGlvbl9mYWN0b3JpemVkX2hlbHBlcl90ZXh0IjogIs6fzrkgzrHOus6tz4HOsc65zr:OuSDOriDPhM6xIM%Azr:Ou8%Fz47Ovc%FzrzOsSDOtc66z4bPgc6szrbOv869z4TOsc65IM%Jz4IgzrPOuc69z4zOvM61zr3OsSDPgM%Bz47PhM%Jzr0gzrHPgc65zrjOvM%Ozr0uIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX2NvbW1vbl9mYWN0b3JfbGFiZWwiOiAizprOv865zr3Ov86vIM%AzrHPgc6szrPOv869z4TOtc%CIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX2NvbW1vbl9mYWN0b3JfaGVscGVyX3RleHQiOiAizojPh861zrkgzrPOr869zrXOuSDOtc6%zrHOs8%JzrPOriDOus6:zrnOvc%Ozr0gz4DOsc%BzrHOs8%Mzr3PhM%Jzr0gz4TPic69IM6xzrjPgc6:zrnPg868zqzPhM%Jzr0uIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX2ZyYWN0aW9uc19sYWJlbCI6ICLOms67zqzPg868zrHPhM6xIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX2NvbW1vbl9kZW5vbWluYXRvcl9sYWJlbCI6ICLOms6:zrnOvc%Mz4Igz4DOsc%Bzr:Ovc6:zrzOsc%Dz4TOrs%CIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX2NvbW1vbl9kZW5vbWluYXRvcl9oZWxwZXJfdGV4dCI6ICLOpM6xIM66zrvOrM%DzrzOsc%EzrEgzrHPgM67zr:PgM6:zrnOv8%Nzr3PhM6xzrkgz4POtSDOrc69zrHOvSDOvM6:zr3Osc60zrnOus%MIM66zr:Ouc69z4wgz4DOsc%Bzr:Ovc6:zrzOsc%Dz4TOri4iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc2ltcGxpZmljYXRpb25fcm9vdHNfbGFiZWwiOiAizqHOr862zrXPgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zaW1wbGlmaWNhdGlvbl9yYXRpb25hbGl6ZWRfbGFiZWwiOiAizp:Pgc64zr:Ou86:zrPOuc66zq4iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc2ltcGxpZmljYXRpb25fcmF0aW9uYWxpemVkX2hlbHBlcl90ZXh0IjogIs6UzrXOvSDPhc%AzqzPgc%Hzr:Phc69IM%Bzq:Ots61z4Igz4PPhM6:zr0gz4DOsc%Bzr:Ovc6:zrzOsc%Dz4TOri4iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc2ltcGxpZmljYXRpb25fbWluaW1hbF9yYWRpY2FuZHNfbGFiZWwiOiAizpXOu86sz4fOuc%Dz4TOsSDPgc65zrbOuc66zqwiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc2ltcGxpZmljYXRpb25fbWluaW1hbF9yYWRpY2FuZHNfaGVscGVyX3RleHQiOiAizpcgzrzOtc%EzrHOss67zrfPhM6uIM%Ez4nOvSDPgc65zrbPjs69IM60zrXOvSDOrc%HzrXOuSDOus6sz4DOv865zr:OvSDPgM6xz4HOrM6zzr:Ovc%EzrEgz4DOv8%FIM69zrEgzrXPhs6xz4HOvM%MzrbOtc%EzrHOuSDPg8%Ezr:OvSDOtM61zq:Ous%Ezrcgz4TOt8%CIM%Bzq:Ots6xz4IsIM6:z4DPjM%EzrUgzrTOtc69IM68z4DOv8%BzrXOryDOvc6xIM6xz4DOu86:z4DOv865zrfOuM61zq8uIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19tZWFzdXJlX3VuaXRzX3RpdGxlIjogIs6czr:Ovc6szrTOtc%CIM68zq3PhM%BzrfPg863z4IiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbWVhc3VyZV91bml0c19tYXRjaF91bml0X2xhYmVsIjogIs6Rzr3PhM65z4PPhM6:zq:Ph865z4POtyDOvM6:zr3OrM60zrHPgiDOvM6tz4TPgc63z4POt8%CIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX21lYXN1cmVfdW5pdHNfbWF0Y2hfdW5pdF9oZWxwZXJfdGV4dCI6ICLOlyDOvM6:zr3OrM60zrEgzrzOrc%Ez4HOt8%DzrfPgiDPhM63z4IgzrHPgM6szr3PhM63z4POt8%CIM%Ezr:PhSDOvM6xzrjOt8%Ezq4gz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDOr860zrnOsSDOvM61IM%Ezrcgz4PPic%Dz4TOriDOsc%AzqzOvc%EzrfPg863LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19tZWFzdXJlX3VuaXRzX2FsbG93X290aGVyX3ByZWZpeGVzX2xhYmVsIjogIs6Vz4DOuc%Ez4HOrc%Azr:Ovc%EzrHOuSDOrM67zrvOsSDPgM%Bzr:OuM6tzrzOsc%EzrEiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbWVhc3VyZV91bml0c19hbGxvd19vdGhlcl9wcmVmaXhlc19oZWxwZXJfdGV4dCI6ICLOlc%AzrnPhM%Bzq3PgM61z4TOsc65IM63IM68zr:Ovc6szrTOsSDOvM6tz4TPgc63z4POt8%CIM%EzrfPgiDOsc%AzqzOvc%EzrfPg863z4Igz4TOv8%FIM68zrHOuM63z4TOriDOvc6xIM6tz4fOtc65IM60zrnOsc%Gzr:Pgc61z4TOuc66z4wgz4DPgc%MzrjOtc68zrEgzrHPgM%MIM6xz4XPhM%MIM%EzrfPgiDPg8%Jz4PPhM6uz4IgzrHPgM6szr3PhM63z4POt8%CLiIsCgoKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX2VsZW1lbnRzX3RpdGxlIjogIs6jz4TOv865z4fOtc6vzrEiLAoJCSJxdWl6emVzX3N0dWRpb19ncmFwaF92YWxpZGF0aW9uX29wdGlvbnNfY3JpdGVyaWFfdGl0bGUiOiAizprPgc65z4TOrs%BzrnOsSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2dyYXBoX3ZhbGlkYXRpb25fb3B0aW9uc190b2xlcmFuY2VfdGl0bGUiOiAizpHOvc6:z4fOriIsCgkJInF1aXp6ZXNfc3R1ZGlvX2dyYXBoX3ZhbGlkYXRpb25fb3B0aW9uc190b2xlcmFuY2VfaGVscGVyIjogIs6fz4HOr8%Dz4TOtSDPhM6:IM%Azr:Pg8%MIM%Dz4bOrM67zrzOsc%Ezr:PgiDPgM6:z4UgzrjOsSDOtc%AzrnPhM%Bzq3PgM61z4TOsc65IM68zrXPhM6xzr7PjSDPhM63z4IgzrHPgM6szr3PhM63z4POt8%CIM%Ezr:PhSDOvM6xzrjOt8%Ezq4gzrrOsc65IM%EzrfPgiDPg8%Jz4PPhM6uz4IgzrHPgM6szr3PhM63z4POt8%CLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2dyYXBoX3ZhbGlkYXRpb25fb3B0aW9uc19lbGVtZW50c19zdWJ0aXRsZSI6ICLOlc%AzrnOu86tzr7PhM61IM%EzrEgz4PPhM6:zrnPh861zq:OsSDPg8%EzrfOvSDOsc%AzqzOvc%EzrfPg863IM%Azr:PhSDOuM6xIM6xzr7Ouc6:zrvOv86zzrfOuM6:z43OvSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2dyYXBoX3ZhbGlkYXRpb25fb3B0aW9uc19zdXBlcmZsdW91c190ZXh0IjogIs6Rz4DOsc6zzr:Pgc61z43Ov869z4TOsc65IM%EzrEgz4DOtc%BzrnPhM%Ezqwgz4PPhM6:zrnPh861zq:OsSDPg8%Ezrcgz4PPic%Dz4TOriDOsc%AzqzOvc%EzrfPg863LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2dyYXBoX3ZhbGlkYXRpb25fb3B0aW9uc19zdXBlcmZsdW91c19oZWxwZXIiOiAizpTOtc69IM68z4DOv8%Bzr:Pjc69IM69zrEgz4XPgM6sz4HPh86:z4XOvSDPgM61z4HOuc%Dz4PPjM%EzrXPgc6xIM%Dz4TOv865z4fOtc6vzrEgz4PPhM63zr0gzrHPgM6szr3PhM63z4POtyDPhM6:z4UgzrzOsc64zrfPhM6uIM6xz4DPjCDOsc%Fz4TOrCDPgM6:z4Ugz4XPgM6sz4HPh86:z4XOvSDPg8%Ezrcgz4PPic%Dz4TOriDOsc%AzqzOvc%EzrfPg863LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2dyYXBoX3ZhbGlkYXRpb25fb3B0aW9uc19jb2xvcl90ZXh0IjogIs6Rzr3PhM65z4PPhM6:zq:Ph865z4POtyDPh8%Bz47OvM6xz4TOv8%CIiwKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX2NvbG9yX2hlbHBlciI6ICLOpM6xIM%Dz4TOv865z4fOtc6vzrEgz4PPhM63zr0gzrHPgM6szr3PhM63z4POtyDPhM6:z4UgzrzOsc64zrfPhM6uIM%Az4HOrc%AzrXOuSDOvc6xIM6tz4fOv8%Fzr0gz4TOvyDOr860zrnOvyDPh8%Bz47OvM6xIM%DzrUgz4PPh86tz4POtyDOvM61IM%Ezrcgz4PPic%Dz4TOriDOsc%AzqzOvc%EzrfPg863LiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2dyYXBoX3ZhbGlkYXRpb25fb3B0aW9uc19saW5lX3R5cGVfdGV4dCI6ICLOkc69z4TOuc%Dz4TOv86vz4fOuc%Dzrcgz4TPjc%Azr:PhSDOs8%BzrHOvM68zq7PgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2dyYXBoX3ZhbGlkYXRpb25fb3B0aW9uc19saW5lX3R5cGVfaGVscGVyIjogIs6kzrEgz4PPhM6:zrnPh861zq:OsSDPg8%EzrfOvSDOsc%AzqzOvc%EzrfPg863IM%Ezr:PhSDOvM6xzrjOt8%Ezq4gz4DPgc6tz4DOtc65IM69zrEgzq3Ph86:z4XOvSDPhM6:zr0gzq:OtM65zr8gz4TPjc%Azr8gzrPPgc6xzrzOvM6uz4IgKM%Dz4XOvM%AzrHOs86uz4IsIM60zrnOsc66zrXOus6:zrzOvM6tzr3Otykgz4POtSDPg8%Hzq3Pg863IM68zrUgz4TOtyDPg8%Jz4PPhM6uIM6xz4DOrM69z4TOt8%DzrcuIiwKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX3NlbGVjdG9yX3NlbGVjdF9hbGwiOiAizozOu86xIM%EzrEgz4PPhM6:zrnPh861zq:OsSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2dyYXBoX3ZhbGlkYXRpb25fb3B0aW9uc19zZWxlY3Rvcl9kaXN0cmlidXRlX2dyYWRlcyI6ICLOms6xz4TOsc69zr:OvM6uIM6yzrHOuM68zr:Ou86:zrPOuc%Ozr0iLAoJCSJxdWl6emVzX3N0dWRpb19ncmFwaF92YWxpZGF0aW9uX29wdGlvbnNfbG9hZGluZ19lbGVtZW50c19lcnJvciI6ICLOoM%Bzr:Orc66z4XPiM61IM%Dz4bOrM67zrzOsSDOus6xz4TOrCDPhM63IM%Gz4zPgc%Ez4nPg863IM%Dz4TOv865z4fOtc6vz4nOvSDOtc%AzrHOu86uzrjOtc%Fz4POt8%CIM6zz4HOsc%Gzq7OvM6xz4TOv8%CLiDOlM6:zrrOuc68zqzPg8%EzrUgzr7Osc69zqwuIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2NhbGNtZV9sYWJlbCI6ICLOk8%BzqzPiM%EzrUgzq3Ovc6xzr0gzrHOu86zz4zPgc65zrjOvM6:IM6zzrnOsSDOtM63zrzOuc6:z4XPgc6zzq:OsSDPhM%Fz4fOsc6vz4nOvSDOvM61z4TOsc6yzrvOt8%Ez47OvSwgzrHPgc65zrjOvM%Ozr0sIM%AzrHPgc6xz4PPhM6sz4POtc%Jzr0sIM6zz4HOsc%GzrfOvM6sz4TPic69IM6uIM67zrXOuc%Ezr:Phc%BzrPOr86xz4IgzrLOsc64zrzOv867z4zOs863z4POt8%COiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19hbGdvcml0aG1fbGFuZ3VhZ2VfbGFiZWwiOiAizpPOu8%Oz4PPg86xIM6xzrvOs86:z4HOr864zrzOv8%FIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX2xhYmVsIjogIs6jzrfOvM61zrnOv86zz4HOsc%Gzq:OsSDOvM61z4TOsc6yzrvOt8%Ez47OvSDOtc6%z4zOtM6:z4UiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfaGVscGVyX3RleHQiOiAizqDOsc%BzqzOtM61zrnOs868zrE6ICIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19leHByZXNzaW9uX2Zvcm1hdF9sYWJlbCI6ICLOnM6:z4HPhs6uIM%AzrHPgc6sz4PPhM6xz4POt8%CIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX2ltYWdpbmFyeV91bml0X2xhYmVsIjogIs6mzrHOvc%EzrHPg8%EzrnOus6uIM68zr:Ovc6szrTOsSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19pbWFnaW5hcnlfdW5pdF9pX2xhYmVsIjogImkiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfaW1hZ2luYXJ5X3VuaXRfal9sYWJlbCI6ICJqIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX3RpbWVzX29wZXJhdG9yX2xhYmVsIjogIs6kzrXOu861z4PPhM6uz4Igz4bOv8%Bz47OvSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc190aW1lc19vcGVyYXRvcl9kb3RfbGFiZWwiOiAiwrcgzqTOtc67zrXOr86xIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX3RpbWVzX29wZXJhdG9yX2Nyb3NzX2xhYmVsIjogIsOXIM6jz4TOsc%Fz4HPjM%CIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX3RpbWVzX29wZXJhdG9yX2ludmlzaWJsZV9sYWJlbCI6ICLOpc%Azr:Ovc6:zr:Pjc68zrXOvc6:z4IiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfbnVtYmVyX2Zvcm1hdF9sYWJlbCI6ICLOnM6:z4HPhs6uIM6xz4HOuc64zrzPjs69IiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX3ByZWNpc2lvbl9sYWJlbCI6ICLOpM%Nz4DOv8%CIM6xzrrPgc6vzrLOtc65zrHPgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19wcmVjaXNpb25fZHJvcGRvd25fc2lnbmlmaWNhbnRfZmlndXJlc19sYWJlbCI6ICLOo863zrzOsc69z4TOuc66zqwgz4jOt8%Gzq:OsSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19wcmVjaXNpb25fZHJvcGRvd25fZGVjaW1hbF9wbGFjZXNfbGFiZWwiOiAizpTOtc66zrHOtM65zrrOrc%CIM64zq3Pg861zrnPgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19ub3RhdGlvbl9sYWJlbCI6ICLOo863zrzOtc65zr:Os8%BzrHPhs6vzrEgzrXOvs%MzrTOv8%FIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX25vdGF0aW9uX2RlY2ltYWxfbGFiZWwiOiAizpTOtc66zrHOtM65zrrOriIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19ub3RhdGlvbl9zY2llbnRpZmljX2xhYmVsIjogIs6Vz4DOuc%Dz4TOt868zr:Ovc65zrrOriIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19ub3RhdGlvbl9hdXRvX2xhYmVsIjogIs6Rz4XPhM%MzrzOsc%EzrciLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfZGVjaW1hbF9sYWJlbCI6ICLOlM61zrrOsc60zrnOus%MIM60zrnOsc%Hz4nPgc65z4PPhM65zrrPjCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19kZWNpbWFsX2NvbW1hX2xhYmVsIjogIs6az4zOvM68zrEiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfZGVjaW1hbF9wb2ludF9sYWJlbCI6ICLOpM61zrvOtc6vzrEiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfdGhvdXNhbmRzX2xhYmVsIjogIs6UzrnOsc%Hz4nPgc65z4PPhM65zrrPjCDOv868zqzOtM6xz4Igz4jOt8%Gzq:Pic69IiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX3Rob3VzYW5kc19ub25lX2xhYmVsIjogIs6azrHOvc6tzr3OsSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc190aG91c2FuZHNfc3BhY2VfbGFiZWwiOiAizprOtc69z4wiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfdGhvdXNhbmRzX2NvbW1hX2xhYmVsIjogIs6az4zOvM68zrEiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfdGhvdXNhbmRzX3BvaW50X2xhYmVsIjogIs6kzrXOu861zq:OsSIsCgoJCSJxdWl6emVzX3N0dWRpb19hdXhpbGlhcl9pbml0aWFsX2NvbnRlbnRfY2FsY21lX2xhYmVsIjogIs6Tz4HOrM%Iz4TOtSDPhM6:IM6xz4HPh865zrrPjCDPgM61z4HOuc61z4fPjM68zrXOvc6:IM%EzrfPgiDOss6:zrfOuM63z4TOuc66zq7PgiDOsc%BzrnOuM68zr:OvM63z4fOsc69zq7PgiBDYWxjTWUgz4TOv8%FIM68zrHOuM63z4TOrjoiLAoJCQoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX2NvcnJlY3RfYW5zd2VyX2xhYmVsIjogIs6jz4nPg8%Ezq4gzrHPgM6szr3PhM63z4POtyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fY29ycmVjdF9hbnN3ZXJfcmVnZW5lcmF0ZV9hbnN3ZXJfYnV0dG9uX2xhYmVsIjogIs6Vz4DOsc69zrHOtM63zrzOuc6:z4XPgc6zzq:OsSDOsc%AzqzOvc%EzrfPg863z4IiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX2NvcnJlY3RfYW5zd2VyX2NvcHlfYW5zd2VyX2J1dHRvbl9sYWJlbCI6ICLOkc69z4TOuc6zz4HOsc%Gzq4gzrHPgM6szr3PhM63z4POt8%CIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9sYWJlbCI6ICLOkc%AzqzOvc%EzrfPg863IM68zrHOuM63z4TOriIsCgoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2xhYmVsIjogIs6azrHOuM6:z4HOuc%DzrzPjM%CIM6xz4DOrM69z4TOt8%DzrfPgiDOvM6xzrjOt8%Ezq4gzrPOuc6xIM61zrzPhs6szr3Ouc%Dzrcgz4TPic69IM%Dz4fOv867zq:Pic69IiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19jb3JyZWN0X2xhYmVsIjogIs6jzqnOo86kzpciLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX3BhcnRpYWxseV9jb3JyZWN0X2xhYmVsIjogIs6czpXOoc6ZzprOqc6jIM6jzqnOo86kzpciLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2luY29ycmVjdF9sYWJlbCI6ICLOlc6jzqbOkc6bzpzOlc6dzpciLAoKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fc3ludGF4X21hdGhfbGFiZWwiOiAizqPPjc69z4TOsc6%zrcgzrzOsc64zrfOvM6xz4TOuc66z47OvSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX3N5bnRheF9ncmFwaGljX2xhYmVsIjogIs6jz43Ovc%EzrHOvs63IM6zz4HOsc%GzrnOus%Ozr0iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9zeW50YXhfc3RyaW5nX2xhYmVsIjogIs6jz43Ovc%EzrHOvs63IM66zrXOuc68zq3Ovc6:z4UiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9lcXVpdmFsZW50X2xpdGVyYWxfbGFiZWwiOiAizprPhc%BzrnOv867zrXOus%EzrnOus6sIM6vzrTOuc6xIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fZXF1aXZhbGVudF9zeW1ib2xpY19sYWJlbCI6ICLOnM6xzrjOt868zrHPhM65zrrOrCDOr860zrnOsSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2VxdWl2YWxlbnRfZXF1YXRpb25zX2xhYmVsIjogIs6Zz4POv860z43Ovc6xzrzOtc%CIM61zr7Ouc%Dz47Pg861zrnPgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2VxdWl2YWxlbnRfYWxsX2xhYmVsIjogIs6fz4DOv865zrHOtM6uz4DOv8%EzrUgzrHPgM6szr3PhM63z4POtyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2VxdWl2YWxlbnRfZnVuY3Rpb25fbGFiZWwiOiAizqPPhc69zqzPgc%EzrfPg863IM6yzrHOuM68zr:Ou8%MzrPOt8%DzrfPgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2VxdWl2YWxlbnRfZ3JhcGhpY19sYWJlbCI6ICLOk861z4nOvM61z4TPgc65zrrOrCDOr860zrnOsSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2NoZWNrX3NpbXBsaWZpZWRfbGFiZWwiOiAizpHPgM67zr:PgM6:zrnOt868zq3Ovc63IiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfZXhwYW5kZWRfbGFiZWwiOiAizpXOus%EzrXPhM6xzrzOrc69zrciLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19mYWN0b3JpemVkX2xhYmVsIjogIs6gzrHPgc6xzrPOv869z4TOv8%Azr:Ouc63zrzOrc69zrciLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19yYXRpb25hbGl6ZWRfbGFiZWwiOiAizp:Pgc64zr:Ou86:zrPOuc66zq4iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19ub19jb21tb25fZmFjdG9yX2xhYmVsIjogIs6azrHOvc6tzr3Osc%CIM66zr:Ouc69z4zPgiDPgM6xz4HOrM6zzr:Ovc%EzrHPgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2NoZWNrX21pbmltYWxfcmFkaWNhbmRzX2xhYmVsIjogIs6VzrvOrM%HzrnPg8%EzrEgz4HOuc62zrnOus6sIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfY29tbW9uX2Rlbm9taW5hdG9yX2xhYmVsIjogIs6azr:Ouc69z4zPgiDPgM6xz4HOv869zr:OvM6xz4PPhM6uz4IiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19zY2llbnRpZmljX25vdGF0aW9uX2xhYmVsIjogIs6Vz4DOuc%Dz4TOt868zr:Ovc65zrrOriDPg863zrzOtc65zr:Os8%BzrHPhs6vzrEiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19kZWNpbWFsX25vdGF0aW9uX2xhYmVsIjogIs6UzrXOus6xzrTOuc66zq4gz4POt868zrXOuc6:zrPPgc6xz4bOr86xIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfc3ltYm9saWNfbGFiZWwiOiAizqPPhc68zrLOv867zrnOus6uIM6xz4DOrM69z4TOt8%DzrciLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19wcmVjaXNpb25fbGFiZWwiOiAizpHPgM%MICR7bWlufSDOrc%Jz4IgJHttYXh9ICR7cmVsYXRpdmV9IiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfcHJlY2lzaW9uX21pbl9sYWJlbCI6ICLOpM6:z4XOu86sz4fOuc%Dz4TOv869ICR7bWlufSAke3JlbGF0aXZlfSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2NoZWNrX3ByZWNpc2lvbl9tYXhfbGFiZWwiOiAizojPic%CICR7bWF4fSAke3JlbGF0aXZlfSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2NoZWNrX3ByZWNpc2lvbl9lcXVhbF9sYWJlbCI6ICIke21pbn0gJHtyZWxhdGl2ZX0iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19wcmVjaXNpb25fZGVjaW1hbF9wbGFjZXNfbGFiZWwiOiAizrTOtc66zrHOtM65zrrOrc%CIM64zq3Pg861zrnPgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2NoZWNrX3ByZWNpc2lvbl9zaWduaWZpY2FudF9maWd1cmVzX2xhYmVsIjogIs%DzrfOvM6xzr3PhM65zrrOv86vIM6xz4HOuc64zrzOv86vIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfZXF1aXZhbGVudF91bml0c19sYWJlbCI6ICLOis60zrnOsSDOvM6:zr3OrM60zrEgzrzOrc%Ez4HOt8%DzrfPgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2NoZWNrX25vX3N1cGVyZmx1b3VzX2xhYmVsIjogIs6Mz4fOuSDPgM61z4HOuc%Ez4TOrCDPg8%Ezr:Ouc%HzrXOr86xIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfY29sb3JfbGFiZWwiOiAizqfPgc%OzrzOsSIsCiAgCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfbGluZXN0eWxlX2xhYmVsIjogIs6jz4TOuc67IM6zz4HOsc68zrzOrs%CIiwKCgoJCSJxdWl6emVzX3N0dWRpb192aWV3X3NvdXJjZV9xdWVzdGlvbl94bWxfbGFiZWwiOiAizpXPgc%Oz4TOt8%DzrcgWE1MIiwKCQkicXVpenplc19zdHVkaW9fdmlld19zb3VyY2VfZ3JhbW1hcl91cmxfbGFiZWwiOiAiVVJMIM6zz4HOsc68zrzOsc%EzrnOus6uz4IiLAoJCSJxdWl6emVzX3N0dWRpb192aWV3X3NvdXJjZV9yZXNlcnZlZF93b3Jkc19sYWJlbCI6ICLOlM61z4POvM61z4XOvM6tzr3Otc%CIM67zq3Ovs61zrnPgiIsCgoJCSJxdWl6emVzX3N0dWRpb19zdW1tYXJ5X3RpdGxlIjogIs6Vz4DOsc67zq7OuM61z4XPg863IM66zrHOuSDOvM61z4TOsc6yzrvOt8%Ezq3PgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3N1bW1hcnlfaW5wdXRfbWV0aG9kX3RpdGxlIjogIs6czq3OuM6:zrTOv8%CIM61zrnPg8%MzrTOv8%FIiwKCQkicXVpenplc19zdHVkaW9fc3VtbWFyeV9hbGxvd2VkX2lucHV0X3RpdGxlIjogIs6Vz4DOuc%Ez4HOtc%Az4zOvM61zr3OtyDOtc6vz4POv860zr:PgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3N1bW1hcnlfY29tcGFyaXNvbl90aXRsZSI6ICLOo8%NzrPOus%BzrnPg863IiwKCQkicXVpenplc19zdHVkaW9fc3VtbWFyeV9wcm9wZXJ0aWVzX3RpdGxlIjogIs6ZzrTOuc%Mz4TOt8%EzrXPgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3N1bW1hcnlfdmFyaWFibGVzX3RpdGxlIjogIs6czrXPhM6xzrLOu863z4TOrc%CIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3N1bW1hcnlfZnJvbV9wcmVjaXNpb25fbGFiZWwiOiAizrHPgM%MIiwKCQkicXVpenplc19zdHVkaW9fc3VtbWFyeV91cF90b19wcmVjaXNpb25fbGFiZWwiOiAizq3Pic%CIiwKCQkicXVpenplc19zdHVkaW9fc3VtbWFyeV9zaWduaWZpY2FudF9maWd1cmVzX2xhYmVsIjogIs%DzrfOvM6xzr3PhM65zrrOrCDPiM63z4bOr86xIiwKCQkicXVpenplc19zdHVkaW9fc3VtbWFyeV9kZWNpbWFsX3BsYWNlc19sYWJlbCI6ICLOtM61zrrOsc60zrnOus6tz4IgzrjOrc%DzrXOuc%CIiwKCQkicXVpenplc19zdHVkaW9fc3VtbWFyeV9wZXJjZW50X2Vycm9yX2xhYmVsIjogIiUgz4DOv8%Dzr:Pg8%EzrnOsc6vzr8gz4PPhs6szrvOvM6xIiwKCQkicXVpenplc19zdHVkaW9fc3VtbWFyeV9hYnNvbHV0ZV9lcnJvcl9sYWJlbCI6ICLOsc%Az4zOu8%Fz4TOvyDPg8%GzqzOu868zrEiLAoJCSJxdWl6emVzX3N0dWRpb19zdW1tYXJ5X2lubGluZV9oYW5kX2xhYmVsIjogIk1hdGhUeXBlIM61zr3Pg8%JzrzOsc%Ez4nOvM6tzr3OtyDPh861zrnPgc%MzrPPgc6xz4bOtyDOus6xz4TOsc%Hz47Pgc65z4POtyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3N1bW1hcnlfcHJlY2lzaW9uX2xhYmVsIjogIs6RzrrPgc6vzrLOtc65zrEiLAoJCSJxdWl6emVzX3N0dWRpb19zdW1tYXJ5X2hhc19hbGdvcml0aG1fbGFiZWwiOiAizojPh861zrkgzrHOu86zz4zPgc65zrjOvM6:IiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2ltcG9ydF9kaWFsb2dfdGl0bGUiOiAizpXOuc%DzrHOs8%JzrPOriDPhM63z4IgzrXPgc%Oz4TOt8%DzrfPgjsiLAoJCSJxdWl6emVzX3N0dWRpb19pbXBvcnRfZGlhbG9nX2xhYmVsIjogIs6XIM61z4HPjs%EzrfPg863IM%Azr:PhSDPgM%Bz4zOus61zrnPhM6xzrkgzr3OsSDOsc69zr:Or86%zrXPhM61IM%AzrXPgc65zq3Ph861zrkgz4DOsc%Bz4nPh863zrzOrc69zrXPgiDOtM%Fzr3Osc%Ez4zPhM63z4TOtc%CLiDOlyDOtM65zrXPgc6zzrHPg86vzrEgzrXOuc%DzrHOs8%JzrPOrs%CIM68z4DOv8%BzrXOryDOvc6xIM6xzrvOu86szr7Otc65IM61zrvOsc%Gz4HPjs%CIM%Ezrcgz4PPhc68z4DOtc%BzrnPhs6:z4HOrCDPhM63z4IgzrXPgc%Oz4TOt8%DzrfPgi4gzqPPhc69zrnPg8%EzqzPhM6xzrkgzq3Ovc64zrXPgc68zrEgzr3OsSDOtM6:zrrOuc68zqzPg861z4TOtSDPgM%Bzr:Pg861zrrPhM65zrrOrCDPhM63zr0gzrXPgc%Oz4TOt8%DzrcgzrzOtc%Ezqwgz4TOt869IM61zrnPg86xzrPPic6zzq4uIiwKCQkicXVpenplc19zdHVkaW9faW1wb3J0X2RpYWxvZ19jb25maXJtX2J1dHRvbl9sYWJlbCI6ICLOkc%Azr:OtM6:z4fOriIsCgkJInF1aXp6ZXNfc3R1ZGlvX2ltcG9ydF9kaWFsb2dfY2FuY2VsX2J1dHRvbl9sYWJlbCI6ICLOkc66z43Pgc%Jz4POtyIsCgoJCSJxdWl6emVzX3N0dWRpb19yZWxldmFudF9vcHRpb25zX2RpYWxvZ190aXRsZSI6ICLOnM63IM%Dz4XOvM6yzrHPhM6tz4Igz4HPhc64zrzOr8%DzrXOuc%CIiwKCQkicXVpenplc19zdHVkaW9fcmVsZXZhbnRfb3B0aW9uc19kaWFsb2dfbGFiZWwiOiAizp:OuSDPgc%FzrjOvM6vz4POtc65z4Igz4DOv8%FIM6tz4fOv8%Fzr0gzrXPgM65zrvOtc6zzrXOryDOtM61zr0gzrXOr869zrHOuSDPg8%FzrzOss6xz4TOrc%CIM68zrUgz4TOv8%Fz4IgzrnPg8%Hz4XPgc65z4POvM6:z43PgiDPgM6:z4Ugzq3Ph86:z4XOvSDPgM%Bzr:Ous%Nz4jOtc65IM6xz4DPjCDPhM63IM%Dz4nPg8%Ezq4gzrHPgM6szr3PhM63z4POriDPg86xz4IuIM6Yzq3Ou861z4TOtSDPg86vzrPOv8%Fz4HOsSDOvc6xIM%Dz4XOvc61z4fOr8%DzrXPhM61OyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3JlbGV2YW50X29wdGlvbnNfZGlhbG9nX2NvbmZpcm1fYnV0dG9uX2xhYmVsIjogIs6dzrHOuSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3JlbGV2YW50X29wdGlvbnNfZGlhbG9nX2NhbmNlbF9idXR0b25fbGFiZWwiOiAizozPh865IiwKCgkJImFuc3dlcl9maWVsZF9tYXRodHlwZV9wb3B1cF9idXR0b25fdG9vbHRpcCI6ICLOhs69zr:Ouc6zzrzOsSDPhM6:z4UgzrXPgM61zr7Otc%BzrPOsc%Dz4TOriDOvM6xzrjOt868zrHPhM65zrrPjs69IE1hdGhUeXBlIiwKCQkKCQkicG9wdXBfdGV4dF9maWVsZF93YXJuaW5nX3RpdGxlIjogIs6czrcgzrHPgM6:zrjOt866zrXPhc68zq3Ovc61z4IgzrHOu867zrHOs86tz4IiLAoJCSJwb3B1cF90ZXh0X2ZpZWxkX3dhcm5pbmdfbWVzc2FnZSI6ICLOkc69IM66zrvOtc6vz4POtc%EzrUgzrHPhc%Ez4wgz4TOvyDPgM6xz4HOrM64z4XPgc6:LCDOuM6xIM%HzqzPg861z4TOtSDPjM67zrXPgiDPhM65z4IgzrzOtyDOsc%Azr:OuM63zrrOtc%FzrzOrc69zrXPgiDOsc67zrvOsc6zzq3Pgi4gzpjOrc67zrXPhM61IM%Dzq:Os86:z4XPgc6xIM69zrEgz4PPhc69zrXPh86vz4POtc%EzrU7IiwKCQkicG9wdXBfdGV4dF9maWVsZF93YXJuaW5nX2FjY2VwdF9idXR0b25fbGFiZWwiOiAizpHPgM6:zrTOv8%Hzq4iLAoJCSJwb3B1cF90ZXh0X2ZpZWxkX3dhcm5pbmdfY2FuY2VsX2J1dHRvbl9sYWJlbCI6ICLOkc66z43Pgc%Jz4POtyIsCgkJInBvcHVwX3RleHRfZmllbGRfd2FybmluZ19zYXZlX2FuZF9jbG9zZV9idXR0b25fbGFiZWwiOiAizpHPgM6:zrjOrs66zrXPhc%DzrcgzrrOsc65IM66zrvOtc6vz4POuc68zr8iLAoJCSJwb3B1cF90ZXh0X2ZpZWxkX3dhcm5pbmdfY2xvc2Vfd2l0aG91dF9zYXZpbmdfYnV0dG9uX2xhYmVsIjogIs6azrvOtc6vz4POuc68zr8gz4fPic%Bzq:PgiDOsc%Azr:OuM6uzrrOtc%Fz4POtyIsCgkJCgkJImNsaWNrdG9lZGl0YWxnb3JpdGhtIjogIs6azqzOvc%EzrUgzrrOu865zrogz4PPhM6:IM66zr:Phc68z4DOryDOs865zrEgzrvOrs%IzrcgzrrOsc65IM61zrrPhM6tzrvOtc%Dzrcgz4TOt8%CIM61z4bOsc%BzrzOv86zzq7PgiBXaXJpcyBDYXMgzrPOuc6xIM69zrEgzrXPgM61zr7Otc%BzrPOsc%Dz4TOtc6vz4TOtSDPhM6:zr0gzrHOu86zz4zPgc65zrjOvM6:IM%EzrfPgiDOtc%Bz47PhM63z4POt8%CLiIsCgkJInJ1bmNhbGN1bGF0b3IiOiAizpXOus%Ezq3Ou861z4POtyDOsc%BzrnOuM68zr:OvM63z4fOsc69zq7PgiIsCgkJImNsaWNrdG9ydW5jYWxjdWxhdG9yIjogIs6azqzOvc%EzrUgzrrOu865zrogz4PPhM6:IM66zr:Phc68z4DOryDOs865zrEgzrvOrs%IzrcgzrrOsc65IM61zrrPhM6tzrvOtc%Dzrcgz4TOt8%CIM61z4bOsc%BzrzOv86zzq7PgiBXaXJpcyBDYXMgzrPOuc6xIM69zrEgzrrOrM69zrXPhM61IM%Ezr:Phc%CIM%Fz4DOv867zr:Os865z4POvM6:z43PgiDPgM6:z4UgzrjOrc67zrXPhM61LiA8YSBocmVmPVwiaHR0cDovL3d3dy53aXJpcy5jb20vZW4vcXVpenplcy9kb2NzL21vb2RsZS9tYW51YWwvamF2YVwiIHRhcmdldD1cIl9ibGFua1wiPs6czqzOuM61z4TOtSDPgM61z4HOuc%Dz4PPjM%EzrXPgc6xPC9hPi4iLAoJCSJzZW5kaW5naW5pdGlhbHNlc3Npb24iOiAizpHPgM6:z4PPhM6:zrvOriDOsc%Bz4fOuc66zq7PgiDPgM61z4HOuc%MzrTOv8%FIM%Dz43Ovc60zrXPg863z4IuLi4iLAoJCSJ3YWl0aW5nZm9ydXBkYXRlcyI6ICLOkc69zrHOvM6:zr3OriDOs865zrEgzrXOvc63zrzOtc%Bz47Pg861zrnPgi4uLiIsCgkJInNlc3Npb25jbG9zZWQiOiAizozOu861z4Igzr:OuSDOsc67zrvOsc6zzq3PgiDOsc%Azr:OuM63zrrOtc%Nz4TOt866zrHOvSIsCgkJImdvdHNlc3Npb24iOiAizp:OuSDOsc67zrvOsc6zzq3PgiDOsc%Azr:OuM63zrrOtc%Nz4TOt866zrHOvSAozrHOvc6xzrjOtc%Oz4HOt8%DzrcgJHtufSkuIiwKCQkic2hvd2NhcyI6ICLOp8%Bzq7Pg863IM%Ezr:PhSBXaXJpcyBDQVMiLAoJCSJzaG93Y2FsY21lIjogIs6nz4HOrs%Dzrcgz4TOv8%FIENhbGNNZSIsCgkJImxlYXJubW9yZSI6ICLOoM61z4HOuc%Dz4PPjM%EzrXPgc61z4Igz4DOu863z4HOv8%Gzr:Pgc6vzrXPgiIsCgoKCQkiY2F0YWxhbiI6ICJDYXRhbMOgIiwKCQkiZW5nbGlzaCI6ICJFbmdsaXNoIiwKCQkic3BhbmlzaCI6ICJFc3Bhw7FvbCIsCgkJImVzdGlvbmlhbiI6ICJFZXN0aSIsCgkJImJhc3F1ZSI6ICJFdXNrYXJhIiwKCQkiZnJlbmNoIjogIkZyYW7Dp2FpcyIsCgkJImdlcm1hbiI6ICJEZXV0c2NoIiwKCQkiaXRhbGlhbiI6ICJJdGFsaWFubyIsCgkJImR1dGNoIjogIk5lZGVybGFuZHMiLAoJCSJwb3J0dWd1ZXNlIjogIlBvcnR1Z3XDqnMgKFBvcnR1Z2FsKSIsCgoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfYWxnb3JpdGhtX2NvbnZlcnRfdG9fY2FsY21lX2J1dHRvbl9sYWJlbCI6ICLOnM61z4TOsc%Ez4HOv8%Azq4gz4POtSBDYWxjTWUiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfYWxnb3JpdGhtX2NvbnZlcnRfdG9fY2FsY21lX2Rlc2NyaXB0aW9uX2xhYmVsIjogIs6fIM6xzrvOs8%Mz4HOuc64zrzOv8%CIM%EzrfPgiDOtc%Bz47PhM63z4POt8%CIM64zrEgzrXOuc%DzrHPh864zrXOryDOsc%Az4wgz4TOvyBXaXJpcyBDQVMgz4PPhM6:zr0gzr3Orc6:IM61z4DOtc6%zrXPgc6zzrHPg8%Ezq4gzrHOu86zz4zPgc65zrjOvM%Jzr0sIM%Ezr8gQ2FsY01lLiDOnyDPgM%Bzr:Ous%Nz4DPhM%Jzr0gzrHOu86zz4zPgc65zrjOvM6:z4Igz4DPgc6tz4DOtc65IM69zrEgzrHOvc6xzrjOtc%Jz4HOt864zrXOryDOus6xzrkgzr3OsSDOtc67zrXOs8%HzrjOtc6vLiDOn865IM6xzrvOs8%Mz4HOuc64zrzOv865IM%Azr:PhSDOrc%Hzr:Phc69IM61zrnPg86xz4fOuM61zq8gz4PPhM6:IENhbGNNZSDOtM61zr0gzrXOr869zrHOuSDOtM%Fzr3Osc%Ez4wgzr3OsSDOsc69zr:Ouc%Hz4TOv8%Nzr0gz4DOu86tzr:OvSDOvM61IM%Ezr8gV2lyaXMgQ0FTLiDOkc69IM61z4DOuc64z4XOvM61zq:PhM61IM6xzr3Osc6vz4HOtc%Dzrcgz4TOt8%CIM61zrnPg86xzrPPic6zzq7PgiDOvM61z4TOrCDPhM63zr0gzrHPgM6:zrTOv8%Hzq4sIM68zrfOvSDOsc%Azr:OuM63zrrOtc%Nz4POtc%EzrUgz4TOt869IM61z4HPjs%EzrfPg863LiDOms6szr3PhM61IM66zrvOuc66IM%Dz4TOt869IMKrzpHOus%Nz4HPic%DzrfCuyDPg8%Ezr8gz4DOsc%BzqzOuM%Fz4HOvyDPhM6:z4UgV2lyaXMgUXVpenplcyBTdHVkaW8gzrrOsc65IM6xzr3Ov86vzr7PhM61IM%EzrfOvSDPgM6szrvOuS4iLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfYWxnb3JpdGhtX2NvbnZlcnRfdG9fYWxnb3JpdGhtX2Rlc2NyaXB0aW9uX2xhYmVsIjogIs6czrXPhM6xz4TPgc6:z4DOriDPic%CIM6xzrvOs8%Mz4HOuc64zrzOv8%CIiwKCgkJImFuc3dlcl9maWVsZF9tYXRodHlwZV9wb3B1cF9hY2NlcHRfZGlhbG9nIjogIs6Rz4DOv860zr:Ph86uIiwKCQkiYW5zd2VyX2ZpZWxkX21hdGh0eXBlX3BvcHVwX2NhbmNlbF9kaWFsb2ciOiAizpHOus%Nz4HPic%DzrciLAoJCQoJCSJzeW50YXhfZ3JhcGhpYyI6ICLOs8%BzrHPhs65zrrOriIsCgkJInN5bnRheF9ncmFwaGljX2Rlc2NyaXB0aW9uIiA6IijOs8%BzrHPhs6uzrzOsc%EzrEsIM6zzrXPic68zrXPhM%BzrnOus6sIM%Dz4TOv865z4fOtc6vzrEuLi4pIiwKCQkic3ludGF4X2dyYXBoaWNfY29yZWN0X2ZlZWRiYWNrIjogIs6XIM%Dz43Ovc%EzrHOvs63IM%EzrfPgiDOsc%AzqzOvc%EzrfPg863z4IgzrXOr869zrHOuSDPg8%Jz4PPhM6uIiwKCQoJCSJjaGVja19jb2xvciI6ICLOrc%HzrXOuSDPhM6:IM6vzrTOuc6:IM%Hz4HPjs68zrEiLAoJCSJjaGVja19saW5lc3R5bGUiOiAizq3Ph861zrkgz4TOvyDOr860zrnOvyDPg8%EzrnOuyDOs8%BzrHOvM68zq7PgiIsCgkJImNoZWNrX25vX3N1cGVyZmx1b3VzIjogIs60zrXOvSDPgM61z4HOuc6tz4fOtc65IM%AzrXPgc65z4TPhM6sIM%Dz4TOv865z4fOtc6vzrEiLAoJCgkJImVxdWl2YWxlbnRfZ3JhcGhpYyI6ICLOs861z4nOvM61z4TPgc65zrrOrCDOr860zrnOsSIsCgkJImVxdWl2YWxlbnRfZ3JhcGhpY19jb3JyZWN0X2ZlZWRiYWNrIjogIs6XIM6xz4DOrM69z4TOt8%DzrcgzrXOr869zrHOuSDOs861z4nOvM61z4TPgc65zrrOrCDOr860zrnOsSIsCgoJCSJwYXJhbWV0ZXIiOiAiz4DOsc%BzqzOvM61z4TPgc6:z4IiLAoJCSJhbnN3ZXIiOiAizrHPgM6szr3PhM63z4POtyIsCgoJCSJxdWl6emVzX3N0dWRpb19ob21lX2NvcHlfaW5pdGlhbF9jb250ZW50X2J1dHRvbl90ZXh0IjogIs6Rzr3PhM65zrPPgc6xz4bOriDOsc%Az4wgz4TOvyDOsc%Bz4fOuc66z4wgz4DOtc%BzrnOtc%Hz4zOvM61zr3OvyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfY29weV9jb3JyZWN0X2Fuc3dlcl9idXR0b25fdGV4dCI6ICLOkc69z4TOuc6zz4HOsc%Gzq4gzrHPgM%MIM%Ezrcgz4PPic%Dz4TOriDOsc%AzqzOvc%EzrfPg863IiwKCQkicXVpenplc19zdHVkaW9faG9tZV9hbnN3ZXJfdHlwZV9nZW9tZXRyeV9sYWJlbCI6ICLOo8%HzrXOtM65zr:Os8%BzqzPhs6:z4IiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2Fuc3dlcl90eXBlX3N0YXRpc3RpY2FsX2NoYXJ0c19sYWJlbCI6ICLOo8%EzrHPhM65z4PPhM65zrrOrCDOtM65zrHOs8%BzqzOvM68zrHPhM6xIiwKCQkKCQkicXVpenplc19zdHVkaW9faG9tZV9jb3JyZWN0X2Fuc3dlcl9kZXNjcmlwdGlvbl9tYXRoIjogIs6VzrnPg86xzrPOrM6zzrXPhM61IM%Ezrcgz4PPic%Dz4TOriDOsc%AzqzOvc%EzrfPg863IM6zzrnOsSDOsc%Fz4TOrs69IM%EzrfOvSDOtc%Bz47PhM63z4POty4gzpzPgM6:z4HOtc6vz4TOtSDOvc6xIM%Ez4HOv8%Azr:PgM6:zrnOrs%DzrXPhM61IM%EzrEgzrrPgc65z4TOrs%BzrnOsSDPgM6:z4Ugz4fPgc63z4POuc68zr:PgM6:zrnOv8%Nzr3PhM6xzrkgzrPOuc6xIM69zrEgz4TOvyDPg8%FzrPOus%Bzq:Ovc61z4TOtSDOvM61IM%EzrfOvSDOsc%AzqzOvc%EzrfPg863IM%Ez4nOvSDOvM6xzrjOt8%Ez47OvSDPg86xz4Igz4fPgc63z4POuc68zr:PgM6:zrnPjs69z4TOsc%CIM%Ezr8gzrzOtc69zr:PjSDOtc%AzrnOu86:zrPPjs69IM61z4DOuc66z43Pgc%Jz4POt8%CLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfY29ycmVjdF9hbnN3ZXJfZGVzY3JpcHRpb25fZ3JhcGhpYyI6ICLOlc65z4POsc6zzqzOs861z4TOtSDPhM63IM%Dz4nPg8%Ezq4gzrHPgM6szr3PhM63z4POtyDOs865zrEgzrHPhc%Ezq7OvSDPhM63zr0gzrXPgc%Oz4TOt8%DzrcuIM6cz4DOv8%BzrXOr8%EzrUgzr3OsSDPhM%Bzr:PgM6:z4DOv865zq7Pg861z4TOtSDPhM6:zr0gz4TPgc%Mz4DOvyDOvM61IM%Ezr:OvSDOv8%Azr:Or86:IM%Dz4XOs866z4HOr869zrXPhM6xzrkgzrzOtSDPhM63zr0gzrHPgM6szr3PhM63z4POtyDPhM%Jzr0gzrzOsc64zrfPhM%Ozr0gz4POsc%CIM66zrHOuSDPgM6:zrnOsSDPg8%Ezr:Ouc%HzrXOr86xIM6yzrHOuM68zr:Ou86:zrPOv8%Nzr3PhM6xzrkgz4fPgc63z4POuc68zr:PgM6:zrnPjs69z4TOsc%CIM%Ezr8gzrzOtc69zr:PjSDPgc%FzrjOvM6vz4POtc%Jzr0uIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9jb3JyZWN0X2Fuc3dlcl9kZXNjcmlwdGlvbl90ZXh0IjogIs6VzrnPg86xzrPOrM6zzrXPhM61IM%Ezrcgz4PPic%Dz4TOriDOsc%AzqzOvc%EzrfPg863IM6zzrnOsSDOsc%Fz4TOrs69IM%EzrfOvSDOtc%Bz47PhM63z4POty4gzpzPgM6:z4HOtc6vz4TOtSDOvc6xIM%Ez4HOv8%Azr:PgM6:zrnOrs%DzrXPhM61IM%EzrEgzrrPgc65z4TOrs%BzrnOsSDPgM6:z4Ugz4fPgc63z4POuc68zr:PgM6:zrnOv8%Nzr3PhM6xzrkgzrPOuc6xIM69zrEgz4TOvyDPg8%FzrPOus%Bzq:Ovc61z4TOtSDOvM61IM%EzrfOvSDOsc%AzqzOvc%EzrfPg863IM%Ez4nOvSDOvM6xzrjOt8%Ez47OvSDPg86xz4Igz4fPgc63z4POuc68zr:PgM6:zrnPjs69z4TOsc%CIM%Ezr8gzrzOtc69zr:PjSDOtc%AzrnOu86:zrPPjs69IM61z4DOuc66z43Pgc%Jz4POt8%CLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfaW5pdGlhbF9jb250ZW50X2Rlc2NyaXB0aW9uX21hdGgiOiAizpHPhc%Ezq4gzrXOr869zrHOuSDOtyDOsc%Bz4fOuc66zq4gzrrOsc%EzqzPg8%EzrHPg863IM%Ezr:PhSDOvM6xzrjOt868zrHPhM65zrrOv8%NIM%Az4HOv86zz4HOrM68zrzOsc%Ezr:PgiDOtc%AzrXOvs61z4HOs86xz4POr86xz4Igz4DOv8%FIM64zrEgzrTOv8%Fzr0gzr:OuSDOvM6xzrjOt8%Ezq3PgiDPg86xz4Igz4zPhM6xzr0gzrXPgM65z4fOtc65z4HOv8%Nzr0gz4TOt869IM61z4HPjs%EzrfPg863LiDOnM61IM6xz4XPhM%Mzr0gz4TOv869IM%Ez4HPjM%Azr8gzrzPgM6:z4HOtc6vz4TOtSDOvc6xIM%AzrHPgc6tz4fOtc%EzrUgzrzOuc6xIM60zr:OvM6uIM6zzrnOsSDPhM63zr0gzrHPgM6szr3PhM63z4POriDPhM6:z4XPgiDOriDPhM6xIM66zrXOvc6sIM6zzrnOsSDPg8%FzrzPgM67zq7Pgc%Jz4POty4iLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2luaXRpYWxfY29udGVudF9kZXNjcmlwdGlvbl9ncmFwaGljIjogIs6Rz4XPhM6uIM61zq:Ovc6xzrkgzrcgzrHPgc%HzrnOus6uIM66zrHPhM6sz4PPhM6xz4POtyDPhM6:z4UgzrXPgM61zr7Otc%BzrPOsc%Dz4TOriDOs8%BzrHPhs6uzrzOsc%Ezr:PgiDPgM6:z4UgzrjOsSDOss67zq3PgM6:z4XOvSDOv865IM68zrHOuM63z4TOrc%CIM%DzrHPgiDPjM%EzrHOvSDOtc%AzrnPh861zrnPgc6:z43OvSDPhM63zr0gzrXPgc%Oz4TOt8%DzrcuIM6cz4DOv8%BzrXOr8%EzrUgzr3OsSDPgM%Bzr:Pg86xz4HOvM%Mz4POtc%EzrUgz4TOsSDPg8%Ezr:Ouc%HzrXOr86xIM%EzrfPgiDOs8%BzrHOvM68zq7PgiDOtc%BzrPOsc67zrXOr8%Jzr0gz4DOv8%FIM64zrEgzrLOu86tz4DOv8%Fzr0gz4PPhM65z4IgzrXPgM65zrvOv86zzq3PgiDOtc65z4POsc6zz4nOs86uz4IuIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9pbml0aWFsX2NvbnRlbnRfZGVzY3JpcHRpb25fdGV4dCI6ICLOkc%Fz4TOriDOtc6vzr3Osc65IM63IM6xz4HPh865zrrOriDOus6xz4TOrM%Dz4TOsc%Dzrcgz4TOv8%FIM%Az4HOv86zz4HOrM68zrzOsc%Ezr:PgiDOtc%AzrXOvs61z4HOs86xz4POr86xz4IgzrrOtc65zrzOrc69zr:PhSDPgM6:z4UgzrjOsSDOss67zq3PgM6:z4XOvSDOv865IM68zrHOuM63z4TOrc%CIM%DzrHPgiDPjM%EzrHOvSDOtc%AzrnPh861zrnPgc6:z43OvSDPhM63zr0gzrXPgc%Oz4TOt8%DzrcuIM6Rz4XPhM%Mz4Igzr8gz4TPjc%Azr:PgiDOsc%AzqzOvc%EzrfPg863z4IgzrTOtc69IM6xzr7Ouc6:zrvOv86zzrXOr8%EzrHOuSDOvM6xzrjOt868zrHPhM65zrrOrC4iLAoJCQkJCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcHJvZHVjdF9tZXNzYWdlX2hlYWRlcl9sYWJlbCI6ICLOp8%BzrfPg865zrzOv8%Azr:Ouc61zq:PhM61IM%Ezr8gV2lyaXNRdWl6emVzIDQuNiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcHJvZHVjdF9tZXNzYWdlX3RleHRfbGFiZWwiOiAizqTPjs%BzrEgzrzPgM6:z4HOtc6vz4TOtSDOvc6xIM6xz4DOv867zrHPjc%DzrXPhM61IM%Ezrcgzr3Orc6xIM68zrHPgiDOu861zrnPhM6:z4XPgc6zzq:OsSDPhM%Fz4fOsc6vz4nOvSDOvM61z4TOsc6yzrvOt8%Ez47OvSwgz4DOv8%FIM%DzrHPgiDOtc%AzrnPhM%Bzq3PgM61zrkgzr3OsSDOtM63zrzOuc6:z4XPgc6zzrXOr8%EzrUgzrTPhc69zrHOvM65zrrOrc%CIM61z4HPic%Ezq7Pg861zrnPgiDOvM61IM%AzrnOvyDOs8%Bzq7Os86:z4HOvyDOus6xzrkgzrHPgM67z4wgz4TPgc%Mz4DOvy4iLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3Byb2R1Y3RfbWVzc2FnZV9yZWxlYXNlX25vdGVzX2xpbmsiOiAizqHOr86%z4TOtSDOvM65zrEgzrzOsc%EzrnOrCDPg8%EzrnPgiDPg863zrzOtc65z47Pg861zrnPgiDOrc66zrTOv8%DzrfPgiDOvM6xz4IuIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9wcm9kdWN0X21lc3NhZ2VfZ2l2ZV91c19mZWVkYmFja19saW5rIjogIs6gzrXOr8%EzrUgzrzOsc%CIM%EzrcgzrPOvc%OzrzOtyDPg86xz4IuIiwJCQoKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX2luaXRpYWxfY29udGVudF9sYWJlbCI6ICLOkc%Bz4fOuc66z4wgz4DOtc%BzrnOtc%Hz4zOvM61zr3OvyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9sb2NrX2luaXRpYWxfY29udGVudF9sYWJlbCI6ICLOms67zrXOr860z4nOvM6xIM6xz4HPh865zrrOv8%NIM%AzrXPgc65zrXPh86:zrzOrc69zr:PhSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9sb2NrX2luaXRpYWxfY29udGVudF9oZWxwZXJfdGV4dCI6ICLOnM63zr0gzrXPgM65z4TPgc6tz4jOtc%EzrUgz4PPhM6:zr0gzrzOsc64zrfPhM6uIM69zrEgz4TPgc6:z4DOv8%Azr:Ouc6uz4POtc65IM%EzrfOvSDOsc%AzqzOvc%EzrfPg863IM61zrrPhM%Mz4Igz4TPic69IM66zrXOvc%Ozr0gzrjOrc%DzrXPic69IM66z4HOrM%EzrfPg863z4IgzrjOrc%DzrfPgiDPgM6:z4Ugzq3Ph86:z4XOvSDOsc%Azr:OvM61zq:Ovc61zrkgz4PPhM6:IM6xz4HPh865zrrPjCDPgM61z4HOuc61z4fPjM68zrXOvc6:LiDOlc6szr0gzrHPhc%Ezq4gzrcgz4HPjc64zrzOuc%DzrcgzrXOr869zrHOuSDOtc69zrXPgc6zzr:PgM6:zrnOt868zq3Ovc63LCDOvyDOvM6xzrjOt8%Ezq7PgiDOuM6xIM68z4DOv8%BzrXOryDOvc6xIM%Dz4XOvM%AzrvOt8%Bz47Pg861zrkgzrzPjM69zr8gz4TOsSDPgM67zrHOr8%DzrnOsSDPhM6:z4UgzrHPgc%HzrnOus6:z40gz4DOtc%BzrnOtc%Hzr:OvM6tzr3Ov8%FLiIsCgoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfZGlzcGxheV9zZXR0aW5nc19sYWJlbCI6ICLOoc%FzrjOvM6vz4POtc65z4IgzrXOvM%GzqzOvc65z4POt8%CIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX2Rpc3BsYXlfc2V0dGluZ3NfbGFiZWxfbmFtZSI6ICLOn8%BzrHPhM%Mz4TOt8%EzrEgzr:Ovc6:zrzOrM%Ez4nOvSDOtc%EzrnOus61z4TPjs69IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX2Rpc3BsYXlfc2V0dGluZ3NfbGFiZWxfdmFsdWUiOiAizp:Pgc6xz4TPjM%EzrfPhM6xIM%EzrnOvM%Ozr0gzrXPhM65zrrOtc%Ez47OvSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9kaXNwbGF5X3NldHRpbmdzX2hlbHBlcl90ZXh0IjogIs6Vz4DOuc67zq3Ovs%EzrUgz4TOtyDPgc%NzrjOvM65z4POtyDOtc68z4bOrM69zrnPg863z4Igz4TPic69IM6:zr3Ov868zqzPhM%Jzr0gzrrOsc65IM%Ez4nOvSDPhM65zrzPjs69IM%Ez4nOvSDOtc%EzrnOus61z4TPjs69LiDOnM%Azr:Pgc61zq:PhM61IM69zrEgzrHPgM6:z4bOsc%Dzq:Pg861z4TOtSDOsc69IM6:zrkgz4TOuc68zq3PgiDPhM%Jzr0gzrXPhM65zrrOtc%Ez47OvSDOuM6xIM61zq:Ovc6xzrkgzr:Pgc6xz4TOrc%CIM%Dz4TOv869IM68zrHOuM63z4TOriDPgM6szr3PhM6xLCDPgM6:z4TOrSDOriDPjM%EzrHOvSDPh8%BzrfPg865zrzOv8%Azr:Ouc61zq8gz4TOt869IM61z4PPhM6vzrHPg863LiIsCgkJImFsd2F5cyI6ICLOoM6szr3PhM6xIiwKCQkiZm9jdXMiOiAizqPOtSDOtc%Dz4TOr86xz4POtyIsCgkJIm5ldmVyIjogIs6gzr:PhM6tIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9tYWduZXRpY19ncmlkX2xhYmVsIjogIs6hz4XOuM68zq:Pg861zrnPgiDOvM6xzrPOvc63z4TOuc66zr:PjSDPgM67zq3Os868zrHPhM6:z4IiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfbWFnbmV0aWNfZ3JpZF9sYWJlbF90ZXh0IjogIs6Vz4DOuc67zq3Ovs%EzrUgz4TOtyDPgc%NzrjOvM65z4POtyDOvM6xzrPOvc63z4TOuc66zr:PjSDPgM67zq3Os868zrHPhM6:z4IgzrPOuc6xIM%Ezr8gz4DOtc60zq:OvyDOsc%AzqzOvc%EzrfPg863z4IgzrzOsc64zrfPhM6uLiIsCgkJImZvcmNlIjogIs6Uz43Ovc6xzrzOtyIsCgkJInNuYXAiOiAizqPPhc6zzrrPgc6sz4TOt8%DzrciLAoJCSJkaXNhYmxlZCI6ICLOkc69zrXOvc61z4HOs8%MIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlc190aXRsZSI6ICLOpM%Fz4fOsc6vzrXPgiDOnM61z4TOsc6yzrvOt8%Ezq3PgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlc190aXRsZV9iYXNpY19tb2RlIjogIs6SzrHPg865zrrOriDOm861zrnPhM6:z4XPgc6zzq:OsSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYWR2YW5jZWRfcmFuZG9tX3ZhcmlhYmxlc19idXR0b25fdGV4dCI6ICLOo8%Nzr3OuM61z4TOtyDOm861zrnPhM6:z4XPgc6zzq:OsSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYWR2YW5jZWRfcmFuZG9tX3ZhcmlhYmxlc19idXR0b25fdGV4dF9zdHJpbmdfc3ludGF4IjogIs6kz4XPh86xzq:Otc%CIM6czrXPhM6xzrLOu863z4TOrc%CIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVzX2Rlc2NyaXB0aW9uX3RleHQiOiAizqbPgc6:zr3PhM6vz4PPhM61IM6:zrkgzrXPgc%Jz4TOrs%DzrXOuc%CIM%DzrHPgiDOvc6xIM61zq:Ovc6xzrkgzrTPhc69zrHOvM65zrrOrc%CIM%Az4HOv8%DzrjOrc%Ezr:Ovc%EzrHPgiDPhM%Fz4fOsc6vzrXPgiDOvM61z4TOsc6yzrvOt8%Ezq3PgiDPg8%EzrcgzrTOrs67z4nPg863IM%EzrfPgiDOtc%Bz47PhM63z4POrs%CIM%DzrHPgi4gzpzOt869IM6%zrXPh86sz4POtc%EzrUgzr3OsSDPgM%Bzr:Pg864zq3Pg861z4TOtSDOsc%Fz4TOrc%CIM%EzrnPgiDOvM61z4TOsc6yzrvOt8%Ezq3PgiDPg8%Ezrcgz4PPic%Dz4TOriDOsc%AzqzOvc%EzrfPg863IM66zrHOuSwgzrXPhs%Mz4POv869IM64zq3Ou861z4TOtSDOvc6xIM61zrzPhs6xzr3Or862zr:Ovc%EzrHOuSDOsc6%zrnOv867zr:Os863zrzOrc69zrXPgiwgz4DPgc6:z4POuM6tz4PPhM61IM%EzrfOvSDOtc69z4TOv867zq4gzrHOvs65zr:Ou8%MzrPOt8%DzrfPgi4iLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZXNfc2ltcGxlX2FsZ29yaXRobV90ZXh0IjogIs6mz4HOv869z4TOr8%Dz4TOtSDOv865IM61z4HPic%Ezq7Pg861zrnPgiDPg86xz4Igzr3OsSDOtc6vzr3Osc65IM60z4XOvc6xzrzOuc66zq3PgiDPgM%Bzr:Pg864zq3PhM6:zr3PhM6xz4Igz4TPhc%HzrHOr861z4IgzrzOtc%EzrHOss67zrfPhM6tz4Igz4PPhM63IM60zq7Ou8%Jz4POtyDPhM63z4IgzrXPgc%Oz4TOt8%Dzq7PgiDPg86xz4IuIM6czrfOvSDOvs61z4fOrM%DzrXPhM61IM69zrEgz4DPgc6:z4POuM6tz4POtc%EzrUgzrHPhc%Ezq3PgiDPhM65z4IgzrzOtc%EzrHOss67zrfPhM6tz4Igz4PPhM63IM%Dz4nPg8%Ezq4gzrHPgM6szr3PhM63z4POtyDOus6xzrksIM61z4bPjM%Dzr:OvSDOuM6tzrvOtc%EzrUgzr3OsSDOtc68z4bOsc69zq:Ots6:zr3PhM6xzrkgzrHOvs65zr:Ou86:zrPOt868zq3Ovc61z4IsIM%Az4HOv8%DzrjOrc%Dz4TOtSDPhM63zr0gzrXOvc%Ezr:Ou86uIM6xzr7Ouc6:zrvPjM6zzrfPg863z4IuIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVzX3N0cmluZ19zeW50YXhfdGV4dCI6ICLOp8%BzrfPg865zrzOv8%Azr:Ouc6uz4PPhM61IM%Ezr8gQ2FsY01lIM6zzrnOsSDPg8%Nzr3PhM6xzr7OtyDOsc67zrPOv8%Bzq:OuM68z4nOvSDOus6xzrkgz4DOsc%BzrHOs8%JzrPOriDPhM%Fz4fOsc6vz4nOvSDOvM61z4TOsc6yzrvOt8%Ez47OvSEiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZXNfYWRkX25ld19idXR0b25fdGV4dCI6ICIrIM6gz4HOv8%DzrjOrs66zrcgzrzOtc%EzrHOss67zrfPhM6uz4IiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZXNfY29tcGxleF9hbGdvcml0aG1fdGV4dCI6ICLOiM%HzrXPhM61IM%AzrXPgc6vz4DOu86:zrrOvyDOsc67zrPPjM%BzrnOuM68zr8sIM%Hz4HOt8%DzrnOvM6:z4DOv865zq7Pg8%EzrUgz4TOtyDPg8%Nzr3OuM61z4TOtyDOu861zrnPhM6:z4XPgc6zzq:OsSEiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZXNfaGVscF9idXR0b24iOiAizqTOtc66zrzOt8%Bzq:Pic%Dzrcgz4TPhc%HzrHOr8%Jzr0gzrzOtc%EzrHOss67zrfPhM%Ozr0iLAoKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVfcm93X3ZhcmlhYmxlX25hbWVfdGV4dCI6ICLOjM69zr:OvM6xIM68zrXPhM6xzrLOu863z4TOrs%CIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVfcm93X3ByZWZpeF90ZXh0IjogIiMiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZV90eXBlX3RleHQiOiAizrXOr869zrHOuSDOsc66zq3Pgc6xzrnOv8%CIM68zrXPhM6xzr7PjSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlX21pbl92YWx1ZV90ZXh0IjogIs61zrvOrM%HLiDPhM65zrzOriIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlX3Jvd19hbmRfdGV4dCI6ICLOus6xzrkiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZV9tYXhfdmFsdWVfdGV4dCI6ICLOvM6tzrMuIM%EzrnOvM6uIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlX25hbWVfYWxyZWFkeV91c2VkX2Vycm9yIjogIs6kzr8gz4zOvc6:zrzOsSDOvM61z4TOsc6yzrvOt8%Ezq7PgiDPh8%BzrfPg865zrzOv8%Azr:Ouc61zq:PhM6xzrkgzq7OtM63ISIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlX251bWJlcl9ub3RfaW50ZWdlcl9lcnJvciI6ICLOjM%HzrkgzrHOus6tz4HOsc65zr:PgiEiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZV9pbnZhbGlkX25hbWVfZXJyb3IiOiAizozPh865IM6tzrPOus%Fz4HOvyDPjM69zr:OvM6xIM68zrXPhM6xzrLOu863z4TOrs%CISIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlX21heF92YWx1ZV9lcnJvciI6ICLOlyDOvM6tzrMuIM%EzrnOvM6uIM%Az4HOrc%AzrXOuSDOvc6xIM61zq:Ovc6xzrkgzrzOtc6zzrHOu8%Nz4TOtc%BzrchIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVfbmFtZV9taXNzaW5nX2Vycm9yIjogIs6bzrXOr8%AzrXOuSDPhM6:IM%Mzr3Ov868zrEgzrzOtc%EzrHOss67zrfPhM6uz4IiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZV9tYXhfdmFsdWVfbWlzc2luZ19lcnJvciI6ICLOm861zq:PgM61zrkgzrcgzrzOrc6zLiDPhM65zrzOriIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlX21pbl92YWx1ZV9taXNzaW5nX2Vycm9yIjogIs6bzrXOr8%AzrXOuSDOtyDOtc67zqzPhy4gz4TOuc68zq4iLAoJCQoJCSJldmFsdWF0ZV9rZXl3b3JkIjogIs6xzr7Ouc6:zrvPjM6zzrfPg863IiwKCQkKCQkiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfd2VsY29tZV9oZWFkZXJfdGV4dCI6ICLOoM6xz4HOv8%Fz4POr86xz4POtyDPhM6:z4UgV2lyaXNRdWl6emVzIDQuOC4wOiDOpM%Oz4HOsSDOvM61IM6nzrXOuc%Bz4zOs8%BzrHPhs61z4IgzpHPgM6:zrrPgc6vz4POtc65z4IgzpPPgc6xz4bOt868zqzPhM%Jzr0iLAogICAgICAgICJob21lX2dldHRpbmdfc3RhcnRlZF93ZWxjb21lX2Rlc2NyaXB0aW9uX3RleHQiOiAizpXOr868zrHPg8%EzrUgz4PPhM63zr0gzrXPhc%HzqzPgc65z4PPhM63IM64zq3Pg863IM69zrEgz4POsc%CIM%AzrHPgc6:z4XPg865zqzPg86:z4XOvM61IM6tzr3Osc69IM69zq3OvyDPhM%Nz4DOvyDOsc%AzqzOvc%EzrfPg863z4Igz4DOv8%FIM61z4DOuc%Ez4HOrc%AzrXOuSDPg8%Ezr:Phc%CIM68zrHOuM63z4TOrc%CIM%DzrHPgiDOvc6xIM6xz4DOv866z4HOr869zr:Ovc%EzrHOuSDPh861zrnPgc%MzrPPgc6xz4bOsSDPg8%EzrEgzrPPgc6xz4bOrs68zrHPhM6xLiDOk865zrEgz4DOtc%BzrnPg8%Dz4zPhM61z4HOtc%CIM%AzrvOt8%Bzr:Phs6:z4HOr861z4Igz4PPh861z4TOuc66zqwgzrzOtSDOsc%Fz4TOriDPhM63IM60z4XOvc6xz4TPjM%EzrfPhM6xLCDOsc69zrHPhM%Bzq3Ovs%EzrUgz4PPhM65z4Igz4POt868zrXOuc%Oz4POtc65z4Igzq3Ous60zr:Pg863z4IgzrrOsc65IM%EzrfOvSDPhM61zrrOvM63z4HOr8%Jz4POriDOvM6xz4IuIM6VzrvPgM6vzrbOv8%FzrzOtSDPjM%Ezrkgz4TPjM%Dzr8gzrXPg861zq:PgiDPjM%Dzr8gzrrOsc65IM6:zrkgzrzOsc64zrfPhM6tz4Igz4POsc%CIM64zrEgzrHPgM6:zrvOsc%Nz4POtc%EzrUgzrHPhc%Ezq4gz4TOtyDOvc6tzrEgz4DPgc6:z4POuM6uzrrOtyDPg8%Ezr8gV2lyaXNRdWl6emVzISIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19zdGFydGVkX3JlbGVhc2Vfbm90ZXNfYnV0dG9uX3RleHQiOiAizqPOt868zrXOuc%Oz4POtc65z4Igzq3Ous60zr:Pg863z4IiLAogICAgICAgICJob21lX2dldHRpbmdfZ2l2ZV91c19mZWVkYmFja19idXR0b25fdGV4dCI6ICLOoM6xz4HOv8%Hzq4gz4PPh86:zrvOr8%Jzr0iLAogICAgICAgICJob21lX2dldHRpbmdfc3RhcnRlZF9jcmVhdGVfcXVlc3Rpb25faGVhZGVyX3RleHQiOiAizqDPjs%CIM69zrEgzrTOt868zrnOv8%Fz4HOs86uz4POtc%EzrUgz4TOt869IM%Az4HPjs%Ezrcgz4POsc%CIM61z4HPjs%EzrfPg863IiwKICAgICAgICAiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfY3JlYXRlX3F1ZXN0aW9uX3RleHQiOiAizpzOrM64zrXPhM61IM%MzrvOsSDPhM6xIM6yzq7OvM6xz4TOsSDOs865zrEgzr3OsSDOtM63zrzOuc6:z4XPgc6zzrXOr8%EzrUgzrXPgc%Jz4TOrs%DzrXOuc%CIM%Dz4TOvyBXaXJpc1F1aXp6ZXMgzrrOsc65IM%Az47PgiDOvc6xIM%Hz4HOt8%DzrnOvM6:z4DOv865zrXOr8%EzrUgz4TOuc%CIM60z4XOvc6xz4TPjM%EzrfPhM61z4IgzrXPgM65zrrPjc%Bz4nPg863z4Igz4DOv8%FIM60zrnOsc64zq3PhM61zrkuIiwKICAgICAgICAiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfY3JlYXRlX3JhbmRvbV9xdWVzdGlvbl9oZWFkZXJfdGV4dCI6ICLOoM%Oz4Igzr3OsSDOtM63zrzOuc6:z4XPgc6zzrXOr8%EzrUgz4TPhc%HzrHOr861z4IgzrXPgc%Jz4TOrs%DzrXOuc%CIiwKICAgICAgICAiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfY3JlYXRlX3JhbmRvbV9xdWVzdGlvbl90ZXh0IjogIs6czqzOuM61z4TOtSDPgM%Oz4Igzr3OsSDOtM63zrzOuc6:z4XPgc6zzrXOr8%EzrUgzrXPjc66zr:Ou86xIM%Ez4XPh86xzq:Otc%CIM61z4HPic%Ezq7Pg861zrnPgiDOvM61IM%Ezr8gV2lyaXNRdWl6emVzIM68zrUgz4TOtyDOss6xz4POuc66zq4gzrrOsc65IM%Ezrcgz4PPjc69zrjOtc%EzrcgzrvOtc65z4TOv8%Fz4HOs86vzrEgzrzOsc%CLiIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19zdGFydGVkX3RyYWluaW5nX3BhbmVsX2hlYWRlcl90ZXh0IjogIs6czqzOuM61z4TOtSDPhM6xIM%AzqzOvc%EzrEgzrPOuc6xIM%Ezr8gV2lyaXNRdWl6emVzIM68zrUgz4TOtyDOtM%Jz4HOtc6szr0gzrXOus%AzrHOr860zrXPhc%Dzq4gzrzOsc%CIiwKICAgICAgICAiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfdHJhaW5pbmdfcGFuZWxfdGV4dCI6ICLOoM%Bzr:Pg8%Gzq3Pgc6:z4XOvM61IM60z4nPgc61zqzOvSDOtc66z4DOsc6vzrTOtc%Fz4POtyDOtc6%zrHPhM6:zrzOuc66zrXPhc68zq3Ovc6:z4Ugz4HPhc64zrzOv8%NIM6uIM61zrrPgM6xzq:OtM61z4XPg863IM61z4DOryDPgM67zrfPgc%JzrzOriDOvM61IM61zrrPgM6xzrnOtM61z4XPhM6uIM%Mz4DOv8%FIM68z4DOv8%BzrXOr8%EzrUgzr3OsSDOvM6szrjOtc%EzrUgz4TOsSDPgM6szr3PhM6xIM6zzrnOsSDPhM65z4IgzrTPhc69zrHPhM%Mz4TOt8%EzrXPgiDOus6xzrkgz4TOuc%CIM%Dz43Ovc64zrXPhM61z4Igz4HPhc64zrzOr8%DzrXOuc%CIM%Ezr:PhSBXaXJpc1F1aXp6ZXMuIiwKICAgICAgICAiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfbGVhcm5fbW9yZV9idXR0b25fdGV4dCI6ICLOnM6szrjOtc%EzrUgz4DOtc%BzrnPg8%Dz4zPhM61z4HOsSIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19zdGFydGVkX2Jhc2ljX21vZGVfYnV0dG9uX3RleHQiOiAizpLOsc%DzrnOus6uIM67zrXOuc%Ezr:Phc%BzrPOr86xIiwKICAgICAgICAiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfYWR2YW5jZWRfbW9kZV9idXR0b25fdGV4dCI6ICLOo8%Nzr3OuM61z4TOtyDOu861zrnPhM6:z4XPgc6zzq:OsSIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19zdGFydGVkX2Vucm9sbF9tZV9idXR0b25fdGV4dCI6ICLOmM6tzrvPiSDOvc6xIM61zrPOs8%BzrHPhs%OIiwKICAgICAgICAiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfY29udGFjdF91c19idXR0b25fdGV4dCI6ICLOlc%AzrnOus6:zrnOvc%Jzr3Or86xIiwKICAgICAgICAiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfdmlzaXRfb3VyX3dlYnBhZ2VfYnV0dG9uX3RleHQiOiAizpXPgM65z4POus61z4bOuM61zq:PhM61IM%Ezr:OvSDOuc%Dz4TPjM%Ezr:PgM%MIM68zrHPgiIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19zdGFydGVkX3JlcG9ydF9hbl9pc3N1ZV9idXR0b25fdGV4dCI6ICLOkc69zrHPhs6:z4HOrCDPgM%Bzr:Oss67zq7OvM6xz4TOv8%CIiwKCQkiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfbGlzdF9idXR0b25fdGV4dCI6ICLOk8%Bzq7Os86:z4HOsSDOsc%Azr:PhM61zrvOrc%DzrzOsc%EzrEiLAoKCQkicXVpenplc19zdHVkaW9faG9tZV9hbnN3ZXJfdHlwZV9za2V0Y2hfbGFiZWwiOiAizqPOus6vz4TPg86:IiwKCQkicXVpenplc19zdHVkaW9faG9tZV9pbml0aWFsX2NvbnRlbnRfZGVzY3JpcHRpb25fc2tldGNoIjogIs6Rz4XPhM6uIM61zq:Ovc6xzrkgzrcgzrHPgc%HzrnOus6uIM66zrHPhM6sz4PPhM6xz4POtyDPgM61z4HOuc61z4fOv868zq3Ovc6:z4Ugz4TOv8%FIM61z4DOtc6%zrXPgc6zzrHPg8%Ezq4gzrPPgc6xz4bOt868zqzPhM%Jzr0gz4DOv8%FIM64zrEgzrTOv8%Fzr0gzr:OuSDOvM6xzrjOt8%Ezq3PgiDPg86xz4Igz4zPhM6xzr0gzrXPgM65z4fOtc65z4HOrs%Dzr:Phc69IM69zrEgzrHPgM6xzr3PhM6uz4POv8%Fzr0gz4PPhM63zr0gzrXPgc%Oz4TOt8%DzrcuIM6bzqzOss61z4TOtSDPhc%Az4zPiM63IM%Mz4TOuSDOtyDOs8%BzrHOvM68zq4gzrXPgc6zzrHOu861zq:Pic69IM%Ez4nOvSDOvM6xzrjOt8%Ez47OvSDOuM6xIM60zrnOsc64zq3PhM61zrkgzrzPjM69zr8gzrrOv8%FzrzPgM65zqwgz4fOtc65z4HOv86zz4HOrM%Gzr:PhSDOus6xzrkgzrTOuc6xzrPPgc6xz4bOrs%CLiDOp8%BzrfPg865zrzOv8%Azr:Ouc6uz4PPhM61IM%EzrcgzrTPhc69zrHPhM%Mz4TOt8%EzrEgwqvOlM6:zrrOuc68zq4gzrHPhc%Ezq7PgiDPhM63z4IgzrXPgc%Oz4TOt8%DzrfPgsK7IM6zzrnOsSDOvc6xIM60zrXOr8%EzrUgz4DPjs%CIM64zrEgz4bOsc6vzr3Otc%EzrHOuS4iLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2NvcnJlY3RfYW5zd2VyX2Rlc2NyaXB0aW9uX3NrZXRjaF9wYXJhZ3JhcGhfMSI6ICLOlc65z4POsc6zzqzOs861z4TOtSDPhM63IM%Dz4nPg8%Ezq4gzrHPgM6szr3PhM63z4POtyDOs865zrEgz4TOt869IM61z4HPjs%EzrfPg863IM6xz4XPhM6uLiDOn865IM68zrHOuM63z4TOrc%CIM%DzrHPgiDOuM6xIM%Hz4HOt8%DzrnOvM6:z4DOv865zq7Pg86:z4XOvSDPhM6:IM61z4HOs86xzrvOtc6vzr8gz4fOtc65z4HOv86zz4HOrM%Gzr:PhSDOs865zrEgzr3OsSDPg8%HzrXOtM65zqzPg86:z4XOvSDPhM63IM67z43Pg863IM%Ezr:Phc%CLCDOv8%Az4zPhM61IM6tz4fOv8%FzrzOtSDOv8%Bzq:Pg861zrkgzrXOu86sz4fOuc%Dz4TOtyDOsc69zr:Ph86uIM6zzrnOsSDOtc67zrHPhs%Bz47PgiDOsc69zrHOus%BzrnOss61zq:PgiDOsc%AzrHOvc%Ezq7Pg861zrnPgi4gzpzPgM6:z4HOtc6vz4TOtSDOvc6xIM%Ezr8gz4HPhc64zrzOr8%DzrXPhM61IM6xz4XPhM%MIM66zqzOvc6:zr3PhM6xz4IgzrrOu865zrogz4PPhM65z4IgwqvOlc%AzrnOu86:zrPOrc%CIM61z4DOsc67zq7OuM61z4XPg863z4LCuy4iLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2NvcnJlY3RfYW5zd2VyX2Rlc2NyaXB0aW9uX3NrZXRjaF9wYXJhZ3JhcGhfMiI6ICLOp8%BzrfPg865zrzOv8%Azr:Ouc6uz4PPhM61IM%Ezr8gzrrOv8%FzrzPgM6vIMKrzpTOv866zrnOvM6uIM6xz4XPhM6uz4Igz4TOt8%CIM61z4HPjs%EzrfPg863z4LCuyDOs865zrEgzr3OsSDOtM61zq:PhM61IM%EzrfOvSDPgM%Bzr:Oss6:zrvOriDPhM6:z4UgzrzOsc64zrfPhM6uLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2VxdWl2YWxlbnRfc2tldGNoX2xhYmVsIiA6ICLOo866zq:PhM%Dzr8gzq:Pg86:IiwKCQkicXVpenplc19kZW1vX3NrZXRjaF90aXRsZV9tZW51IiA6ICLOo866zq:PhM%Dzr8iLAoJCSJob21lX2dldHRpbmdfc3RhcnRlZF9kb2N1bWVudGF0aW9uX2J1dHRvbl90ZXh0IiA6ICLOpM61zrrOvM63z4HOr8%Jz4POtyIsIAoKCQkiY2xvc2VfbWF0aHR5cGVfcG9wdXAiIDogIs6azrvOtc6vz4POuc68zr8gz4TOv8%FIE1hdGhUeXBlIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2tlZXBfYXJndW1lbnRzX2V2YWx1YXRlZF9sYWJlbCI6ICJFdmFsdWF0ZWQiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9rZWVwX2FyZ3VtZW50c191bmV2YWx1YXRlZF9sYWJlbCI6ICLOlM61zr0gzrHOvs65zr:Ou86:zrPOv8%Nzr3PhM6xzrkgzr:OuSDOsc69zrXOvs6sz4HPhM63z4TOtc%CIM68zrXPhM6xzrLOu863z4TOrc%CIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fa2VlcF9hcmd1bWVudHNfc3RyaW5nX2xhYmVsIjogIlN0cmluZyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2FyZ3VtZW50c19oZWxwZXJfdGV4dCI6ICJEZWZpbmUgaG93IHRoZSBzdHVkZW50IGFuc3dlciB3aWxsIGJlIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgZ3JhZGluZyBmdW5jdGlvbi4gVGhpcyBpcyBhIHZlcnkgYWR2YW5jZWQgZmVhdHVyZS4iLAoKCQkicXVpenplc19zdHVkaW9faW1wb3J0X2RlcHJlY2F0ZWRfbWVzc2FnZV90aXRsZSIgOiAiRGVwcmVjYXRlZCBmZWF0dXJlcyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2ltcG9ydF9kZXByZWNhdGVkX21lc3NhZ2VfdGV4dCIgOiAiVGhlIHF1ZXN0aW9uIHlvdSBhcmUgYWJvdXQgdG8gb3BlbiBjb250YWlucyBkZXByZWNhdGVkIGZlYXR1cmVzLiBUaGUgaW1wb3J0IHByb2Nlc3MgbWF5IGNoYW5nZSBzbGlnaHRseSB0aGUgYmVoYXZpb3Igb2YgdGhlIHF1ZXN0aW9uLiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY2FyZWZ1bGx5IHRlc3QgZGUgcXVlc3Rpb24gYWZ0ZXIgaW1wb3J0LiBcbiAgICBUaGUgZGVwcmVjYXRlZCBmZWF0dXJlcyBhcmUgdGhlIGZvbGxvd2luZyBvbmVzOiIsCgoJCSJxdWl6emVzX3N0dWRpb19lcXVpdmFsZW50X3NldF9hc3NlcnRpb24iOiAiRXF1aXZhbGVudCBzZXQgYXNzZXJ0aW9uIGlzIG5vIGxvbmdlciBhdmFpbGFibGUiLAoJCSJxdWl6emVzX3N0dWRpb19zeW50YXhfbGlzdF9hc3NlcnRpb24iOiAiU3ludGF4IGxpc3QgYXNzZXJ0aW9uIGlzIG5vIGxvbmdlciBhdmFpbGFibGUiLAoJCSJxdWl6emVzX3N0dWRpb190ZXh0X2xvZ2ljX29wZXJhdG9ycyIgOiAiVGV4dCBsb2dpYyBvcGVyYXRvcnMgYXJlIG5vIGxvbmdlciBhdmFpbGFibGUiLAoJCSJxdWl6emVzX3N0dWRpb19lcXVpdmFsZW50X3VuaXRfbGl0ZXJhbCIgOiAiRXF1aXZhbGVudCB1bml0IGxpdGVyYWwgYXNzZXJ0aW9uIGlzIG5vIGxvbmdlciBhdmFpbGFibGUiCgoJfQp9CgoK"},{ name : "strings_graph.da.json", data : "s11574: "},{ name : "strings_quizzes.pt.json", data : "s77642: % :Dp2FyIGEgc3VhIHNvbHXDp8OjbywgcGVsbyBxdWUgZXN0YWJlbGVjZW1vcyB1bWEgdG9sZXLDom5jaWEgbcOtbmltYSBwYXJhIHJlc3Bvc3RhcyBsaWdlaXJhbWVudGUgaW1wcmVjaXNhcy4gUG9kZSBhanVzdGFyIGVzdGEgZGVmaW5pw6fDo28gY2xpY2FuZG8gZW0g4oCcb3DDp8O1ZXMgZGUgdmFsaWRhw6fDo2:igJ0uIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9jb3JyZWN0X2Fuc3dlcl9kZXNjcmlwdGlvbl9za2V0Y2hfcGFyYWdyYXBoXzIiOiAiVXRpbGl6ZSBvIGJvdMOjbyDigJx0ZXN0YXIgZXN0YSBwZXJndW50YeKAnSBwYXJhIHZlciBhIG9waW5pw6NvIGRvIGFsdW5vLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2VxdWl2YWxlbnRfc2tldGNoX2xhYmVsIiA6ICJFc2Jvw6dhciBpZ3VhbCIsCgkJInF1aXp6ZXNfZGVtb19za2V0Y2hfdGl0bGVfbWVudSIgOiAiRXNib8OnbyIsCgkJImhvbWVfZ2V0dGluZ19zdGFydGVkX2RvY3VtZW50YXRpb25fYnV0dG9uX3RleHQiIDogIkRvY3VtZW50YcOnw6NvIiwgCgoJCSJjbG9zZV9tYXRodHlwZV9wb3B1cCIgOiAiRmVjaGFyIE1hdGhUeXBlIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2tlZXBfYXJndW1lbnRzX2V2YWx1YXRlZF9sYWJlbCI6ICJFdmFsdWF0ZWQiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9rZWVwX2FyZ3VtZW50c191bmV2YWx1YXRlZF9sYWJlbCI6ICJNYW50ZXIgYXJndW1lbnRvcyBuw6NvIGF2YWxpYWRvcyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2tlZXBfYXJndW1lbnRzX3N0cmluZ19sYWJlbCI6ICJTdHJpbmciLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9hcmd1bWVudHNfaGVscGVyX3RleHQiOiAiRGVmaW5lIGhvdyB0aGUgc3R1ZGVudCBhbnN3ZXIgd2lsbCBiZSBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIGdyYWRpbmcgZnVuY3Rpb24uIFRoaXMgaXMgYSB2ZXJ5IGFkdmFuY2VkIGZlYXR1cmUuIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2ltcG9ydF9kZXByZWNhdGVkX21lc3NhZ2VfdGl0bGUiIDogIkRlcHJlY2F0ZWQgZmVhdHVyZXMiLAoJCSJxdWl6emVzX3N0dWRpb19pbXBvcnRfZGVwcmVjYXRlZF9tZXNzYWdlX3RleHQiIDogIlRoZSBxdWVzdGlvbiB5b3UgYXJlIGFib3V0IHRvIG9wZW4gY29udGFpbnMgZGVwcmVjYXRlZCBmZWF0dXJlcy4gVGhlIGltcG9ydCBwcm9jZXNzIG1heSBjaGFuZ2Ugc2xpZ2h0bHkgdGhlIGJlaGF2aW9yIG9mIHRoZSBxdWVzdGlvbi4gSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNhcmVmdWxseSB0ZXN0IGRlIHF1ZXN0aW9uIGFmdGVyIGltcG9ydC4gXG4gICAgVGhlIGRlcHJlY2F0ZWQgZmVhdHVyZXMgYXJlIHRoZSBmb2xsb3dpbmcgb25lczoiLAoKCQkicXVpenplc19zdHVkaW9fZXF1aXZhbGVudF9zZXRfYXNzZXJ0aW9uIjogIkVxdWl2YWxlbnQgc2V0IGFzc2VydGlvbiBpcyBubyBsb25nZXIgYXZhaWxhYmxlIiwKCQkicXVpenplc19zdHVkaW9fc3ludGF4X2xpc3RfYXNzZXJ0aW9uIjogIlN5bnRheCBsaXN0IGFzc2VydGlvbiBpcyBubyBsb25nZXIgYXZhaWxhYmxlIiwKCQkicXVpenplc19zdHVkaW9fdGV4dF9sb2dpY19vcGVyYXRvcnMiIDogIlRleHQgbG9naWMgb3BlcmF0b3JzIGFyZSBubyBsb25nZXIgYXZhaWxhYmxlIiwKCQkicXVpenplc19zdHVkaW9fZXF1aXZhbGVudF91bml0X2xpdGVyYWwiIDogIkVxdWl2YWxlbnQgdW5pdCBsaXRlcmFsIGFzc2VydGlvbiBpcyBubyBsb25nZXIgYXZhaWxhYmxlIgoKCX0KfQoKCg"},{ name : "strings_graph.es.json", data : "s12026: "},{ name : "strings_graph.ca.json", data : "s11852: "},{ name : "strings_quizzes.nn.json", data : "s73999:ewoJIm1ldGEiOiB7CgkJImxhbmciOiAibm4iCgl9LAoJIndvcmRzIjogewoJCSJzeW50YXhfbWF0aCI6ICJtYXRlbWF0aWtrIiwKCQkic3ludGF4X3N0cmluZyI6ICJ0ZWtzdCIsCgoJCSJlcXVpdmFsZW50X2xpdGVyYWwiOiAibsO4eWFrdGlnIGxpayIsCgkJImVxdWl2YWxlbnRfc3ltYm9saWMiOiAibWF0ZW1hdGlzayBsaWt0IiwKCQkiZXF1aXZhbGVudF9lcXVhdGlvbnMiOiAiZWt2aXZhbGVudGUgbGlrbmluZ2FyIiwKCQkiZXF1aXZhbGVudF9hbGwiOiAiVmlsa8OlcmxlZyBzdmFyIiwKCQkiZXF1aXZhbGVudF9mdW5jdGlvbiI6ICJncmFkZXJpbmdzZnVua3Nqb24iLAoKCQkiY2hlY2tfaW50ZWdlcl9mb3JtIjogImhhciBoZWlsdGFsc2Zvcm0iLAoJCSJjaGVja19mcmFjdGlvbl9mb3JtIjogImhhciBicsO4a2Zvcm0iLAoJCSJjaGVja19wb2x5bm9taWFsX2Zvcm0iOiAiaGFyIHBvbHlub21pc2sgZm9ybSIsCgkJImNoZWNrX3JhdGlvbmFsX2Z1bmN0aW9uX2Zvcm0iOiAiZXIgZWluIHJhc2pvbmVsbCBmdW5rc2pvbiIsCgkJImNoZWNrX2VsZW1lbnRhbF9mdW5jdGlvbl9mb3JtIjogImVyIGVpbiBrb21iaW5hc2pvbiBhdiBlbGVtZW50w6ZyZSBmdW5rc2pvbmFyIiwKCQkiY2hlY2tfc2NpZW50aWZpY19ub3RhdGlvbiI6ICJlciB1dHRyeWt0IG1lZCB2aXRza2FwbGVnIG5vdGFzam9uIiwKCQkiY2hlY2tfc2ltcGxpZmllZCI6ICJlciBmb3JlbmtsYSIsCgkJImNoZWNrX2V4cGFuZGVkIjogImVyIHV0dmlkYSIsCgkJImNoZWNrX2ZhY3Rvcml6ZWQiOiAiZXIgZmFrdG9yaXNlcnQiLAoJCSJjaGVja19yYXRpb25hbGl6ZWQiOiAiZXIgcmFzam9uYWx0IiwKCQkiY2hlY2tfbm9fY29tbW9uX2ZhY3RvciI6ICJoYXIgaW5nZW4gZmVsbGVzIGZha3RvcmFyIiwKCQkiY2hlY2tfbWluaW1hbF9yYWRpY2FuZHMiOiAiaGFyIG1pbmltdW1zcmFkaWthbnRhciIsCgkJImNoZWNrX2RpdmlzaWJsZSI6ICJlciBkZWxlbGVnIHDDpSIsCgkJImNoZWNrX2NvbW1vbl9kZW5vbWluYXRvciI6ICJoYXIgZWluIGVua2VsIGZlbGxlc25lbW5hciIsCgkJImNoZWNrX3VuaXQiOiAiaGFyIGVpbmluZyBla3ZpdmFsZW50IG1lZCIsCgkJImNoZWNrX3VuaXRfbGl0ZXJhbCI6ICJoYXIgZWkgZWluaW5nIHNvbSBlciBuw7h5YWt0aWcgbGlrIiwKCQkiY2hlY2tfcHJlY2lzaW9uIjogImhhciIsCgkJImNoZWNrX3N5bWJvbGljIjogImVyIHN5bWJvbHNrIiwKCQkiY2hlY2tfZXF1aXZhbGVudF91bml0cyI6ICJoYXIgZWt2aXZhbGVudGUgZWluaW5nYXIiLAoKCQkibGlzdCI6ICJsaXN0ZSIsCgkJIm9yZGVybWF0dGVycyI6ICJyZWtrZWbDuGxnZSBoYXIgYmV0eWRpbmciLAoJCSJvcmRlcmRvZXNudG1hdHRlciI6ICJyZWtrZWbDuGxnZSBlciBsaWtlZ3lsZGlnIiwKCQkicXVlc3Rpb254bWwiOiAic3DDuHJzbcOlbHMtWE1MIiwKCQkiZ3JhbW1hcnVybCI6ICJncmFtbWF0aWtrLVVSTCIsCgkJInJlc2VydmVkd29yZHMiOiAicmVzZXJ2ZXJ0ZSBvcmQiLAoJCSJmb3JjZWJyYWNrZXRzIjogIkxpc3RlciBtw6UgYWxsdGlkIGhhIGtyw7hsbHBhcmVudGVzIMKre33Cuy4iLAoJCSJjb21tYWFzaXRlbXNlcGFyYXRvciI6ICJCcnVrIGtvbW1hIMKrLMK7IHNvbSBza2lsamV0ZWlrbiBpIGxpc3RhLiIsCgkJImNvbmZpcm1pbXBvcnRkZXByZWNhdGVkIjogIkltcG9ydGVyZSBzcMO4cnNtw6VsZXQ: % : "},{ name : "strings_graph.fr.json", data : "s12294: :DuSB2b3VzIHZvdWxleiBzdXIgbGUgZ3JhcGhpcXVlLiIsCgkJImhlbHBlcl90ZXh0X3N0YXJ0X3R3b19wb2ludHNfY2xpY2tfb3JfZHJhZyI6ICJDbGlxdWV6IHN1ciB1biBwb2ludC4iLAoJCSJoZWxwZXJfdGV4dF9zdGFydF9uZXdfYW5nbGUiOiAiQ2xpcXVleiBzdXIgbGEgZHJvaXRlIHBvdXIgbGFxdWVsbGUgdm91cyB2b3VsZXogY2FsY3VsZXIgbOKAmWFuZ2xlIHBhciByYXBwb3J0IMOgIGNlbHVpIGTigJlvcmlnaW5lLiIsCgkJImhlbHBlcl90ZXh0X3N0YXJ0X25ld19hcmVhIjogIlPDqWxlY3Rpb25uZXogbGEgc3VyZmFjZSBzb3VoYWl0w6llLiIsCgkJImhlbHBlcl90ZXh0X3N0YXJ0X25ld19sZW5ndGgiIDogIlPDqWxlY3Rpb25uZXogZGV1eCBwb2ludHMgcG91ciBxdWUgbGEgbG9uZ3VldXIgbGVzIHPDqXBhcmFudCBzb2l0IGNhbGN1bMOpZS4iLAoJCSJoZWxwZXJfdGV4dF9zdGFydF9uZXdfcG9seWxpbmUiOiAiQ2xpcXVleiBzdXIgbGUgcG9pbnQgc3VpdmFudCwgb3UgY2xpcXVleiBkZXV4IGZvaXMgc3VyIGxlIHBvaW50IGFjdHVlbCBwb3VyIHRlcm1pbmVyIGxhIHBvbHlsaWduZS4iLAoJCSJoZWxwZXJfdGV4dF9zdGFydF9uZXdfcG9seWdvbiI6ICJDbGlxdWV6IHN1ciBsZSBwb2ludCBzdWl2YW50IG91IHN1ciBsZSBwb2ludCBpbml0aWFsIHBvdXIgdGVybWluZXIgbGUgcG9seWdvbmUuIiwKCQkiaGVscGVyX3RleHRfc3RhcnRfbmV3X2ludGVycG9sYXRpbmdfcG9seW5vbWlhbCI6ICJDbGlxdWV6IHN1ciBsZSBwb2ludCBzdWl2YW50LCBvdSBjbGlxdWV6IGRldXggZm9pcyBzdXIgbGUgcG9pbnQgYWN0dWVsIHBvdXIgdGVybWluZXIgbGUgcG9seW7DtG1lIGTigJlpbnRlcnBvbGF0aW9uLiIsCgkJImhlbHBlcl90ZXh0X3N0YXJ0X25ld19wYXJhbGxlbF9vcl9wZXJwZW5kaWN1bGFyIjogIlZvdXMgcG91dmV6IHPDqWxlY3Rpb25uZXIgbGVzIMOpbMOpbWVudHMgc3VpdmFudHPCoDoiLAoJCSJoZWxwZXJfdGV4dF9zdGFydF9kcmF3X3N0cm9rZXMiOiAiRGVzc2luZXogY2UgcXVlIHZvdXMgdm91bGV6LiIsCgkJImxpbmUiOiAidW5lIGRyb2l0ZSIsCgkJInZlY3RvciI6ICJ2ZWN0ZXVyIiwKCQkicmF5IjogInVuIHJheW9uIiwKCQkic2VnbWVudCI6ICJ1biBzZWdtZW50IiwKCQkiZmluYWxfaGVscGVyX3RleHQiOiAiVGVybWluw6khIiwKCQkiaGVscF91cmwiOiAiQUlERSIsCgkJImNsb3NlX2hlbHBlcl90ZXh0IjogIkZlcm1lciBs4oCZaW5mb2J1bGxlIiwKCgkJIm5ld1BvaW50IjogIlBvaW50IiwKCQkibmV3TGluZVRocm91Z2hUd29Qb2ludHMiOiAiTGlnbmUiLAoJCSJuZXdMaW5lU2VnbWVudEJ5UG9pbnRzIjoiU2VnbWVudCIsCgkJIm5ld1JheUZyb21Qb2ludFRocm91Z2hQb2ludCI6ICJSYXlvbiIsCgkJIm5ld1BvbHlsaW5lIjogIlBvbHlsaWduZSIsCgkJIm5ld1BvbHlnb24iOiAiUG9seWdvbmUiLAoJCSJuZXdWZWN0b3JCeVBvaW50cyI6ICJWZWN0ZXVyIiwKCQkibmV3UGFyYWxsZWxvZ3JhbSI6ICIgUGFyYWxsw6lsb2dyYW1tZSIsCgkJIm5ld0xpbmVQYXJhbGxlbFRvTGluZVRocm91Z2hQb2ludCI6ICJEcm9pdGUgcGFyYWxsw6hsZSIsCgkJIm5ld0xpbmVQZXJwZW5kaWN1bGFyVG9MaW5lVGhyb3VnaFBvaW50IjogIkRyb2l0ZSBwZXJwZW5kaWN1bGFpcmUiLAoKCQkibmV3Q2lyY2xlQnlDZW50ZXJBbmRQb2ludCI6ICJDZXJjbGUgcGFyIGNlbnRyZSBldCBwb2ludCIsCgkJIm5ld0NpcmNsZUJ5VGhyZWVQb2ludHMiOiAiQ2VyY2xlIHBhciB0cm9pcyBwb2ludHMiLAoJCSJuZXdBcmNCeVRocmVlUG9pbnRzIjogIkFyYyIsCgkJIm5ld1BhcmFib2xhQnlGb2N1c0FuZERpcmVjdHJpeCI6ICJQYXJhYm9sZSIsCgkJIm5ld0VsbGlwc2VCeUZvY2lBbmRQb2ludCI6ICJFbGxpcHNlIiwKCQkibmV3SHlwZXJib2xhQnlGb2NpQW5kUG9pbnQiOiAiSHlwZXJib2xlIiwKCQkibmV3Q29uaWNCeUZpdmVQb2ludHMiOiAiQ29uaXF1ZSIsCgkJIm5ld0ludGVycG9sYXRpbmdQb2x5bm9taWFsQnlQb2ludHMiOiAiUG9seW7DtG1lIGludGVycG9sYXRldXIiLAoJCSJuZXdBcmVhIjogIlpvbmUiLAoJCSJuZXdBbmdsZSI6ICJBbmdsZSIsCgkJIm5ld0xlbmd0aCI6ICJMb25naXR1ZCIsCgkJIm5ld0ZyZWVMYWJlbCI6ICLDiXRpcXVldHRlIiwKCQkibmV3RWxlbWVudEJ5TGFiZWwiOiAiRXhwcmVzc2lvbiIsCgkJImRyYXdTdHJva2VzIjogIsOJY3JpdHVyZSBtYW51c2NyaXRlIiwKCgkJImVxdWF0aW9uIjogIsOJcXVhdGlvbiIsCgkJIm1pZHBvaW50T2ZMaW5lU2VnbWVudCI6ICJQb2ludCBtw6lkaWFuIGTigJl1biBzZWdtZW50IiwKCQkibWVkaWF0cml4T2ZMaW5lU2VnbWVudCI6ICJNw6lkaWF0cmljZSBk4oCZdW4gc2VnbWVudCIKCX0KfQ"},{ name : "strings_graph.no.json", data : "s11544: "},{ name : "strings_graph.el.json", data : "s15979:ewoJIm1ldGEiOiB7CgkJImxhbmciOiAiZWwiCgl9LAoJIndvcmRzIjogewoJCSJ0dF90b29sYmFyIjogIs6Tz4HOsc68zrzOriDOtc%BzrPOsc67zrXOr8%Jzr0iLAoJCSJ0dF9wb2ludGVycyI6ICLOlM61zq:Ous%EzrXPgiIsCgkJInR0X3NlbGVjdCI6ICLOlc%AzrnOu86:zrPOriIsCgkJInR0X2hhbmR3cml0aW5nIjogIs6nzrXOuc%Bzr:Os8%BzrHPhs6uIiwKCQkidHRfZWxlbWVudHMiOiAie3R0X2VsZW1lbnRzfSIsCgkJInR0X3BvaW50IjogIs6jz4TOuc6zzrzOriIsCgkJInR0X2xpbmVzIjogIs6Tz4HOsc68zrzOrc%CIiwKCQkidHRfbGluZSI6ICLOk8%BzrHOvM68zq4iLAoJCSJ0dF9zZWdtZW50IjogIs6kzrzOrs68zrEiLAoJCSJ0dF9yYXkiOiAizpHOus%Ezq:Ovc6xIiwKCQkidHRfcG9seWxpbmUiOiAizqTOtc64zrvOsc%DzrzOrc69zrciLAoJCSJ0dF9wb2x5Z29uIjogIs6gzr:Ou8%NzrPPic69zr8iLAoJCSJ0dF92ZWN0b3IiOiAizpTOuc6szr3Phc%DzrzOsSIsCgkJInR0X3BhcmFsbGVsb2dyYW0iOiAizqDOsc%BzrHOu867zrfOu8%MzrPPgc6xzrzOvM6:IiwKCQkidHRfbWlkcG9pbnRPZlNlZ21lbnQiOiAizpzOtc%DzrHOr86:IM%DzrfOvM61zq:OvyDOtc69z4zPgiDPhM68zq7OvM6xz4TOv8%CIiwKCQkidHRfbWVkaWF0cml4T2ZTZWdtZW50IjogIs6jz4XOvM68zrXPhM%BzrnOus6uIM6zz4HOsc68zrzOriDOtc69z4zPgiDPhM68zq7OvM6xz4TOv8%CIiwKCQkidHRfcGFyYWxsZWxMaW5lIjogIs6gzrHPgc6szrvOu863zrvOtyDOs8%BzrHOvM68zq4iLAoJCSJ0dF9wZXJwZW5kaWN1bGFyTGluZSI6ICLOms6szrjOtc%EzrcgzrPPgc6xzrzOvM6uIiwKCQkidHRfY3VydmVzIjogIs6azrHOvM%Az43Ou861z4IiLAoJCSJ0dF9jb25pY1NlY3Rpb25zIjogIs6az4nOvc65zrrOrc%CIM61zr3PjM%EzrfPhM61z4IiLAoJCSJ0dF9jaXJjbGVDZW50ZXJBbmRQb2ludCI6ICLOms%NzrrOu86:z4IgzrrOsc%EzqwgzrrOrc69z4TPgc6:IM66zrHOuSDPg8%EzrnOs868zq4iLAoJCSJ0dF9jaXJjbGVUaHJlZVBvaW50cyI6ICLOms%NzrrOu86:z4IgzrrOsc%Ezqwgz4TPgc61zrnPgiDPg8%EzrnOs868zq3PgiIsCgkJInR0X2FyYyI6ICLOpM%Mzr7OvyIsCgkJInR0X3BhcmFib2xhIjogIs6gzrHPgc6xzrLOv867zq4iLAoJCSJ0dF9lbGxpcHNlIjogIs6IzrvOu861zrnPiM63IiwKCQkidHRfaHlwZXJib2xhIjogIs6lz4DOtc%BzrLOv867zq4iLAoJCSJ0dF9jb25pYyI6ICLOms%Jzr3Ouc66z4wiLAoJCSJ0dF9pbnRlcnBvbGF0aW5nUG9seW5vbWlhbCI6ICLOoM6:zrvPhc%Ozr3Phc68zr8gz4DOsc%BzrXOvM6yzr:Ou86uz4IiLAoJCSJ0dF9tZWFzdXJlcyI6ICLOnM6tz4TPgc6xIiwKCQkidHRfYXJlYSI6ICLOlc68zrLOsc60z4zOvSIsCgkJInR0X2FuZ2xlIjogIs6Tz4nOvc6vzrEiLAoJCSJ0dF9sZW5ndGgiOiAizpzOrs66zr:PgiIsCgkJInR0X2xhYmVscyI6ICLOlc%EzrnOus6tz4TOsSIsCgkJInR0X2VsZW1lbnRNTUwiOiAizqDOsc%BzqzPg8%EzrHPg863IiwKCQkidHRfaW1hZ2UiOiAizpXOuc66z4zOvc6xIiwKCgkJInR0X2JvbGQiOiAizq3Ovc%Ezr:Ovc63IM6zz4HOsc%Gzq4iLAoJCSJ0dF9pdGFsaWMiOiAiz4DOu86szrPOuc6xIM6zz4HOsc%Gzq4iLAoJCSJ0dF9jb2xvciI6ICLPh8%Bz47OvM6xIiwKCgkJInR0X2JhckNoYXJ0IjogIs6Vz4DOuc67zr:Os86uIiwKCQkidHRfbmV3UGFja0JhcnMiOiAizpXOuc%DzrHOs8%JzrPOriDPgM67zq7OuM6:z4XPgiDPgc6szrLOtM%Jzr0iLAoJCSJ0dF9uZXdTaWRlQmFycyI6ICLOlc65z4POsc6zz4nOs86uIM6:zrzOrM60zrHPgiDPgc6szrLOtM%Jzr0iLAoJCSJ0dF9kZWxldGVQYWNrQmFycyI6ICLOlM65zrHOs8%BzrHPhs6uIM%AzrvOrs64zr:Phc%CIM%BzqzOss60z4nOvSIsCgkJInR0X2RlbGV0ZVNpZGVCYXJzIjogIs6UzrnOsc6zz4HOsc%Gzq4gzr:OvM6szrTOsc%CIM%BzqzOss60z4nOvSIsCgkJInR0X3N0YWNrQmFycyI6ICLOo8%Ezr:Or86yzrHOs868zrEgz4HOrM6yzrTPic69IiwKCQkidHRfdW5zdGFja0JhcnMiOiAizpHOvc6xzq:Pgc61z4POtyDPg8%Ezr:Ouc6yzqzOs868zrHPhM6:z4Igz4HOrM6yzrTPic69IiwgCgoJCSJ0dF9waWVDaGFydCI6ICLOlc%AzrnOu86:zrPOriIsCgkJInR0X25ld1BpZSI6ICLOnc6tzr8gzrrOv868zrzOrM%EzrkiLAoJCSJ0dF9kZWxldGVQaWUiOiAizpTOuc6xzrPPgc6xz4bOriDOus6:zrzOvM6xz4TOuc6:z40iLAoJCSJ0dF9uZXdQaWVDbG9ja3dpc2UiOiAizpTOtc6%zrnPjM%Dz4TPgc6:z4bOsSIsCgkJInR0X25ld1BpZUNvdW50ZXJjbG9ja3dpc2UiOiAizpHPgc65z4PPhM61z4HPjM%Dz4TPgc6:z4bOsSIsCgkJInR0X3BpZTJEIjogIjLOlCIsCgkJInR0X3BpZTNEIjogIjPOlCIsCgkJCgkJInR0X2xpbmVDaGFydCI6ICLOlc%AzrnOu86:zrPOriIsCgkJInR0X25ld0xpbmVMaW5lQ2hhcnQiOiAizpXOuc%DzrHOs8%JzrPOriDOs8%BzrHOvM68zq7PgiIsCgkJInR0X25ld1BvaW50c0xpbmVDaGFydCI6ICLOlc65z4POsc6zz4nOs86uIM6:zrzOrM60zrHPgiDPg863zrzOtc6vz4nOvSIsCgkJInR0X2RlbGV0ZUxpbmVMaW5lQ2hhcnQiOiAizpTOuc6xzrPPgc6xz4bOriDOs8%BzrHOvM68zq7PgiIsCgkJInR0X2RlbGV0ZVBvaW50c0xpbmVDaGFydCI6ICLOlM65zrHOs8%BzrHPhs6uIM6:zrzOrM60zrHPgiDPg863zrzOtc6vz4nOvSIsCgkJInR0X2FkZFBvaW50c0xlZnQiOiAizqPOt868zrXOr86xIM6xz4HOuc%Dz4TOtc%BzqwiLAoJCSJ0dF9hZGRQb2ludHNSaWdodCI6ICLOo863zrzOtc6vzrEgzrTOtc6%zrnOrCIsCgoJCSJ0dF9maXRQbG90dGVyVG9TdGF0cyI6ICLOpM6xzq:Pgc65zrHPg868zrEiLAoJCSJ0dF9ob3Jpem9udGFsIjogIs6fz4HOuc62z4zOvc%EzrnOsSIsCgkJInR0X3ZlcnRpY2FsIjogIs6azrHPhM6xzrrPjM%Bz4XPhs6xIiwKCQkidHRfcG9pbnREaWFtZXRlciI6ICLOlM65zqzOvM61z4TPgc6:z4Igz4POt868zrXOr86:z4UiLAoKCQkidHRfZnJhY3Rpb24iOiAizrzOtc6zzqzOu86:IM66zrvOrM%DzrzOsSIsCgkJInR0X3N1cGVyc2NyaXB0IjogIs61zrrOuM6tz4TOt8%CIiwKCQkidHRfc3F1YXJlUm9vdCI6ICLPhM61z4TPgc6xzrPPic69zrnOus6uIM%Bzq:Ots6xIiwKCQkidHRfblJvb3QiOiAiz4HOr862zrEiLAoJCSJ0dF9udW1iZXJzIjogIs6xz4HOuc64zrzPjM%CIiwKCQkidHRfbnVtYmVyRSI6ICLOsc%BzrnOuM68z4zPgiBlIiwKCQkidHRfbnVtYmVyUGkiOiAizrHPgc65zrjOvM%Mz4Igz4AiLAoJCSJ0dF9mdW5jdGlvbnMiOiAiz4PPhc69zrHPgc%Ezq7Pg861zrnPgiIsCgkJInR0X3NpbnVzIjogIs63zrzOr8%Ezr:Ovc6:IiwKCQkidHRfY29zaW51cyI6ICLPg8%Fzr3Ot868zq:PhM6:zr3OvyIsCgkJInR0X3RhbmdlbnQiOiAizrXPhs6xz4DPhM6:zrzOrc69zrciLAoJCSJ0dF9hcmNzaW51cyI6ICLPhM%Mzr7OvyDOt868zq:PhM6:zr3Ov8%FIiwKCQkidHRfYXJjY29zaW51cyI6ICLPhM%Mzr7OvyDPg8%Fzr3Ot868zq:PhM6:zr3Ov8%FIiwKCQkidHRfYXJjdGFuZ2VudCI6ICLPhM%Mzr7OvyDOtc%GzrHPgM%Ezr:OvM6tzr3Ot8%CIiwKCQkidHRfbG9nIjogIs67zr:Os86sz4HOuc64zrzOv8%CIiwKCQkidHRfbmF0dXJhbExvZyI6ICLPhs%Fz4POuc66z4zPgiDOu86:zrPOrM%BzrnOuM68zr:PgiIsCgkJInR0X2V4cG9uZW50aWFsRSI6ICLOtc66zrjOtc%EzrnOus%MIGUiLAoKCQkidHRfZWRpdGlvbiI6ICLOiM66zrTOv8%DzrciLAoJCSJ0dF91bmRvIjogIs6Rzr3Osc6vz4HOtc%DzrciLAoJCSJ0dF9yZWRvIjogIs6Vz4DOsc69zqzOu863z4jOtyIsCgkJInR0X21lbnUiOiAizpzOtc69zr:PjSIsCgkJInR0X2FjdGlvbnMiOiAiQWN0aW9ucyIsCgkJInR0X2RlbGV0ZUFsbCI6ICLOlM65zrHOs8%BzrHPhs6uIM%MzrvPic69IiwKCQkidHRfY2xvc2VEaXNwbGF5IjogIs6azrvOtc6vz4POuc68zr8gz4PPh861zrTOuc6xz4PPhM6uIiwKCQkidHRfZG93bmxvYWQiOiAizpvOrs%IzrciLAoJCSJ0dF9zZXR0aW5nc1NlY3Rpb24iOiAizqHPhc64zrzOr8%DzrXOuc%CIiwKCQkidHRfc2V0dGluZ3MiOiAizqHPhc64zrzOr8%DzrXOuc%CIiwKCQkidHRfc2hvd0hpZGRlbkVsZW1lbnRzIjogIs6VzrzPhs6szr3Ouc%DzrcgzrrPgc%FzrzOvM6tzr3Pic69IM%Dz4TOv865z4fOtc6vz4nOvSIsCgkJInR0X2hpZGVFbGVtZW50IjogIs6Rz4DPjM66z4HPhc%Izrcgz4PPhM6:zrnPh861zq:Ov8%FIiwKCQkidHRfcmVzdG9yZUluaXRpYWxDb250ZW50IjogIs6Vz4DOsc69zrHPhs6:z4HOrCIsCgoJCSJ0dF92aWV3IjogIs6RzrnPic%Bzr:Pjc68zrXOvc6:IiwKCQkidHRfbWF4aW1pemUiOiAizpzOtc6zzq3OuM%Fzr3Pg863IiwKCQkidHRfbWluaW1pemUiOiAizpXOu86xz4fOuc%Dz4TOv8%Azr:Or863z4POtyIsCgkJInR0X3pvb21JbiI6ICLOnM61zrPOrc64z4XOvc%DzrciLAoJCSJ0dF96b29tT3V0IjogIs6jzrzOr866z4HPhc69z4POtyIsCgoJCSJ0dF9hbmltYXRlIjogIs6gz4HOv8%DzrjOrs66zrcgzrrOr869zrfPg863z4IiLAoJCQoJCSJ0dF9jb250ZXh0dWFsIjogIs6YzrXOvM6xz4TOuc66z4wgz4DOu86xzq:Pg865zr8iLAoJCSJ0dF9jb250ZXh0dWFsRWxlbWVudCI6ICLOmM61zrzOsc%EzrnOus%MIM%AzrvOsc6vz4POuc6:ICjPg8%Ezr:Ouc%HzrXOr86xKSIsCgkJInR0X2NvbnRleHR1YWxMYWJlbCI6ICLOmM61zrzOsc%EzrnOus%MIM%AzrvOsc6vz4POuc6:ICjOtc%EzrnOus6tz4TOtc%CKSIsCgkJInR0X2RlbGV0ZSI6ICLOlM65zrHOs8%BzrHPhs6uIiwKCQkidHRfZml4TGFiZWwiOiAizpXPgM65zrTOuc%Mz4HOuM%Jz4POtyDOtc%EzrnOus6tz4TOsc%CIiwKCgkJInR0X2xpbmVXaWR0aCI6ICLOoM67zqzPhM6:z4IgzrPPgc6xzrzOvM%Ozr0iLAoJCSJ0dF9saW5lU3R5bGUiOiAizqPPhM65zrsgzrPPgc6xzrzOvM%Ozr0iLAoJCSJ0dF9saW5lQ29sb3IiOiAizqfPgc%OzrzOsSIsCgoJCSJ0dF9saW5lU29saWQiOiAizpHOvM65zrPOrc%CIiwKCQkidHRfbGluZURhc2giOiAizqDOsc%NzrvOtc%CIiwKCQkidHRfbGluZURvdHRlZCI6ICLOms6:z4XOus66zq:OtM61z4IiLAoJCSJ0dF9saW5lRG90ZGFzaCI6ICLOms6:z4XOus66zq:OtM61z4IgzrrOsc65IM%AzrHPjc67zrXPgiIsCgkJCgkJImJhY2tncm91bmRDb2xvciI6ICLOp8%Bz47OvM6xIM%Gz4zOvc%Ezr:PhSIsCgkJImF4aXNDb2xvciI6ICLOp8%Bz47OvM6xIM6szr7Ov869zrEiLAoJCSJncmlkQ29sb3IiOiAizqfPgc%OzrzOsSDPgM67zq3Os868zrHPhM6:z4IiLAoJCSJzdWJncmlkQ29sb3IiOiAizqfPgc%OzrzOsSDPhc%Azr:PgM67zq3Os868zrHPhM6:z4IiLAoJCSJtYWduZXRpY0dyaWQiOiAizpzOsc6zzr3Ot8%EzrnOus%MIM%AzrvOrc6zzrzOsSIsCgkJImZvcmNlIjogIs6Uz43Ovc6xzrzOtyIsCgkJInNuYXAiOiAizqPPhc6zzrrPgc6sz4TOt8%DzrciLAoJCSJkaXNhYmxlZCI6Is6Rzr3Otc69zrXPgc6zz4wiLAoJCQoJCSJob3Jpem9udGFsIjogIs6fz4HOuc62z4zOvc%EzrnOsSIsCgkJInZlcnRpY2FsIjogIs6azrHPhM6xzrrPjM%Bz4XPhs6xIiwKCQkKCQkic2hvd0F4aXMiOiAizpXOvM%GzqzOvc65z4POtyDOrM6%zr:Ovc6xIiwKCQkiaW50ZXJ2YWxYIjogIs6Gzr7Ov869zrHPgiBYIiwKCQkiaW50ZXJ2YWxZIjogIs6Gzr7Ov869zrHPgiBZIiwKCQkiZGltZW5zaW9ucyI6ICLOlM65zrHPg8%EzqzPg861zrnPgiIsCgkJImNvbG9yIjogIs%Hz4HPjs68zrEiLAoJCSJhc3BlY3RSYXRpb0xvY2siOiAizprOu861zq:OtM%JzrzOsSDOsc69zrHOu86:zrPOr86xz4IgzrTOuc6xz4PPhM6sz4POtc%Jzr0iLAoJCSJhc3BlY3RSYXRpb1VubG9jayI6ICLOns61zrrOu861zq:OtM%JzrzOsSDOsc69zrHOu86:zrPOr86xz4IgzrTOuc6xz4PPhM6sz4POtc%Jzr0iLAoJCSJhc3BlY3RSYXRpb0xhYmVsIjogIlg6WSIsCgkJImxhYmVsIjogIs6Vz4TOuc66zq3PhM6xIiwKCQkidmFsdWVzIjogIs6kzrnOvM6tz4IiLAoJCSJheGlzU3RlcCI6ICLOks6uzrzOsSDOrM6%zr:Ovc6xIiwKCQkic2hvd0dyaWQiOiAizpXOvM%GzqzOvc65z4POtyDPgM67zq3Os868zrHPhM6:z4IiLAoJCSJncmlkU3RlcCI6ICLOks6uzrzOsSDPgM67zq3Os868zrHPhM6:z4IiLAoJCSJzdWJncmlkRGl2aXNpb25zIjogIs6lz4DOv860zrnOsc65z4HOrc%DzrXOuc%CIM%Fz4DOv8%AzrvOrc6zzrzOsc%Ezr:PgiIsCgkJCgkJImxlZnQiOiAizpHPgc65z4PPhM61z4HOrCIsCgkJInJpZ2h0IjogIs6UzrXOvs65zqwiLAoJCSJhYm92ZSI6ICLOoM6szr3PiSIsCgkJImJlbG93IjogIs6azqzPhM%JIiwKCQkibm9uZSI6ICLOms6xzr3Orc69zrEiLAoKCQkiZG93bmxvYWRUaXRsZSI6ICLOm86uz4jOtyDPic%CIM61zrnOus%Mzr3Osc%CIiwKCQkiZG93bmxvYWRUZXh0IjogIs6Vz4DOuc67zq3Ovs%EzrUgzq3Ovc6xIM68zq3Os861zrjOv8%CIM6zzrnOsSDOu86uz4jOtyDPhM6:z4Ugz4PPh861zrTOuc6xz4PPhM6uIM%Jz4Igz4TOtc%Ez4HOrM6zz4nOvc63z4IgzrXOuc66z4zOvc6xz4IgUE5HLiIsCgkJImRvd25sb2FkSGVscGVyVGV4dCI6ICLOpM61z4TPgc6szrPPic69zrcgzrXOuc66z4zOvc6xICgxOjEpIiwKCQkiZG93bmxvYWRFcnJvclRleHQiOiAizqTOvyDOvM6tzrPOtc64zr:PgiDPgM%Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM6xzrrOrc%BzrHOuc6:z4IgzrHPgc65zrjOvM%Mz4IuIiwKCQkiY29uZmlybSI6ICLOtc%AzrnOss61zrLOsc6vz4nPg863IiwKCQkiY2FuY2VsIjogIs6szrrPhc%Bzr8iLAoJCSJzaXplSW5QaXhlbHMiOiAizpzOrc6zzrXOuM6:z4Igz4POtSBwaXhlbCIsCgkJImluc2VydEFOdW1iZXIiOiAizpXOuc%DzrHOs86szrPOtc%EzrUgzq3Ovc6xzr0gzrHPgc65zrjOvM%MIiwKCgkJInVwbG9hZEltYWdlRXJyb3JUaXRsZSI6ICLOqc%HLCDOus6sz4TOuSDPgM6uzrPOtSDPg8%Ez4HOsc6yzqwhIiwKCQkidXBsb2FkSW1hZ2VFcnJvclRleHQiOiAizpLOtc6yzrHOuc%JzrjOtc6vz4TOtSDPjM%Ezrkgz4TOvyDOsc%Bz4fOtc6vzr8gzrHOvc61zrLOrM%DzrzOsc%Ezr:PgiDOtc6vzr3Osc65IM6tzrPOus%Fz4HOtyDOtc65zrrPjM69zrEgUE5HIM66zrHOuSDOvM61z4TOrCDOtM6:zrrOuc68zqzPg8%EzrUgzr7Osc69zqwiLAoKCQkidHlwZV9wb2ludCI6ICLOo863zrzOtc6vzr8iLAoJCSJ0eXBlX2xpbmUiOiAizpPPgc6xzrzOvM6uIiwKCQkidHlwZV9saW5lX3NlZ21lbnQiOiAizqTOvM6uzrzOsSDOs8%BzrHOvM68zq7PgiIsCgkJInR5cGVfdmVjdG9yIjogIs6UzrnOrM69z4XPg868zrEiLAoJCSJ0eXBlX3JheSI6ICLOkc66z4TOr869zrEiLAoJCSJ0eXBlX3BvbHlsaW5lIjogIs6gzr:Ou8%FzrPPgc6xzrzOvM6uIiwKCQkidHlwZV9hcmMiOiAizqTPjM6%zr8iLAoJCSJ0eXBlX2FyY19ieV9wb2ludHMiOiAizqTPjM6%zr8gzrLOrM%DzrXOuSDPg863zrzOtc6vz4nOvSIsCgkJInR5cGVfY2lyY2xlX2FyYyI6ICLOpM%Mzr7OvyDOus%NzrrOu86:z4UiLAoJCSJ0eXBlX2NpcmNsZSI6ICLOms%NzrrOu86:z4IiLAoJCSJ0eXBlX3BhdGgiOiAizpTOuc6xzrTPgc6:zrzOriIsCgkJInR5cGVfcG9seWdvbiI6ICLOoM6:zrvPjc6zz4nOvc6:IiwKCQkidHlwZV9jb21wb3VuZF9lbGVtZW50IjogIs6jz43Ovc64zrXPhM6:IM%Dz4TOv865z4fOtc6vzr8iLAoJCSJ0eXBlX2NvbmljIjogIs6az4nOvc65zrrPjCIsCgkJInR5cGVfZnVuY3Rpb25fZ3JhcGgiOiAizpPPgc6sz4bOt868zrEgz4PPhc69zqzPgc%EzrfPg863z4IiLAoJCSJ0eXBlX3JlZ2lvbiI6ICLOoM61z4HOuc6:z4fOriIsCgkJInR5cGVfcmVnaW9uX2FyYyI6ICLOpM%Mzr7OvyDPgM61z4HOuc6:z4fOrs%CIiwKCQkidHlwZV9yZWdpb25fY2lyY2xlX2FyYyI6ICLOpM%Mzr7OvyDOus%NzrrOu86:z4Ugz4DOtc%BzrnOv8%Hzq7PgiIsCgkJInR5cGVfdW5kZWZpbmVkIjogIs6Rz4DPgc6:z4POtM65z4zPgc65z4PPhM6:IM%Dz4TOv865z4fOtc6vzr8iLAoJCSJ0eXBlX3BhcmFtZXRyaWNfY3VydmUiOiAizqDOsc%BzrHOvM61z4TPgc65zrrOriDOus6xzrzPgM%NzrvOtyIsCgkJInR5cGVfYXJlYSI6ICLOlc68zrLOsc60z4zOvSIsCgkJInR5cGVfcmVjdGFuZ2xlIjogIs6fz4HOuM6:zrPPjs69zrnOvyIsCgkJInR5cGVfcGFyYWxsZWxvZ3JhbSI6ICLOoM6xz4HOsc67zrvOt867z4zOs8%BzrHOvM68zr8iLAoJCSJ0eXBlX2FuZ2xlIjogIs6Tz4nOvc6vzrEiLAoJCSJ0eXBlX3BhcnRfb2ZfZWxlbWVudCI6ICLOpM68zq7OvM6xIM%Dz4TOv865z4fOtc6vzr:PhSIsCgkJInR5cGVfbGVuZ3RoIjogIs6czq7Ous6:z4IiLAoJCSJ0eXBlX2Rpc3RhbmNlIjogIs6Rz4DPjM%Dz4TOsc%DzrciLAoJCSJ0eXBlX2xhYmVsIjogIs6Vz4TOuc66zq3PhM6xIiwKCQkKCQkidHlwZV9iYXJfY2hhcnQiOiAizpPPgc6sz4bOt868zrEgz4HOrM6yzrTPic69IiwKCQkidHlwZV9saW5lX2NoYXJ0IjogIs6Tz4HOrM%GzrfOvM6xIM6zz4HOsc68zrzPjs69IiwKCQkidHlwZV9waWVfY2hhcnQiOiAizpPPgc6sz4bOt868zrEgz4DOr8%EzrHPgiIsCgkJInR5cGVfYm94X3Bsb3QiOiAizpjOt866z4zOs8%BzrHOvM68zrEiLAoJCSJ0eXBlX2hpc3RvZ3JhbSI6ICLOmc%Dz4TPjM6zz4HOsc68zrzOsSIsCgoJCSJoZWxwZXJfdGV4dF9zdGFydF9tb3ZlX3BvaW50IjogIs6azqzOvc%EzrUgzrrOu865zrogz4POtSDOrc69zrEgz4POt868zrXOr86:LiIsCgkJImhlbHBlcl90ZXh0X3N0YXJ0X3NlbGVjdCI6ICLOms6szr3PhM61IM66zrvOuc66IM%DzrUgzq3Ovc6xIM%DzrfOvM61zq:Ovy4iLAoJCSJoZWxwZXJfdGV4dF9zdGFydF9tb3ZlX2xhYmVsIjogIs6azqzOvc%EzrUgzrrOu865zrogzr:PgM6:z4XOtM6uz4DOv8%EzrUgz4PPhM6:IM6zz4HOrM%GzrfOvM6xLiIsCgkJImhlbHBlcl90ZXh0X3N0YXJ0X3R3b19wb2ludHNfY2xpY2tfb3JfZHJhZyI6ICLOms6szr3PhM61IM66zrvOuc66IM%DzrUgzq3Ovc6xIM%DzrfOvM61zq:Ovy4iLAoJCSJoZWxwZXJfdGV4dF9zdGFydF9uZXdfYW5nbGUiOiAizprOrM69z4TOtSDOus67zrnOuiDPg8%EzrcgzrPPgc6xzrzOvM6uIM6zzrnOsSDPhM63zr0gzr:PgM6:zq:OsSDOuM6tzrvOtc%EzrUgzr3OsSDPhc%Azr:Ou86:zrPOr8%DzrXPhM61IM%EzrcgzrPPic69zq:OsSDPg861IM%Dz4fOrc%DzrcgzrzOtSDPhM63zr0gzrHPgc%HzrnOus6uLiIsCgkJImhlbHBlcl90ZXh0X3N0YXJ0X25ld19hcmVhIjogIs6Vz4DOuc67zq3Ovs%EzrUgz4TOt869IM61z4DOuc64z4XOvM63z4TOriDPgM61z4HOuc6:z4fOri4iLAoJCSJoZWxwZXJfdGV4dF9zdGFydF9uZXdfbGVuZ3RoIiA6ICLOlc%AzrnOu86tzr7PhM61IM60z43OvyDPg863zrzOtc6vzrEgzrrOsc65IM64zrEgz4XPgM6:zrvOv86zzrnPg8%EzrXOryDPhM6:IM68zq7Ous6:z4IgzrzOtc%EzrHOvs%NIM%Ezr:Phc%CLiIsCgkJImhlbHBlcl90ZXh0X3N0YXJ0X25ld19wb2x5bGluZSI6ICLOms6szr3PhM61IM66zrvOuc66IM%Dz4TOvyDOtc%Az4zOvM61zr3OvyDPg863zrzOtc6vzr8gzq4gzrTPjc6:IM%Gzr:Pgc6tz4Igz4PPhM6:IM%Ez4HOrc%Hzr:OvSDPg863zrzOtc6vzr8gzrPOuc6xIM69zrEgzr:Ou86:zrrOu863z4HPjs%DzrXPhM61IM%EzrfOvSDPgM6:zrvPhc6zz4HOsc68zrzOri4iLAoJCSJoZWxwZXJfdGV4dF9zdGFydF9uZXdfcG9seWdvbiI6ICLOms6szr3PhM61IM66zrvOuc66IM%Dz4TOvyDOtc%Az4zOvM61zr3OvyDPg863zrzOtc6vzr8gzq4gz4PPhM6:IM6xz4HPh865zrrPjCDPg863zrzOtc6vzr8gzrPOuc6xIM69zrEgzr:Ou86:zrrOu863z4HPjs%DzrXPhM61IM%Ezr8gz4DOv867z43Os8%Jzr3Ovy4iLAoJCSJoZWxwZXJfdGV4dF9zdGFydF9uZXdfaW50ZXJwb2xhdGluZ19wb2x5bm9taWFsIjogIs6azqzOvc%EzrUgzrrOu865zrogz4PPhM6:IM61z4DPjM68zrXOvc6:IM%DzrfOvM61zq:OvyDOriDOtM%Nzr8gz4bOv8%Bzq3PgiDPg8%Ezr8gz4TPgc6tz4fOv869IM%DzrfOvM61zq:OvyDOs865zrEgzr3OsSDOv867zr:Ous67zrfPgc%Oz4POtc%EzrUgz4TOvyDPgM6:zrvPhc%Ozr3Phc68zr8gz4DOsc%BzrXOvM6yzr:Ou86uz4IuIiwKCQkiaGVscGVyX3RleHRfc3RhcnRfbmV3X3BhcmFsbGVsX29yX3BlcnBlbmRpY3VsYXIiOiAizpzPgM6:z4HOtc6vz4TOtSDOvc6xIM61z4DOuc67zq3Ovs61z4TOtSDPhM6xIM61zr7Ors%CIM%Dz4TOv865z4fOtc6vzrE6IiwKCQkiaGVscGVyX3RleHRfc3RhcnRfZHJhd19zdHJva2VzIjogIs6jz4fOtc60zrnOrM%Dz4TOtSDPjCzPhM65IM64zq3Ou861z4TOtS4iLAoJCSJsaW5lIjogIs68zrnOsSDOs8%BzrHOvM68zq4iLAoJCSJ2ZWN0b3IiOiAizrTOuc6szr3Phc%DzrzOsSIsCgkJInJheSI6ICLOvM65zrEgzrHOus%Ezq:Ovc6xIiwKCQkic2VnbWVudCI6ICLOrc69zrEgz4TOvM6uzrzOsSIsCgkJImZpbmFsX2hlbHBlcl90ZXh0IjogIs6kzq3Ou86:z4IhIiwKCQkiaGVscF91cmwiOiAizpLOn86XzpjOlc6ZzpEiLAoJCSJjbG9zZV9oZWxwZXJfdGV4dCI6ICLOms67zrXOr8%DzrnOvM6:IM%Dz4XOvM6yzr:Phc67zq7PgiDOtc%BzrPOsc67zrXOr86:z4UiLAoKCQkibmV3UG9pbnQiOiAizqPPhM65zrPOvM6uIiwKCQkibmV3TGluZVRocm91Z2hUd29Qb2ludHMiOiAizpPPgc6xzrzOvM6uIiwKCQkibmV3TGluZVNlZ21lbnRCeVBvaW50cyI6Is6kzrzOrs68zrEiLAoJCSJuZXdSYXlGcm9tUG9pbnRUaHJvdWdoUG9pbnQiOiAizpHOus%Ezq:Ovc6xIiwKCQkibmV3UG9seWxpbmUiOiAizqTOtc64zrvOsc%DzrzOrc69zrciLAoJCSJuZXdQb2x5Z29uIjogIs6gzr:Ou8%NzrPPic69zr8iLAoJCSJuZXdWZWN0b3JCeVBvaW50cyI6ICLOlM65zqzOvc%Fz4POvM6xIiwKCQkibmV3UGFyYWxsZWxvZ3JhbSI6ICLOoM6xz4HOsc67zrvOt867z4zOs8%BzrHOvM68zr8iLAoJCSJuZXdMaW5lUGFyYWxsZWxUb0xpbmVUaHJvdWdoUG9pbnQiOiAizqDOsc%BzqzOu867zrfOu863IM6zz4HOsc68zrzOriIsCgkJIm5ld0xpbmVQZXJwZW5kaWN1bGFyVG9MaW5lVGhyb3VnaFBvaW50IjogIs6azqzOuM61z4TOtyDOs8%BzrHOvM68zq4iLAoKCQkibmV3Q2lyY2xlQnlDZW50ZXJBbmRQb2ludCI6ICLOms%NzrrOu86:z4IgzrrOsc%EzqwgzrrOrc69z4TPgc6:IM66zrHOuSDPg8%EzrnOs868zq4iLAoJCSJuZXdDaXJjbGVCeVRocmVlUG9pbnRzIjogIs6az43Ous67zr:PgiDOus6xz4TOrCDPhM%BzrXOuc%CIM%Dz4TOuc6zzrzOrc%CIiwKCQkibmV3QXJjQnlUaHJlZVBvaW50cyI6ICLOpM%Mzr7OvyIsCgkJIm5ld1BhcmFib2xhQnlGb2N1c0FuZERpcmVjdHJpeCI6ICLOoM6xz4HOsc6yzr:Ou86uIiwKCQkibmV3RWxsaXBzZUJ5Rm9jaUFuZFBvaW50IjogIs6IzrvOu861zrnPiM63IiwKCQkibmV3SHlwZXJib2xhQnlGb2NpQW5kUG9pbnQiOiAizqXPgM61z4HOss6:zrvOriIsCgkJIm5ld0NvbmljQnlGaXZlUG9pbnRzIjogIs6az4nOvc65zrrPjCIsCgkJIm5ld0ludGVycG9sYXRpbmdQb2x5bm9taWFsQnlQb2ludHMiOiAizqDOv867z4XPjs69z4XOvM6:IM%AzrHPgc61zrzOss6:zrvOrs%CIiwKCQkibmV3QXJlYSI6ICLOlc68zrLOsc60z4zOvSIsCgkJIm5ld0FuZ2xlIjogIs6Tz4nOvc6vzrEiLAoJCSJuZXdMZW5ndGgiOiAizpzOrs66zr:PgiIsCgkJIm5ld0ZyZWVMYWJlbCI6ICLOlc%EzrnOus6tz4TOsSIsCgkJIm5ld0VsZW1lbnRCeUxhYmVsIjogIs6gzrHPgc6sz4PPhM6xz4POtyIsCgkJImRyYXdTdHJva2VzIjogIs6nzrXOuc%Bzr:Os8%BzrHPhs6uIiwKCgkJImVxdWF0aW9uIjogIs6Vzr7Or8%Dz4nPg863IiwKCQkibWlkcG9pbnRPZkxpbmVTZWdtZW50IjogIs6czrXPg86xzq:OvyDPg863zrzOtc6vzr8gzrXOvc%Mz4Igz4TOvM6uzrzOsc%Ezr:PgiIsCgkJIm1lZGlhdHJpeE9mTGluZVNlZ21lbnQiOiAizqPPhc68zrzOtc%Ez4HOuc66zq4gzrPPgc6xzrzOvM6uIM61zr3PjM%CIM%EzrzOrs68zrHPhM6:z4IiCgl9Cn0"},{ name : "strings_graph.pt.json", data : "s11919: "},{ name : "strings_quizzes.de.json", data : "s78038: % % "},{ name : "strings_quizzes.pt_br.json", data : "s76742:ewoJIm1ldGEiOiB7CgkJImxhbmciOiAicHRfYnIiCgl9LAoJIndvcmRzIjogewoJCSJzeW50YXhfbWF0aCI6ICJtYXRlbcOhdGljYSIsCgkJInN5bnRheF9zdHJpbmciOiAidGV4dG8iLAoKCQkiZXF1aXZhbGVudF9saXRlcmFsIjogImxpdGVyYWxtZW50ZSBpZ3VhbCIsCgkJImVxdWl2YWxlbnRfc3ltYm9saWMiOiAibWF0ZW1hdGljYW1lbnRlIGlndWFsIiwKCQkiZXF1aXZhbGVudF9lcXVhdGlvbnMiOiAiZXF1YcOnw7VlcyBlcXVpdmFsZW50ZXMiLAoJCSJlcXVpdmFsZW50X2FsbCI6ICJRdWFscXVlciByZXBvc3RhIiwKCQkiZXF1aXZhbGVudF9mdW5jdGlvbiI6ICJjw6FsY3VsbyBkYSBub3RhIiwKCgkJImNoZWNrX2ludGVnZXJfZm9ybSI6ICJ0ZW0gZm9ybWEgZGUgbsO6bWVybyBpbnRlaXJvIiwKCQkiY2hlY2tfZnJhY3Rpb25fZm9ybSI6ICJ0ZW0gZm9ybWEgZGUgZnJhw6fDo28iLAoJCSJjaGVja19wb2x5bm9taWFsX2Zvcm0iOiAidGVtIGZvcm1hIHBvbGlub21pYWwiLAoJCSJjaGVja19yYXRpb25hbF9mdW5jdGlvbl9mb3JtIjogInRlbSBmb3JtYSBkZSBmdW7Dp8OjbyByYWNpb25hbCIsCgkJImNoZWNrX2VsZW1lbnRhbF9mdW5jdGlvbl9mb3JtIjogIsOpIHVtYSBjb21iaW5hw6fDo28gZGUgZnVuw6fDtWVzIGVsZW1lbnTDoXJpYXMiLAoJCSJjaGVja19zY2llbnRpZmljX25vdGF0aW9uIjogIsOpIGV4cHJlc3NhIGVtIG5vdGHDp8OjbyBjaWVudMOtZmljYSIsCgkJImNoZWNrX3NpbXBsaWZpZWQiOiAiw6kgc2ltcGxpZmljYWRhIiwKCQkiY2hlY2tfZXhwYW5kZWQiOiAiw6kgZXhwYW5kaWRhIiwKCQkiY2hlY2tfZmFjdG9yaXplZCI6ICLDqSBmYXRvcml6YWRhIiwKCQkiY2hlY2tfcmF0aW9uYWxpemVkIjogIsOpIHJhY2lvbmFsaXphZGEiLAoJCSJjaGVja19ub19jb21tb25fZmFjdG9yIjogIm7Do28gdGVtIGZhdG9yZXMgY29tdW5zIiwKCQkiY2hlY2tfbWluaW1hbF9yYWRpY2FuZHMiOiAidGVtIHJhZGljaWHDp8OjbyBtw61uaW1hIiwKCQkiY2hlY2tfZGl2aXNpYmxlIjogIsOpIGRpdmlzw612ZWwgcG9yIiwKCQkiY2hlY2tfY29tbW9uX2Rlbm9taW5hdG9yIjogInRlbSB1bSDDum5pY28gZGVub21pbmFkb3IgY29tdW0iLAoJCSJjaGVja191bml0IjogInRlbSB1bmlkYWRlIGVxdWl2YWxlbnRlIGEiLAoJCSJjaGVja191bml0X2xpdGVyYWwiOiAidGVtIHVuaWRhZGUgbGl0ZXJhbG1lbnRlIGlndWFsIGEiLAoJCSJjaGVja19wcmVjaXNpb24iOiAidGVtIiwKCQkiY2hlY2tfc3ltYm9saWMiOiAiw6kgc2ltYsOzbGljbyIsCgkJImNoZWNrX2VxdWl2YWxlbnRfdW5pdHMiOiAidGVtIHVuaWRhZGVzIGVxdWl2YWxlbnRlcyIsCgoJCSJsaXN0IjogImxpc3RhIiwKCQkib3JkZXJtYXR0ZXJzIjogIm9yZGVtIGltcG9ydGEiLAoJCSJvcmRlcmRvZXNudG1hdHRlciI6ICJvcmRlbSBuw6NvIGltcG9ydGEiLAoJCSJxdWVzdGlvbnhtbCI6ICJYTUwgZGEgcGVyZ3VudGEiLAoJCSJncmFtbWFydXJsIjogIlVSTCBkYSBncmFtw6F0aWNhIiwKCQkicmVzZXJ2ZWR3b3JkcyI6ICJwYWxhdnJhcyByZXNlcnZhZGFzIiwKCQkiZm9yY2VicmFja2V0cyI6ICJBcyBsaXN0YXMgc2VtcHJlIHByZWNpc2FtIGRlIGNoYXZlcyDigJx7feKAnS4iLAoJCSJjb21tYWFzaXRlbXNlcGFyYXRvciI6ICJVc2UgdsOtcmd1bGEg4oCcLOKAnSBwYXJhIHNlcGFyYXIgaXRlbnMgbmEgbGlzdGEuIiwKCQkiY29uZmlybWltcG9ydGRlcHJlY2F0ZWQiOiAiSW1wb3J0YXIgcXVlc3TDo28: :Dp2FyIGEgc29sdcOnw6NvLCBwb3IgaXNzbyBkZWZpbmltb3MgdW1hIHRvbGVyw6JuY2lhIG3DrW5pbWEgcGFyYSByZXNwb3N0YXMgbGlnZWlyYW1lbnRlIGltcHJlY2lzYXMuIFZvY8OqIHBvZGUgYWp1c3RhciBlc3NhIHRvbGVyw6JuY2lhIGNsaWNhbmRvIG5hcyDigJxvcMOnw7VlcyBkZSB2YWxpZGHDp8Ojb%KAnS4iLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2NvcnJlY3RfYW5zd2VyX2Rlc2NyaXB0aW9uX3NrZXRjaF9wYXJhZ3JhcGhfMiI6ICJVc2UgbyBib3TDo28gXCJUZXN0YXIgZXN0YSBwZXJndW50YVwiIHBhcmEgZW50cmFyIG5vIG1vZG8gZGUgdmlzdWFsaXphw6fDo28gZG8gYWx1bm8uIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fZXF1aXZhbGVudF9za2V0Y2hfbGFiZWwiIDogIlJlcHJvZHV6aXIgIiwKCQkicXVpenplc19kZW1vX3NrZXRjaF90aXRsZV9tZW51IiA6ICJEZXNlbmhhciIsCgkJImhvbWVfZ2V0dGluZ19zdGFydGVkX2RvY3VtZW50YXRpb25fYnV0dG9uX3RleHQiIDogIkRvY3VtZW50YcOnw6NvIiwgCgoJCSJjbG9zZV9tYXRodHlwZV9wb3B1cCIgOiAiRmVjaGFyIE1hdGhUeXBlIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2tlZXBfYXJndW1lbnRzX2V2YWx1YXRlZF9sYWJlbCI6ICJFdmFsdWF0ZWQiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9rZWVwX2FyZ3VtZW50c191bmV2YWx1YXRlZF9sYWJlbCI6ICJNYW50ZXIgYXJndW1lbnRvcyBuw6NvIGF2YWxpYWRvcyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2tlZXBfYXJndW1lbnRzX3N0cmluZ19sYWJlbCI6ICJTdHJpbmciLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9hcmd1bWVudHNfaGVscGVyX3RleHQiOiAiRGVmaW5lIGhvdyB0aGUgc3R1ZGVudCBhbnN3ZXIgd2lsbCBiZSBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIGdyYWRpbmcgZnVuY3Rpb24uIFRoaXMgaXMgYSB2ZXJ5IGFkdmFuY2VkIGZlYXR1cmUuIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2ltcG9ydF9kZXByZWNhdGVkX21lc3NhZ2VfdGl0bGUiIDogIkRlcHJlY2F0ZWQgZmVhdHVyZXMiLAoJCSJxdWl6emVzX3N0dWRpb19pbXBvcnRfZGVwcmVjYXRlZF9tZXNzYWdlX3RleHQiIDogIlRoZSBxdWVzdGlvbiB5b3UgYXJlIGFib3V0IHRvIG9wZW4gY29udGFpbnMgZGVwcmVjYXRlZCBmZWF0dXJlcy4gVGhlIGltcG9ydCBwcm9jZXNzIG1heSBjaGFuZ2Ugc2xpZ2h0bHkgdGhlIGJlaGF2aW9yIG9mIHRoZSBxdWVzdGlvbi4gSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNhcmVmdWxseSB0ZXN0IGRlIHF1ZXN0aW9uIGFmdGVyIGltcG9ydC4gXG4gICAgVGhlIGRlcHJlY2F0ZWQgZmVhdHVyZXMgYXJlIHRoZSBmb2xsb3dpbmcgb25lczoiLAoKCQkicXVpenplc19zdHVkaW9fZXF1aXZhbGVudF9zZXRfYXNzZXJ0aW9uIjogIkVxdWl2YWxlbnQgc2V0IGFzc2VydGlvbiBpcyBubyBsb25nZXIgYXZhaWxhYmxlIiwKCQkicXVpenplc19zdHVkaW9fc3ludGF4X2xpc3RfYXNzZXJ0aW9uIjogIlN5bnRheCBsaXN0IGFzc2VydGlvbiBpcyBubyBsb25nZXIgYXZhaWxhYmxlIiwKCQkicXVpenplc19zdHVkaW9fdGV4dF9sb2dpY19vcGVyYXRvcnMiIDogIlRleHQgbG9naWMgb3BlcmF0b3JzIGFyZSBubyBsb25nZXIgYXZhaWxhYmxlIiwKCQkicXVpenplc19zdHVkaW9fZXF1aXZhbGVudF91bml0X2xpdGVyYWwiIDogIkVxdWl2YWxlbnQgdW5pdCBsaXRlcmFsIGFzc2VydGlvbiBpcyBubyBsb25nZXIgYXZhaWxhYmxlIgoKCX0KfQoKCg"},{ name : "pie_chart_config.json", data : "s3179:ewogICAgImlkIjogImdyYXBoIiwKICAgICJpdGVtcyI6IFsKICAgICAgewogICAgICAgICJpZCI6ICJ0b29scyIsCiAgICAgICAgIml0ZW1zIjogWwogICAgICAgICAgewogICAgICAgICAgICAiaWQiOiAicG9pbnRlcnMiLAogICAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjogImN1cnNvckVkaXRQaWVDaGFydCIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJpZCI6ICJ2aXN1YWxzIiwKICAgICAgICAgICAgIml0ZW1zIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJmaXRQbG90dGVyVG9TdGF0cyIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJwaWUyRDNEIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImlkIjogImVsZW1lbnRzIiwKICAgICAgICAgICAgIml0ZW1zIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJuZXdQaWUiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiAibmV3RnJlZUxhYmVsIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSwKICAgICAgewogICAgICAgICJpZCI6ICJtZW51IiwKICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJpZCI6ICJlZGl0aW9uIiwKICAgICAgICAgICAgIml0ZW1zIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJ1bmRvIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjogInJlZG8iCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiaWQiOiAiYWN0aW9ucyIsCiAgICAgICAgICAgICJpdGVtcyI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiAiZG93bmxvYWQiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9LAogICAgICB7CiAgICAgICAgImlkIjogInZpZXciLAogICAgICAgICJpdGVtcyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImlkIjogInZpZXdUb29scyIsCiAgICAgICAgICAgICJpdGVtcyI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiAiem9vbUluIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjogInpvb21PdXQiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiaWQiOiAidmlld0FjdGlvbnMiLAogICAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjogIm1heGltaXplIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSwKICAgICAgewogICAgICAgICJpZCI6ICJjb250ZXh0dWFsRWxlbWVudCIsCiAgICAgICAgIml0ZW1zIjogWwogICAgICAgICAgewogICAgICAgICAgICAiaWQiOiAiZWxlbWVudFN0eWxlcyIsCiAgICAgICAgICAgICJpdGVtcyI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiAibGluZUNvbG9yIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImlkIjogImRlbGV0ZVNlY3Rpb24iLAogICAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjogImRlbGV0ZVBpZSIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiaWQiOiAiY29udGV4dHVhbExhYmVsIiwKICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJpZCI6ICJsYWJlbFN0eWxlcyIsCiAgICAgICAgICAgICJpdGVtcyI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiAiYm9sZCIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJpdGFsaWMiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiAiY29sb3IiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9CiAgICBdCn0"},{ name : "strings_quizzes.zh.json", data : "s70448:ewoJIm1ldGEiOiB7CgkJImxhbmciOiAiemgiCgl9LAoJIndvcmRzIjogewoJCSJzeW50YXhfbWF0aCI6ICLmlbDlraYiLAoJCSJzeW50YXhfc3RyaW5nIjogIuaWh%acrCIsCgoJCSJlcXVpdmFsZW50X2xpdGVyYWwiOiAi5a6M5YWo55u45ZCMIiwKCQkiZXF1aXZhbGVudF9zeW1ib2xpYyI6ICLmlbDlrabkuIrnm7jnrYkiLAoJCSJlcXVpdmFsZW50X2VxdWF0aW9ucyI6ICLnrYnku7fmlrnnqIsiLAoJCSJlcXVpdmFsZW50X2FsbCI6ICLku7vkvZXnrZTmoYgiLAoJCSJlcXVpdmFsZW50X2Z1bmN0aW9uIjogIuivhOWIhuWHveaVsCIsCgoJCSJjaGVja19pbnRlZ2VyX2Zvcm0iOiAi5YW35pyJ5pW05pWw5b2i5byPIiwKCQkiY2hlY2tfZnJhY3Rpb25fZm9ybSI6ICLlhbfmnInliIbmlbDlvaLlvI8iLAoJCSJjaGVja19wb2x5bm9taWFsX2Zvcm0iOiAi5YW35pyJ5aSa6aG55byP5b2i5byPIiwKCQkiY2hlY2tfcmF0aW9uYWxfZnVuY3Rpb25fZm9ybSI6ICLlhbfmnInmnInnkIblh73mlbDlvaLlvI8iLAoJCSJjaGVja19lbGVtZW50YWxfZnVuY3Rpb25fZm9ybSI6ICLmmK:liJ3nrYnlh73mlbDnmoTnu4TlkIgiLAoJCSJjaGVja19zY2llbnRpZmljX25vdGF0aW9uIjogIuS7peenkeWtpuiuoeaVsOazleihqOekuiIsCgkJImNoZWNrX3NpbXBsaWZpZWQiOiAi5bey5YyW566AIiwKCQkiY2hlY2tfZXhwYW5kZWQiOiAi5bey5bGV5byAIiwKCQkiY2hlY2tfZmFjdG9yaXplZCI6ICLlt7LliIbop6MiLAoJCSJjaGVja19yYXRpb25hbGl6ZWQiOiAi5pyJ55CG5YyWIiwKCQkiY2hlY2tfbm9fY29tbW9uX2ZhY3RvciI6ICLmsqHmnInlhazlm6DmlbAiLAoJCSJjaGVja19taW5pbWFsX3JhZGljYW5kcyI6ICLmnInmnIDlsI:nmoTooqvlvIDmlrnmlbAiLAoJCSJjaGVja19kaXZpc2libGUiOiAi5pW06ZmkIiwKCQkiY2hlY2tfY29tbW9uX2Rlbm9taW5hdG9yIjogIuWFt%acieWUr%S4gOWFrOWIhuavjSIsCgkJImNoZWNrX3VuaXQiOiAi5Y2V5L2N562J5LqOIiwKCQkiY2hlY2tfdW5pdF9saXRlcmFsIjogIuWNleS9jeWunumZheetieS6jiIsCgkJImNoZWNrX3ByZWNpc2lvbiI6ICLlhbfmnIkiLAoJCSJjaGVja19zeW1ib2xpYyI6ICLmmK:nrKblj7ciLAoJCSJjaGVja19lcXVpdmFsZW50X3VuaXRzIjogIuWFt%acieetieaViOWNleS9jSIsCgoJCSJsaXN0IjogIuihjOWIl%W8jyIsCgkJIm9yZGVybWF0dGVycyI6ICLpobrluo:lvojph43opoEiLAoJCSJvcmRlcmRvZXNudG1hdHRlciI6ICLpobrluo:kuI3ph43opoEiLAoJCSJxdWVzdGlvbnhtbCI6ICLpl67popggWE1MIiwKCQkiZ3JhbW1hcnVybCI6ICLor63ms5UgVVJMIiwKCQkicmVzZXJ2ZWR3b3JkcyI6ICLkv53nlZnor40iLAoJCSJmb3JjZWJyYWNrZXRzIjogIuihjOWIl%W8j%aAu%aYr%mcgOimgeWkp%aLrOWPt%KAnHt94oCd44CCIiwKCQkiY29tbWFhc2l0ZW1zZXBhcmF0b3IiOiAi5L2:55So6YCX5Y%34oCcLOKAneS9nOS4uuihjOWIl%W8j%mhueWIhumalOespuOAgiIsCgkJImNvbmZpcm1pbXBvcnRkZXByZWNhdGVkIjogIuWvvOWFpemXrumimO%8nyBcbuaCqOWNs%WwhuaJk%W8gOeahOmXrumimOWMheWQq%W3suW8g%eUqOeahOWKn%iDveOAguWvvOWFpei:h%eoi%WPr%iDveS8mueojeW%ruaUueWPmOmXrumimOeahOihqOeOsOOAguW8uueDiOW7uuiuruaCqOWcqOWvvOWFpeWQjuS7lOe7hua1i%ivlemXrumimOOAgiIsCgkJImNvbXBhcmVzZXRzIjogIuS9nOS4uumbhuWQiOi:m%ihjOavlOi%gyIsCgkJInJlbGF0aXZldG9sZXJhbmNlIjogIuebuOWvueWFrOW3riIsCgkJIm5vYnJhY2tldHNsaXN0IjogIuayoeacieaLrOWPt%eahOihjOWIl%W8jyIsCgoJCSJncmFkaW5nZnVuY3Rpb24iOiAi6K%E5YiG5Ye95pWwIiwKCQkiYWRkaXRpb25hbHByb3BlcnRpZXMiOiAi6ZmE5Yqg5bGe5oCnIiwKCQkic3RydWN0dXJlIjogIue7k%aehCIsCgkJImV4cGxvZyI6ICJleHAvbG9nIiwKCQkidHJpZ29ub21ldHJpYyI6ICLkuInop5Llh73mlbAiLAoJCSJoeXBlcmJvbGljIjogIuWPjOabsue6vyIsCgkJInRvbGVyYW5jZSI6ICLlhazlt64iLAoJCSJyZWxhdGl2ZSI6ICLnm7jlr7kiLAoJCSJwcmVjaXNpb24iOiAi57K%56Gu5bqmIiwKCQkiaW1wbGljaXRfdGltZXNfb3BlcmF0b3IiOiAi6ZqQ5byP5LmY5Y%36L%Q566X56ymIiwKCQkidGltZXNfb3BlcmF0b3IiOiAi5LmY5Y%36L%Q566X56ymIiwKCQkiaW1hZ2luYXJ5X3VuaXQiOiAi6Jma5pWw5Y2V5L2NIiwKCQkibWl4ZWRmcmFjdGlvbnMiOiAi5bim5YiG5pWwIiwKCQkiY29uc3RhbnRzIjogIuW4uOmHjyIsCgkJImZ1bmN0aW9ucyI6ICLlh73mlbAiLAoJCSJ1c2VyZnVuY3Rpb25zIjogIueUqOaIt%WHveaVsCIsCgkJInVuaXRzIjogIuWNleS9jSIsCgkJInVuaXRwcmVmaXhlcyI6ICLljZXkvY3liY3nvIAiLAoJCSJzeW50YXhwYXJhbXMiOiAi5qC85byP6YCJ6aG5IiwKCgkJImF1dGhvcmluZ19maWVsZF9idXR0b25fdG9vbHRpcCI6ICLmiZPlvIAgV2lyaXNRdWl6emVzIFN0dWRpbyIsCgkJImF1dGhvcmluZ19maWVsZF90ZXh0X2ZpZWxkX2xhYmVsIjogIuato%ehruetlOahiCIsCgoJCSJxdWl6emVzX3N0dWRpb19ob21lX2FjdGl2aXR5X3RpdGxlIjogIldpcmlzUXVpenplcyBTdHVkaW8iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2FjdGl2aXR5X3RpdGxlIjogIui%k%WFpemAiemhuSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19hY3Rpdml0eV90aXRsZSI6ICLpqozor4HpgInpobkiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19hY3Rpdml0eV90aXRsZSI6ICLlrprkuYnpmo:mnLrlj5jph4:lkozlh73mlbAiLAoJCSJxdWl6emVzX3N0dWRpb19hdXhpbGlhcl9pbml0aWFsX2NvbnRlbnRfYWN0aXZpdHlfdGl0bGUiOiAi5a6a5LmJ5a2m55Sf55qE5Yid5aeL5YaF5a65IiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9hY3Rpdml0eV90aXRsZSI6ICLpqozor4Hov5nkuKrpl67popgiLAoJCSJxdWl6emVzX3N0dWRpb19ncmFwaF92YWxpZGF0aW9uX29wdGlvbnNfYWN0aXZpdHlfdGl0bGUiOiAi6aqM6K%B6YCJ6aG5IiwKCQkicXVpenplc19zdHVkaW9fdmlld19zb3VyY2VfYWN0aXZpdHlfdGl0bGUiOiAi5p%l55yL6Zeu6aKY5p2l5rqQIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3Rvb2xiYXJfYmFja19idXR0b25fdG9vbHRpcCI6ICLov5Tlm54iLAoJCSJxdWl6emVzX3N0dWRpb190b29sYmFyX3Rlc3RfcXVlc3Rpb25fYnV0dG9uX3Rvb2x0aXAiOiAi6aqM6K%B6L%Z5Liq6Zeu6aKYIiwKCQkicXVpenplc19zdHVkaW9fdG9vbGJhcl9oZWxwX2J1dHRvbl90b29sdGlwIjogIuW4ruWKqSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3NlbmRfZmVlZGJhY2tfbGFiZWwiOiAi5ZCR5oiR5Lus5o%Q5L6b5oKo55qE5Y%N6aaIIiwKCQkicXVpenplc19zdHVkaW9fdHJhaW5pbmdfbGFiZWwiOiAi5oql5ZCN5Y%C5Yqg5oiR5Lus55qE5Z%56K6t6K%%56iLIiwKCQkicXVpenplc19zdHVkaW9fd2Vic2l0ZV9sYWJlbCI6ICLorr:pl67miJHku6znmoTnvZHnq5kiLAoJCSJxdWl6emVzX3N0dWRpb19yZXBvcnRfaXNzdWVfbGFiZWwiOiAi5oql5ZGK6Zeu6aKYIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3Rvb2xiYXJfbW9yZV9vcHRpb25zX2Ryb3Bkb3duX3Rvb2x0aXAiOiAi5paH5Lu2IiwKCQkicXVpenplc19zdHVkaW9fdG9vbGJhcl9tb3JlX29wdGlvbnNfZHJvcGRvd25faW1wb3J0X2xhYmVsIjogIuWvvOWFpSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rvb2xiYXJfbW9yZV9vcHRpb25zX2Ryb3Bkb3duX2V4cG9ydF9sYWJlbCI6ICLlr7zlh7oiLAoJCSJxdWl6emVzX3N0dWRpb190b29sYmFyX21vcmVfb3B0aW9uc19kcm9wZG93bl92aWV3X3NvdXJjZV9sYWJlbCI6ICLmn6XnnIvmnaXmupAiLAoJCSJxdWl6emVzX3N0dWRpb190b29sYmFyX21vcmVfb3B0aW9uc19kcm9wZG93bl9oZWxwX2xhYmVsIjogIuW4ruWKqSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rvb2xiYXJfbW9yZV9vcHRpb25zX2Ryb3Bkb3duX2Fib3V0X2xhYmVsIjogIuWFs%S6jiIsCgoJCSJxdWl6emVzX3N0dWRpb19ob21lX2Fuc3dlcl90eXBlX2xhYmVsIjogIuetlOahiOexu%WeiyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYW5zd2VyX3R5cGVfZXF1YXRpb25fbGFiZWwiOiAi5pa556iLIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9hbnN3ZXJfdHlwZV9ncmFwaGljX2xhYmVsIjogIuWbvuW9oiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYW5zd2VyX3R5cGVfdGV4dF9sYWJlbCI6ICLmlofmnKwiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2Fuc3dlcl90eXBlX3N0YW5kYXJkX2dyYXBoaWNfbGFiZWwiOiAi5qCH5YeGIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9hbnN3ZXJfdHlwZV9iYXJfY2hhcnRfbGFiZWwiOiAi5p%x5b2i5Zu%IiwKCQkicXVpenplc19zdHVkaW9faG9tZV9hbnN3ZXJfdHlwZV9saW5lX2NoYXJ0X2xhYmVsIjogIue6v%W9ouWbviIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYW5zd2VyX3R5cGVfcGllX2NoYXJ0X2xhYmVsIjogIumlvOW9ouWbviIsCgoKCQkicXVpenplc19zdHVkaW9faG9tZV9xdWVzdGlvbl9tYXRoX2NvbnRlbnRfbGFiZWwiOiAi5Li65oKo55qE6Zeu6aKY6K6%572u5Yid5aeL5YaF5a655ZKM5q2j56Gu562U5qGIIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9xdWVzdGlvbl90ZXh0X2NvbnRlbnRfbGFiZWwiOiAi5Li65oKo55qE6Zeu6aKY6K6%572u5q2j56Gu562U5qGIIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9pbml0aWFsX2NvbnRlbnRfbGFiZWwiOiAi5Yid5aeL5YaF5a65IiwKCQkicXVpenplc19zdHVkaW9faG9tZV9jb3JyZWN0X2Fuc3dlcl9sYWJlbCI6ICLmraPnoa7nrZTmoYgiLAoKCQkicXVpenplc19zdHVkaW9faG9tZV9xdWVzdGlvbl9ncmFwaF9jb250ZW50X2xhYmVsIjogIuS4uuaCqOeahOmXrumimOaLn%WumuWIneWni%WGheWuueWSjOato%ehruetlOahiCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfaW5pdGlhbF9ncmFwaF9jb250ZW50X2xhYmVsIjogIuWIneWni%WGheWuuSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfY29ycmVjdF9ncmFwaF9hbnN3ZXJfbGFiZWwiOiAi5q2j56Gu562U5qGIIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYWN0aXZpdHlfbGlzdF9sYWJlbCI6ICLorr7nva4iLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2lucHV0X29wdGlvbnNfbGFiZWwiOiAi6L6T5YWl6YCJ6aG5IiwKCQkicXVpenplc19zdHVkaW9faG9tZV92YWxpZGF0aW9uX29wdGlvbnNfbGFiZWwiOiAi6aqM6K%B6YCJ6aG5IiwKCQkicXVpenplc19zdHVkaW9faG9tZV92YXJpYWJsZXNfb3B0aW9uc19sYWJlbCI6ICLpmo:mnLrlj5jph48iLAoKCQkicXVpenplc19zdHVkaW9fY3VzdG9taXplX2dyYXBoX3Rvb2xiYXJfbGFiZWwiOiAi6YCJ5oup5o%Q5L6b57uZ5a2m55Sf55So5LqO5Zue562U6Zeu6aKY55qE5bel5YW344CCIiwKCQkicXVpenplc19zdHVkaW9fY3VzdG9taXplX2dyYXBoX3Rvb2xiYXJfaGVhZGVyIjogIuiHquWumuS5ieW3peWFt%agjyIsCgoJCSJxdWl6emVzX3N0dWRpb19ob21lX3Rlc3RfcXVlc3Rpb25fYnV0dG9uX3Rvb2x0aXAiOiAi6aqM6K%B6L%Z5Liq6Zeu6aKYIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9jYW5jZWxfYnV0dG9uX3Rvb2x0aXAiOiAi5Y%W5raIIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9zYXZlX2J1dHRvbl90b29sdGlwIjogIuS:neWtmCIsCgoJCSJxdWl6emVzX3N0dWRpb19vcHRpb25zX2ZpbHRlcl9sYWJlbCI6ICLmoLnmja7lr7nmraPnoa7nrZTmoYjnmoTliIbmnpDnrZvpgInpgInpobnjgIIiLAoJCSJxdWl6emVzX3N0dWRpb19vcHRpb25zX2ZpbHRlcl9hbGxfb3B0aW9uc19sYWJlbCI6ICLmmL7npLrmiYDmnInpgInpobkiLAoJCSJxdWl6emVzX3N0dWRpb19vcHRpb25zX2ZpbHRlcl9yZWxldmFudF9vcHRpb25zX2xhYmVsIjogIuaYvuekuuebuOWFs%mAiemhuSIsCgoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2NvbXBvdW5kX2Fuc3dlcl90aXRsZSI6ICLlpI3lkIjnrZTmoYgiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2NvbXBvdW5kX2Fuc3dlcl9ncmFkZV9hbnN3ZXJfYm94ZXNfc2VwYXJhdGVseV9sYWJlbCI6ICLliIbliKvnu5nnrZTmoYjmoYbor4TliIYiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2NvbXBvdW5kX2Fuc3dlcl9ncmFkZV9hbnN3ZXJfYm94ZXNfc2VwYXJhdGVseV9oZWxwZXJfdGV4dCI6ICLni6znq4vor4TkvLDmr4:kuKrnrZTmoYjmoYbjgILlkKbliJnmlbTkuKrlhoXlrrnkvJrooqvor4TkvLDkuLrkuIDkuKrljZXkuIDlgLzjgILnrZTmoYjmoYblnKjliJ3lp4vlhoXlrrnkuK3lrprkuYnjgIIiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2NvbXBvdW5kX2Fuc3dlcl9hbGxfYW5zd2Vyc19jb3JyZWN0X2xhYmVsIjogIuaJgOacieetlOahiOmDveW:hemhu%ato%ehriIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfY29tcG91bmRfYW5zd2VyX2FsbF9hbnN3ZXJzX2NvcnJlY3RfaGVscGVyX3RleHQiOiAi5aaC5p6c5Lu75L2V5LiA5Liq562U5qGI5LiN5q2j56Gu77yM5pW05Liq6Zeu6aKY5bCG6KKr6K%E5a6a5Li65LiN5q2j56Gu44CC5ZCm5YiZ5q%P5Liq562U5qGI5Zyo6K%E5YiG5Lit6YO95pyJ5p2D6YeN44CCIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19jb21wb3VuZF9hbnN3ZXJfdGFibGVfYW5zd2VyX2NvbHVtbl9sYWJlbCI6ICLnrZTmoYgiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2NvbXBvdW5kX2Fuc3dlcl90YWJsZV9ncmFkZV93ZWlnaHRfY29sdW1uX2xhYmVsIjogIuivhOWIhuadg%mHjSIsCgoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfdGl0bGUiOiAi562U5qGI6L6T5YWl5pa55rOVIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX2Fuc3dlcl9pbnB1dF9maWVsZF9sYWJlbCI6ICLnrZTmoYjovpPlhaXlrZfmrrUiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfbWF0aGVkaXRvcl9lbWJlZGRlZF9sYWJlbCI6ICLltYzlhaXlvI:mlbDlrabnvJbovpHlmagiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfbWF0aGVkaXRvcl9lbWJlZGRlZF9oZWxwZXJfdGV4dCI6ICLlip:og73lhajpnaLnmoQgTWF0aFR5cGUg5pWw5a2m57yW6L6R5Zmo77yM5bim5pyJ5bel5YW35qCP5ZKM5omL5YaZ6L6T5YWl5qih5byP44CCIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX21hdGhlZGl0b3JfcG9wdXBfbGFiZWwiOiAi5by55Ye656qX5Y%j5pi%56S65pWw5a2m57yW6L6R5ZmoIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX21hdGhlZGl0b3JfcG9wdXBfaGVscGVyX3RleHQiOiAi5paH5pys5a2X5q615bim5pyJ5oyJ6ZKu77yM5Y%v5Zyo5by55Ye656qX5Y%j5Lit5ZCv5YqoIE1hdGhUeXBlIOaVsOWtpue8lui%keWZqOOAgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9wbGFpbl90ZXh0X2xhYmVsIjogIue6r%aWh%acrCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9wbGFpbl90ZXh0X2hlbHBlcl90ZXh0IjogIuS7heS4uuS4gOS4que6r%aWh%acrOWtl%aute%8jOeUqOS6juabtOeugOWNleeahOetlOahiOOAgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9hdXhpbGlhcl9pbnB1dF9sYWJlbCI6ICLovoXliqnovpPlhaUiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfZGlzcGxheV9hdXhpbGlhcl9pbnB1dF9sYWJlbCI6ICLmmL7npLrovoXliqkgQ2FsY01lIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX2Rpc3BsYXlfYXV4aWxpYXJfaW5wdXRfaGVscGVyX3RleHQiOiAi6Zmk5LqG5qCH5YeG5a2m55Sf562U5qGI5a2X5q615aSW77yM6L%Y5pi%56S66L6F5YqpIENhbGNNZSDorqHnrpflmajjgIIiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfdGV4dF9hdXhpbGlhcl9pbnB1dF9sYWJlbCI6ICLmmL7npLrovoXliqnmlofmnKzlrZfmrrUiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfdGV4dF9hdXhpbGlhcl9pbnB1dF9oZWxwZXJfdGV4dCI6ICLpmaTkuobmoIflh4blrabnlJ:nrZTmoYjlrZfmrrXlpJbvvIzov5jmmL7npLrovoXliqnmlofmnKzlrZfmrrXjgIIiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfcmVwbGFjZV9hdXhpbGlhcl9pbnB1dF9sYWJlbCI6ICLnlKjovoXliqkgQ2FsY01lIOabv%aNouetlOahiOi%k%WFpSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9yZXBsYWNlX2F1eGlsaWFyX2lucHV0X2hlbHBlcl90ZXh0IjogIuWvueS6juWtpueUn%etlOahiOeUqOi%heWKqSBDYWxjTWUg6K6h566X5Zmo5pu:5o2i562U5qGI6L6T5YWl5a2X5q6144CCIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX25vX2F1eGlsaWFyX2lucHV0X2xhYmVsIjogIuS4jeimgeaYvuekuui%heWKqei%k%WFpSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9ub19hdXhpbGlhcl9pbnB1dF9oZWxwZXJfdGV4dCI6ICLlrabnlJ:nrZTmoYjovpPlhaXlrZfmrrXkuI3opoHmmL7npLrovoXliqkgQ2FsY01lIOiuoeeul%WZqOOAgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9kZWZpbmVfaW5pdGlhbF9jb250ZW50X2J1dHRvbl9sYWJlbCI6ICLlrprkuYnliJ3lp4vlhoXlrrkiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfY3VzdG9taXplX3Rvb2xiYXJfbGFiZWwiOiAi6Ieq5a6a5LmJ5bel5YW35qCPIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX2F1eGlsaWFyX2lucHV0X2hpZGVfZmlsZV9tZW51X2xhYmVsIjogIumakOiXjyBDYWxjTWUg5paH5qGj6YCJ6aG5IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX2F1eGlsaWFyX2lucHV0X2hpZGVfZmlsZV9tZW51X2hlbHBlcl90ZXh0IjogIuWvueWtpueUn%makOiXj%aJk%W8gOOAgeS:neWtmOaIluS4i%i9vSBDYWxjTWUg5paH5Lu2562J6YCJ6aG5IiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3RpdGxlIjogIui%k%WFpeagvOW8jyIsCgoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9zZWxlY3RfYWxsX2xhYmVsIjogIuaJgOaciSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2NsZWFyX2FsbF9sYWJlbCI6ICLmuIXpmaQiLAoKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfY29uc3RhbnRzX2xhYmVsIjogIuW4uOmHjyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2NvbnN0YW50c19oZWxwZXJfdGV4dCI6ICLpgInmi6nlj6:op6Por7vkuLrluLjph4:ogIzkuI3mmK:oh6rnlLHlj5jph4:nmoTlrZfmr43jgILmgqjlj6:ku6XlnKjlrprkuYnpmo:mnLrlj5jph4:lkozlh73mlbDpnaLmnb:kuK3lrprkuYnmm7TlpJrluLjph4:jgIIiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9jb25zdGFudHNfcGlfbGFiZWwiOiAiz4AiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9jb25zdGFudHNfZV9sYWJlbCI6ICJlIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfY29uc3RhbnRzX2lfbGFiZWwiOiAiaSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2NvbnN0YW50c19qX2xhYmVsIjogImoiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9jb25zdGFudHNfbW9yZV9jb25zdGFudHMiOiAi5pu05aSa5bi46YePLi4uLi4uIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfY29uc3RhbnRzX2RlZmluZV9jb25zdGFudF9idXR0b25fbGFiZWwiOiAi5a6a5LmJ5LiA5Liq5paw5bi46YePIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2Z1bmN0aW9uc19sYWJlbCI6ICLlh73mlbAiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9mdW5jdGlvbnNfaGVscGVyX3RleHQiOiAi6YCJ5oup5Y%v6Kej6K%75Li65Ye95pWw55qE5ZCN56ew44CC5oKo5Y%v5Lul5Zyo5a6a5LmJ6ZqP5py65Y%Y6YeP5ZKM5Ye95pWw6Z2i5p2:5Lit5a6a5LmJ5pu05aSa5Ye95pWw44CCIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfZnVuY3Rpb25zX2V4cF9sb2dfbGFiZWwiOiAiZXhwL2xvZyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2Z1bmN0aW9uc190cmlnb25vbWV0cmljX2xhYmVsIjogIuS4ieinkuWHveaVsCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2Z1bmN0aW9uc19oeXBlcmJvbGljX2xhYmVsIjogIuWPjOabsue6vyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2Z1bmN0aW9uc19hcml0aG1ldGljX2xhYmVsIjogIui:kOeulyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2Z1bmN0aW9uc19tb3JlX2Z1bmN0aW9ucyI6ICLmm7TlpJrlh73mlbAuLi4uLi4iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9mdW5jdGlvbnNfZGVmaW5lX2Z1bmN0aW9uX2J1dHRvbl9sYWJlbCI6ICLlrprkuYnkuIDkuKrmlrDlh73mlbAiLAoKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfbWVhc3VyZV91bml0c19sYWJlbCI6ICLorqHph4:ljZXkvY0iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9tZWFzdXJlX3VuaXRzX2hlbHBlcl90ZXh0IjogIumAieaLqeWPr%ino%ivu%S4uuW6pumHj% :ljZXkvY3lhYHorrjnmoTliY3nvIDjgIIiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF91bml0X3ByZWZpeGVzX3lvdHRhX2xhYmVsIjogIlkiLAogICAgICAgICJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF91bml0X3ByZWZpeGVzX3pldHRhX2xhYmVsIjogIloiLAogICAgICAgICJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF91bml0X3ByZWZpeGVzX2V4YV9sYWJlbCI6ICJFIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19wZXRhX2xhYmVsIjogIlAiLAogICAgICAgICJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF91bml0X3ByZWZpeGVzX3RlcmFfbGFiZWwiOiAiVCIsCiAgICAgICAgInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfZ2lnYV9sYWJlbCI6ICJHIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19tZWdhX2xhYmVsIjogIk0iLAogICAgICAgICJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF91bml0X3ByZWZpeGVzX2tpbG9fbGFiZWwiOiAiayIsCiAgICAgICAgInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfaGVjdG9fbGFiZWwiOiAiaCIsCiAgICAgICAgInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfZGVjYV9sYWJlbCI6ICJkYSIsCiAgICAgICAgInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfZGVjaV9sYWJlbCI6ICJkIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19jZW50aV9sYWJlbCI6ICJjIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19taWxsaV9sYWJlbCI6ICJtIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19taWNyb19sYWJlbCI6ICJOIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19uYW5vX2xhYmVsIjogIm4iLAogICAgICAgICJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF91bml0X3ByZWZpeGVzX3BpY29fbGFiZWwiOiAicCIsCiAgICAgICAgInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfZmVtdG9fbGFiZWwiOiAiZiIsCiAgICAgICAgInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3VuaXRfcHJlZml4ZXNfYXR0b19sYWJlbCI6ICJhIiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc196ZXB0b19sYWJlbCI6ICJ6IiwKICAgICAgICAicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc195b2N0b19sYWJlbCI6ICJ5IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfdW5pdF9wcmVmaXhlc19tb3JlX3ByZWZpeGVzX2xhYmVsIjogIuabtOWkmuWJjee8gOKApuKApiIsCgoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfbGFiZWwiOiAi5YWB6K6455qE57uT5p6EIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfYWxsb3dlZF9jb25zdHJ1Y3Rpb25zX21peGVkX2ZyYWN0aW9uc19sYWJlbCI6ICLluKbliIbmlbAiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfbWl4ZWRfZnJhY3Rpb25zX2hlbHBlcl90ZXh0IjogIueul%W8j%WmgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2FsbG93ZWRfY29uc3RydWN0aW9uc19taXhlZF9mcmFjdGlvbnNfaGVscGVyX3RleHRfMiI6ICLlj6:op6Por7vkuLoiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfbWl4ZWRfZnJhY3Rpb25zX2hlbHBlcl90ZXh0XzMiOiAi44CC5ZCm5YiZ5a6D5Lus5Y%v6Kej6K%75Li6IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfYWxsb3dlZF9jb25zdHJ1Y3Rpb25zX21peGVkX2ZyYWN0aW9uc19oZWxwZXJfdGV4dF80IjogIuOAgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2FsbG93ZWRfY29uc3RydWN0aW9uc19saXN0c19sYWJlbCI6ICLooYzliJflvI8iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfbGlzdHNfaGVscGVyX3RleHQiOiAi5aSn5ous5Y%3IHsgfSDooqvop6Pph4rkuLrooYzliJflvI:nmoTlsIHpl63nrKbjgILlkKbliJnlsIbop6Por7vkuLrmi6zlj7fjgIIiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfbGlzdHNfd2l0aG91dF9lbmNsb3NlcnNfbGFiZWwiOiAi5peg5bCB6Zet56ym55qE6KGM5YiX5byPIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfYWxsb3dlZF9jb25zdHJ1Y3Rpb25zX2xpc3RzX3dpdGhvdXRfZW5jbG9zZXJzX2hlbHBlcl90ZXh0IjogIuS7u%S9leWFg%e0oOaIluWFg%e0oOW6j%WIl%mDveiiq%ino%mHiuS4uuihjOWIl%W8j%%8jOWNs%S9v%ayoeacieWwgemXreespiB7feOAgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X2FsbG93ZWRfY29uc3RydWN0aW9uc19pbnRlcnZhbHNfbGFiZWwiOiAi5Yy66Ze0IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfYWxsb3dlZF9jb25zdHJ1Y3Rpb25zX2ludGVydmFsc19oZWxwZXJfdGV4dCI6ICLnrpflvI:lpoIgKDAsMSkg5Y%v6Kej6K%75Li65Yy66Ze044CC5ZCm5YiZ5bCx5piv5Lik5Liq5YWD57Sg55qE5ZCR6YeP44CCIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfYWxsb3dlZF9jb25zdHJ1Y3Rpb25zX3JhdGlvc19sYWJlbCI6ICLmr5TnjociLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfcmF0aW9zX2hlbHBlcl90ZXh0IjogIueul%W8j%WmgiAyOjM6NSDlj6:op6Por7vkuLrmr5TnjofjgILlkKbliJnlsLHmmK:ov57nu63nmoTmma7pgJrpmaTms5XjgIIiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfc2NpZW50aWZpY19ub3RhdGlvbl9sYWJlbCI6ICLorqHnrpfmnLrnp5HlraborqHmlbDms5UiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2lucHV0X3N5bnRheF9hbGxvd2VkX2NvbnN0cnVjdGlvbnNfc2NpZW50aWZpY19ub3RhdGlvbl9oZWxwZXJfdGV4dCI6ICLnrpflvI:lpoIgMS41ZS01IOaIliAxLjVFLTUg5Zyo56eR5a2m6K6h5pWw5rOV5Lit5Y%v6Kej6K%75Li65bCP5pWw44CCIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3NlcGFyYXRvcl9zeW1ib2xzX2xhYmVsIjogIuWIhumalOespuWPtyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3NlcGFyYXRvcl9zeW1ib2xzX3BvaW50X2Ryb3Bkb3duX2xhYmVsIjogIueCuSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3NlcGFyYXRvcl9zeW1ib2xzX2NvbW1hX2Ryb3Bkb3duX2xhYmVsIjogIumAl%WPtyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3NlcGFyYXRvcl9zeW1ib2xzX3NwYWNlX2Ryb3Bkb3duX2xhYmVsIjogIuepuuagvCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3NlcGFyYXRvcl9zeW1ib2xzX2Ryb3Bkb3duX25vdGhpbmdfbGFiZWwiOiAi5pegIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfc2VwYXJhdG9yX3N5bWJvbHNfZHJvcGRvd25fZGVjaW1hbF9wbGFjZXNfbGFiZWwiOiAi5bCP5pWw5pWw5L2NIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfc2VwYXJhdG9yX3N5bWJvbHNfZHJvcGRvd25fZGlnaXRfZ3JvdXBzX2xhYmVsIjogIuaVsOS9jee7hCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfaW5wdXRfc3ludGF4X3NlcGFyYXRvcl9zeW1ib2xzX2Ryb3Bkb3duX2xpc3RfaXRlbXNfbGFiZWwiOiAi6KGM5YiX5byP6aG5IiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19pbnB1dF9zeW50YXhfc2VwYXJhdG9yX3N5bWJvbHNfaGVscGVyX3RleHQiOiAi6YCJ5oup54K544CB6YCX5Y%35ZKM56m65qC856ym5Y%355qE5ZCr5LmJ44CC6L%Z5a6a5LmJ5bCP5pWw5L2N5ZKM6KGM5YiX5byP5b%F6aG75aaC5L2V6KGo56S644CCIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX3RpdGxlIjogIuS4juWtpueUn%etlOahiOavlOi%gyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2xpdGVyYWxseV9lcXVhbF9sYWJlbCI6ICLlrozlhajnm7jlkIwiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9saXRlcmFsbHlfZXF1YWxfaGVscGVyX3RleHQiOiAi5a2m55Sf562U5qGI5b%F6aG75LiO5q2j56Gu562U5qGI5a6M5YWo55u45ZCM77yM5ous5Y%35ZKM562J5pWI6L%Q566X56ym6Zmk5aSW44CC5YWs5beu5LuN54S26YCC55So44CCIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fbWF0aGVtYXRpY2FsbHlfZXF1YWxfbGFiZWwiOiAi5pWw5a2m5LiK55u4562JIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fbWF0aGVtYXRpY2FsbHlfZXF1YWxfaGVscGVyX3RleHQiOiAi5L2:55So5pWw5a2m5byV5pOO5bCG5a2m55Sf562U5qGI5LiO5q2j56Gu562U5qGI6L%b6KGM5q%U6L6D44CCIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fb3JkZXJfYW5kX3JlcGV0aXRpb25fbWF0dGVyc19sYWJlbCI6ICLooYzliJflvI:kuK3nmoTpobrluo:lkozph43lpI3lvojph43opoEiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9vcmRlcl9hbmRfcmVwZXRpdGlvbl9tYXR0ZXJzX2hlbHBlcl90ZXh0IjogIuWmguaenOetlOahiOaYr%S4gOS4quWFg%e0oOihjOWIl%W8j%%8jOWImeWtpueUn%etlOahiOS4reeahOWFg%e0oOW:hemhu%S4juato%ehruetlOahiOS4reeahOmhuuW6j%WSjOWHuueOsOasoeaVsOebuOWQjOOAgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX3JlcGV0aXRpb25fbWF0dGVyc19sYWJlbCI6ICLooYzliJflvI:kuK3nmoTph43lpI3lvojph43opoHvvIzkvYbpobrluo:kuI3ph43opoEiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9yZXBldGl0aW9uX21hdHRlcnNfaGVscGVyX3RleHQiOiAi5aaC5p6c562U5qGI5piv5LiA5Liq5YWD57Sg6KGM5YiX5byP77yM5YiZ5a2m55Sf562U5qGI5Lit55qE5YWD57Sg5b%F6aG75LiO5q2j56Gu562U5qGI5Lit5Ye6546w55qE5qyh5pWw55u45ZCM77yM5L2G5LiN5LiA5a6a5Lul55u45ZCM55qE6aG65bqP5Ye6546w44CCIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fdW5yZXN0cmljdGVkX2xpc3RzX2xhYmVsIjogIuihjOWIl%W8j%S4reeahOmhuuW6j%WSjOmHjeWkjeaXoOWFs%e0p%imgSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX3VucmVzdHJpY3RlZF9saXN0c19oZWxwZXJfdGV4dCI6ICLlpoLmnpznrZTmoYjmmK:kuIDkuKrlhYPntKDooYzliJflvI:vvIzkuI3ogIPomZHlhbbpobrluo:lkozph43lpI3mnaXmr5TovoPlrabnlJ:nmoTnrZTmoYjlkozmraPnoa7nrZTmoYjjgIIiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9tYXRjaF9sZXR0ZXJfY2FzZV9sYWJlbCI6ICLljLnphY3lrZfmr43lpKflsI:lhpkiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9tYXRjaF9sZXR0ZXJfY2FzZV9oZWxwZXJfdGV4dCI6ICLlpKflsI:lhpnlrZfmr43lv4XpobvlrozlhajljLnphY3jgIIiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9tYXRjaF9zcGFjZXNfbGFiZWwiOiAi5Yy56YWN56m65qC8IiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fbWF0Y2hfc3BhY2VzX2hlbHBlcl90ZXh0IjogIuWtpueUn%etlOahiOS4reeahOepuuagvOW:hemhu%S4juato%ehruetlOahiOS4reeahOepuuagvOWujOWFqOebuOWQjOOAgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2VxdWl2YWxlbnRfZXF1YXRpb25zX2xhYmVsIjogIuetieS7t%aWueeoiyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2VxdWl2YWxlbnRfZXF1YXRpb25zX2hlbHBlcl90ZXh0IjogIuWtpueUn%etlOahiOWumuS5ieeahOaWueeoi%OAgeS4jeetieW8j%aIluezu%e7n%eahOino%mbhuS4juato%ehruetlOahiOWumuS5ieeahOino%mbhuebuOWQjOOAgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2FueV9hbnN3ZXJfbGFiZWwiOiAi5Lu75L2V562U5qGIIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fYW55X2Fuc3dlcl9oZWxwZXJfdGV4dCI6ICLljLnphY3miYDmnInlrabnlJ:nrZTmoYjjgILkvb:nlKjmraTpgInpobnlkJHlrabnlJ:lj43ppojplJnor6:nrZTmoYjjgIIiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9jdXN0b21fZ3JhZGluZ19mdW5jdGlvbl9sYWJlbCI6ICLoh6rlrprkuYnor4TliIblh73mlbAiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9jdXN0b21fZ3JhZGluZ19mdW5jdGlvbl9oZWxwZXJfdGV4dCI6ICLlnKjlrprkuYnpmo:mnLrlj5jph4:lkozlh73mlbDpnaLmnb:kuK3lrprkuYnmgqjoh6rlt7HnmoToh6rlrprkuYnlh73mlbDku6Xmo4Dmn6XlrabnlJ:nmoTnrZTmoYjjgIIiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9jdXN0b21fZ3JhZGluZ19mdW5jdGlvbl9uYW1lX2Ryb3Bkb3duX2xhYmVsIjogIuWHveaVsOWQjeensCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2N1c3RvbV9ncmFkaW5nX2Z1bmN0aW9uX2RlZmluZV9mdW5jdGlvbl9idXR0b25fbGFiZWwiOiAi5a6a5LmJ5LiA5Liq5paw5Ye95pWwIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fa2VlcF9hcmd1bWVudHNfdW5ldmFsdWF0ZWRfbGFiZWwiOiAi5L%d5oyB6Ieq5Y%Y6YeP5LiN6KKr6K%E5LywIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fa2VlcF9hcmd1bWVudHNfdW5ldmFsdWF0ZWRfaGVscGVyX3RleHQiOiAi5a2m55Sf562U5qGI5bCG5LiN5Lya6KKr6K%E5Lyw77yM5bm25bCG5L2c5Li6IENhbGNNZSDooajovr7lvI:mj5Dkvpvnu5nlh73mlbDjgILov5nmmK:kuIDkuKrpnZ7luLjpq5jnuqfnmoTlip:og73jgIIiLAoKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfdGl0bGUiOiAi5pWw5a2XIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfc3ltYm9saWNfYW5zd2VyX2xhYmVsIjogIuespuWPt%etlOahiCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3N5bWJvbGljX2Fuc3dlcl9oZWxwZXJfdGV4dCI6ICLkuI3lhYHorrjlsI:mlbDjgILnrZTmoYjlv4XpobvmmK:mlbTmlbDjgIHluLjph4:lkozlj5jph4:nmoTov5DnrpfjgIHliIbmlbDjgIHmoLnlkozlh73mlbDnmoTnu4TlkIjjgIIiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc190b2xlcmFuY2VfbGFiZWwiOiAi5YWs5beuIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfdG9sZXJhbmNlX2V4YWN0X2Fuc3dlcl9sYWJlbCI6ICLlh4bnoa7nrZTmoYgiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc190b2xlcmFuY2VfZXhhY3RfYW5zd2VyX2hlbHBlcl90ZXh0IjogIuWtpueUn%etlOahiOW:hemhu%S4juato%ehruetlOahiOWujOWFqOebuOWQjOOAgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3RvbGVyYW5jZV9lcnJvcl9tYXJnaW5fbGFiZWwiOiAi55m%5YiG5q%U6K%v5beuIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfdG9sZXJhbmNlX2Vycm9yX21hcmdpbl9oZWxwZXJfdGV4dCI6ICLlrabnlJ:nrZTmoYjlv4XpobvkuKXmoLzlnKjlhazlt67ljLrpl7TlhoXjgIIiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc190b2xlcmFuY2VfZXJyb3JfbWFyZ2luX2Ryb3Bkb3duX3BlcmNlbnRfZXJyb3JfbGFiZWwiOiAiJSDnmb7liIbmr5TplJnor68iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc190b2xlcmFuY2VfZXJyb3JfbWFyZ2luX2Ryb3Bkb3duX2Fic29sdXRlX2Vycm9yX2xhYmVsIjogIue7neWvueivr%W3riIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3RvbGVyYW5jZV9tYXRjaGluZ19kaWdpdHNfbGFiZWwiOiAi5Yy56YWN5pWw5L2NIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfdG9sZXJhbmNlX21hdGNoaW5nX2RpZ2l0c19oZWxwZXJfdGV4dCI6ICLlrabnlJ:nrZTmoYjnmoTnrKzkuIDkvY3mnInmlYjmlbDlrZfmiJblsI:mlbDmlbDkvY3lv4XpobvkuI7mraPnoa7nrZTmoYjljLnphY3jgIIiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc190b2xlcmFuY2VfbWF0Y2hpbmdfZGlnaXRzX2Ryb3Bkb3duX3NpZ25pZmljYW50X2ZpZ3VyZXNfbGFiZWwiOiAi5pyJ5pWI5pWw5a2XIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfdG9sZXJhbmNlX21hdGNoaW5nX2RpZ2l0c19kcm9wZG93bl9kZWNpbWFsX3BsYWNlc19sYWJlbCI6ICLlsI:mlbDmlbDkvY0iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc19mb3JtYXRfbGFiZWwiOiAi5qC85byPIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfZm9ybWF0X3NjaWVudGlmaWNfbm90YXRpb25fbGFiZWwiOiAi56eR5a2m6K6h5pWw5rOVIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfZm9ybWF0X3NjaWVudGlmaWNfbm90YXRpb25faGVscGVyX3RleHQiOiAi5a2m55Sf562U5qGI5Lit55qE5bCP5pWw5b%F6aG755So5qCH5YeG5YyW55qE56eR5a2m6K6h5pWw5rOV6KGo56S677yaIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfZm9ybWF0X2RlY2ltYWxfbm90YXRpb25fbGFiZWwiOiAi5bCP5pWw6KGo56S65rOVIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfZm9ybWF0X2RlY2ltYWxfbm90YXRpb25faGVscGVyX3RleHQiOiAi5bCP5pWw5b%F6aG75Lul5pmu6YCa5bCP5pWw6KGo56S65rOV6KGo56S677yaIDAuMDIyNCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX2Zvcm1hdF9hbnlfbm90YXRpb25fbGFiZWwiOiAi5Lu75L2V6KGo56S65rOVIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfZm9ybWF0X2FueV9ub3RhdGlvbl9oZWxwZXJfdGV4dCI6ICLlsI:mlbDlj6:ku6XnlKjnp5HlrabmiJblsI:mlbDorqHmlbDms5XooajnpLrjgIIiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc19wcmVjaXNpb25fbGFiZWwiOiAi57K%56Gu5bqmIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfcHJlY2lzaW9uX3ByZWNpc2lvbl9jaGVja19sYWJlbCI6ICLku44iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbnVtYmVyc19wcmVjaXNpb25fcHJlY2lzaW9uX2NoZWNrX2xhYmVsXzIiOiAi5YiwIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfcHJlY2lzaW9uX3ByZWNpc2lvbl9jaGVja19kcm9wZG93bl9zaWduaWZpY2FudF9maWd1cmVzX2xhYmVsIjogIuacieaViOaVsOWtlyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19udW1iZXJzX3ByZWNpc2lvbl9wcmVjaXNpb25fY2hlY2tfZHJvcGRvd25fZGVjaW1hbF9wbGFjZXNfbGFiZWwiOiAi5bCP5pWw5pWw5L2NIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX251bWJlcnNfcHJlY2lzaW9uX3ByZWNpc2lvbl9jaGVja19oZWxwZXJfdGV4dCI6ICLmo4Dmn6XlrabnlJ:nrZTmoYjlv4XpobvljIXlkKvnmoTmnIDlpJrlkozmnIDlsJHmnInmlYjmlbDlrZfmiJblsI:mlbDkvY3mlbDvvIzljIXmi6zlsL7pmo:pm7bjgIIiLAoKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX3RpdGxlIjogIuWMlueugCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zaW1wbGlmaWNhdGlvbl9nZW5lcmFsX2xhYmVsIjogIuS4gOiIrCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zaW1wbGlmaWNhdGlvbl9zaW1wbGlmaWVkX2xhYmVsIjogIuW3suWMlueugCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zaW1wbGlmaWNhdGlvbl9zaW1wbGlmaWVkX2hlbHBlcl90ZXh0IjogIuihqOi%vuW8j%S4jeiDvei:m%S4gOatpeWMlueugOOAguWMheaLrOWIhuaVsOOAgeW5guWSjOagueOAgeWkmumhueW8j%OAgeacieeQhuWHveaVsOOAgei2hei2iuWHveaVsOOAgeWwj%aVsC4uLi4uLiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zaW1wbGlmaWNhdGlvbl9leHBhbmRlZF9sYWJlbCI6ICLlt7LlsZXlvIAiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc2ltcGxpZmljYXRpb25fZXhwYW5kZWRfaGVscGVyX3RleHQiOiAi5omn6KGM5omA5pyJ5Y%v5Lul5a6M5oiQ55qE5pON5L2c44CC5LmY5rOV5YiG6YWN5b6L5ZKM566A5Y2V5YiG5pWw6L%Q566X44CCIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX2ZhY3RvcnNfbGFiZWwiOiAi5Zug5pWwIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX2ZhY3Rvcml6ZWRfbGFiZWwiOiAi5bey5YiG6KejIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX2ZhY3Rvcml6ZWRfaGVscGVyX3RleHQiOiAi5pW05pWw5oiW5aSa6aG55byP6KGo56S65Li657Sg5pWw55qE5LmY56ev44CCIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX2NvbW1vbl9mYWN0b3JfbGFiZWwiOiAi5YWs5Zug5pWwIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX2NvbW1vbl9mYWN0b3JfaGVscGVyX3RleHQiOiAi5bey5o%Q5Y%W5ZKM5pWw55qE5YWs5Zug5pWw44CCIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX2ZyYWN0aW9uc19sYWJlbCI6ICLliIbmlbAiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc2ltcGxpZmljYXRpb25fY29tbW9uX2Rlbm9taW5hdG9yX2xhYmVsIjogIuWFrOWIhuavjSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zaW1wbGlmaWNhdGlvbl9jb21tb25fZGVub21pbmF0b3JfaGVscGVyX3RleHQiOiAi5YiG5pWw5YyW5oiQ5Lul5pyA566A5YWs5YiG5q%N5Li65YiG5q%N55qE5YiG5pWw44CCIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX3Jvb3RzX2xhYmVsIjogIuaguSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zaW1wbGlmaWNhdGlvbl9yYXRpb25hbGl6ZWRfbGFiZWwiOiAi5pyJ55CG5YyWIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX3JhdGlvbmFsaXplZF9oZWxwZXJfdGV4dCI6ICLliIbmr43msqHmnInmoLnjgIIiLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc2ltcGxpZmljYXRpb25fbWluaW1hbF9yYWRpY2FuZHNfbGFiZWwiOiAi5pyA5bCP55qE6KKr5byA5pa55pWwIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3NpbXBsaWZpY2F0aW9uX21pbmltYWxfcmFkaWNhbmRzX2hlbHBlcl90ZXh0IjogIuiiq%W8gOaWueaVsOS4reS4jeWQq%WvueS6juagueaMh%aVsOiDveW8gOW%l%WwveaWueeahOWboOaVsOaIluWboOW8j%%8jOWboOatpOaXoOazleWMlueugOOAgiIsCgoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbWVhc3VyZV91bml0c190aXRsZSI6ICLorqHph4:ljZXkvY0iLAoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfbWVhc3VyZV91bml0c19tYXRjaF91bml0X2xhYmVsIjogIuWMuemFjeiuoemHj%WNleS9jSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19tZWFzdXJlX3VuaXRzX21hdGNoX3VuaXRfaGVscGVyX3RleHQiOiAi5a2m55Sf562U5qGI55qE6K6h6YeP5Y2V5L2N5b%F6aG75LiO5q2j56Gu562U5qGI55u45ZCM44CCIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX21lYXN1cmVfdW5pdHNfYWxsb3dfb3RoZXJfcHJlZml4ZXNfbGFiZWwiOiAi5YWB6K645YW25LuW5YmN57yAIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX21lYXN1cmVfdW5pdHNfYWxsb3dfb3RoZXJfcHJlZml4ZXNfaGVscGVyX3RleHQiOiAi5YWB6K645a2m55Sf562U5qGI55qE6K6h6YeP5Y2V5L2N5LiO5q2j56Gu562U5qGI5pyJ5LiN5ZCM55qE5YmN57yA44CCIiwKCgoJCSJxdWl6emVzX3N0dWRpb19ncmFwaF92YWxpZGF0aW9uX29wdGlvbnNfZWxlbWVudHNfdGl0bGUiOiAi5YWD57SgIiwKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX2NyaXRlcmlhX3RpdGxlIjogIuagh%WHhiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2dyYXBoX3ZhbGlkYXRpb25fb3B0aW9uc190b2xlcmFuY2VfdGl0bGUiOiAi5YWs5beuIiwKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX3RvbGVyYW5jZV9oZWxwZXIiOiAi6K6%572u5a2m55Sf562U5qGI5ZKM5q2j56Gu562U5qGI5LmL6Ze05YWB6K6455qE6K%v5beu6YeP44CCIiwKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX2VsZW1lbnRzX3N1YnRpdGxlIjogIumAieaLqeimgeivhOS8sOeahOetlOahiOS4reeahOWFg%e0oCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2dyYXBoX3ZhbGlkYXRpb25fb3B0aW9uc19zdXBlcmZsdW91c190ZXh0IjogIuemgeatouWtpueUn%etlOahiOS4reWHuueOsOWkmuS9meeahOWFg%e0oCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2dyYXBoX3ZhbGlkYXRpb25fb3B0aW9uc19zdXBlcmZsdW91c19oZWxwZXIiOiAi5a2m55Sf562U5qGI5Lit55qE5YWD57Sg5LiN6IO95aSa5LqO5q2j56Gu562U5qGI5Lit5a2Y5Zyo55qE5YWD57Sg44CCIiwKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX2NvbG9yX3RleHQiOiAi5Yy56YWN6aKc6ImyIiwKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX2NvbG9yX2hlbHBlciI6ICLlrabnlJ:nrZTmoYjkuK3nmoTlhYPntKDlv4XpobvkuI7mraPnoa7nrZTmoYjkuK3nmoTlhYPntKDpopzoibLnm7jlkIzjgIIiLAoJCSJxdWl6emVzX3N0dWRpb19ncmFwaF92YWxpZGF0aW9uX29wdGlvbnNfbGluZV90eXBlX3RleHQiOiAi5Yy56YWN57q:5Z6LIiwKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX2xpbmVfdHlwZV9oZWxwZXIiOiAi5a2m55Sf562U5qGI5Lit55qE5YWD57Sg5b%F6aG75LiO5q2j56Gu562U5qGI5Lit55qE5YWD57Sg5YW35pyJ55u45ZCM55qE57q:5Z6L77yI5a6e57q:44CB6Jma57q:77yJ44CCIiwKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX3NlbGVjdG9yX3NlbGVjdF9hbGwiOiAi5omA5pyJ5YWD57SgIiwKCQkicXVpenplc19zdHVkaW9fZ3JhcGhfdmFsaWRhdGlvbl9vcHRpb25zX3NlbGVjdG9yX2Rpc3RyaWJ1dGVfZ3JhZGVzIjogIuWIhumFjeivhOWIhiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2dyYXBoX3ZhbGlkYXRpb25fb3B0aW9uc19sb2FkaW5nX2VsZW1lbnRzX2Vycm9yIjogIuWKoOi9veWbvuW9oumqjOivgeWFg%e0oOaXtuWHuumUmeOAguivt%mHjeivleOAgiIsCgoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYWxjbWVfbGFiZWwiOiAi57yW5YaZ566X5rOV5p2l5Yib5bu66ZqP5py65Y%Y6YeP44CB5pWw5a2X44CB6KGo6L6%5byP44CB5Zu%6KGo5oiW6K%E5YiG5Ye95pWw77yaIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX2FsZ29yaXRobV9sYW5ndWFnZV9sYWJlbCI6ICLnrpfms5Xor63oqIAiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfbGFiZWwiOiAi6L6T5Ye65Y%Y6YeP6KGo56S65rOVIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX2hlbHBlcl90ZXh0IjogIuekuuS%i%%8miIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19leHByZXNzaW9uX2Zvcm1hdF9sYWJlbCI6ICLooajovr7moLzlvI8iLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfaW1hZ2luYXJ5X3VuaXRfbGFiZWwiOiAi6Jma5pWw5Y2V5L2NIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX2ltYWdpbmFyeV91bml0X2lfbGFiZWwiOiAiaSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19pbWFnaW5hcnlfdW5pdF9qX2xhYmVsIjogImoiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfdGltZXNfb3BlcmF0b3JfbGFiZWwiOiAi5LmY5Y%36L%Q566X56ymIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX3RpbWVzX29wZXJhdG9yX2RvdF9sYWJlbCI6ICJCNyDngrkiLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfdGltZXNfb3BlcmF0b3JfY3Jvc3NfbGFiZWwiOiAiQyDlj4nlj7ciLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfdGltZXNfb3BlcmF0b3JfaW52aXNpYmxlX2xhYmVsIjogIumakOW8jyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19udW1iZXJfZm9ybWF0X2xhYmVsIjogIuaVsOWtl%agvOW8jyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19wcmVjaXNpb25fbGFiZWwiOiAi57K%56Gu5bqm57G75Z6LIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX3ByZWNpc2lvbl9kcm9wZG93bl9zaWduaWZpY2FudF9maWd1cmVzX2xhYmVsIjogIuacieaViOaVsOWtlyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19wcmVjaXNpb25fZHJvcGRvd25fZGVjaW1hbF9wbGFjZXNfbGFiZWwiOiAi5bCP5pWw5pWw5L2NIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX25vdGF0aW9uX2xhYmVsIjogIui%k%WHuuihqOekuuazlSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19ub3RhdGlvbl9kZWNpbWFsX2xhYmVsIjogIuWwj%aVsCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19ub3RhdGlvbl9zY2llbnRpZmljX2xhYmVsIjogIuenkeWtpiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19ub3RhdGlvbl9hdXRvX2xhYmVsIjogIuiHquWKqCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19kZWNpbWFsX2xhYmVsIjogIuWwj%aVsOWIhumalOespiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19kZWNpbWFsX2NvbW1hX2xhYmVsIjogIumAl%WPtyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc19kZWNpbWFsX3BvaW50X2xhYmVsIjogIueCuSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc190aG91c2FuZHNfbGFiZWwiOiAi5pWw5L2N57uE5YiG6ZqU56ymIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX3Rob3VzYW5kc19ub25lX2xhYmVsIjogIuaXoCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19vdXRwdXRfdmFyaWFibGVfb3B0aW9uc190aG91c2FuZHNfc3BhY2VfbGFiZWwiOiAi56m65qC8IiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX291dHB1dF92YXJpYWJsZV9vcHRpb25zX3Rob3VzYW5kc19jb21tYV9sYWJlbCI6ICLpgJflj7ciLAoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfb3V0cHV0X3ZhcmlhYmxlX29wdGlvbnNfdGhvdXNhbmRzX3BvaW50X2xhYmVsIjogIueCuSIsCgoJCSJxdWl6emVzX3N0dWRpb19hdXhpbGlhcl9pbml0aWFsX2NvbnRlbnRfY2FsY21lX2xhYmVsIjogIue8luWGmeWtpueUn%i%heWKqSBDYWxjTWUg6K6h566X5Zmo55qE5Yid5aeL5YaF5a6577yaIiwKCQkKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9jb3JyZWN0X2Fuc3dlcl9sYWJlbCI6ICLmraPnoa7nrZTmoYgiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX2NvcnJlY3RfYW5zd2VyX3JlZ2VuZXJhdGVfYW5zd2VyX2J1dHRvbl9sYWJlbCI6ICLph43mlrDnlJ:miJDnrZTmoYgiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX2NvcnJlY3RfYW5zd2VyX2NvcHlfYW5zd2VyX2J1dHRvbl9sYWJlbCI6ICLlpI3liLbnrZTmoYgiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2xhYmVsIjogIuWtpueUn%etlOahiCIsCgoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2xhYmVsIjogIuiuvue9ruWtpueUn%etlOahiOS7peafpeeci%WPjemmiCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfY29ycmVjdF9sYWJlbCI6ICLmraPnoa4iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX3BhcnRpYWxseV9jb3JyZWN0X2xhYmVsIjogIumDqOWIhuato%ehriIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfaW5jb3JyZWN0X2xhYmVsIjogIuS4jeato%ehriIsCgoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9zeW50YXhfbWF0aF9sYWJlbCI6ICLmlbDlrabmoLzlvI8iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9zeW50YXhfZ3JhcGhpY19sYWJlbCI6ICLlm77lvaLmoLzlvI8iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9zeW50YXhfc3RyaW5nX2xhYmVsIjogIuaWh%acrOagvOW8jyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2VxdWl2YWxlbnRfbGl0ZXJhbF9sYWJlbCI6ICLlrozlhajnm7jlkIwiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9lcXVpdmFsZW50X3N5bWJvbGljX2xhYmVsIjogIuaVsOWtpuS4iuebuOetiSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2VxdWl2YWxlbnRfZXF1YXRpb25zX2xhYmVsIjogIuetieS7t%aWueeoiyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2VxdWl2YWxlbnRfYWxsX2xhYmVsIjogIuS7u%S9leetlOahiCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2VxdWl2YWxlbnRfZnVuY3Rpb25fbGFiZWwiOiAi6K%E5YiG5Ye95pWwIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fZXF1aXZhbGVudF9ncmFwaGljX2xhYmVsIjogIuWHoOS9leS4iuebuOetiSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2NoZWNrX3NpbXBsaWZpZWRfbGFiZWwiOiAi5bey5YyW566AIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfZXhwYW5kZWRfbGFiZWwiOiAi5bey5bGV5byAIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfZmFjdG9yaXplZF9sYWJlbCI6ICLlt7LliIbop6MiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19yYXRpb25hbGl6ZWRfbGFiZWwiOiAi5pyJ55CG5YyWIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfbm9fY29tbW9uX2ZhY3Rvcl9sYWJlbCI6ICLml6Dlhazlm6DmlbAiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19taW5pbWFsX3JhZGljYW5kc19sYWJlbCI6ICLmnIDlsI:nmoTooqvlvIDmlrnmlbAiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19jb21tb25fZGVub21pbmF0b3JfbGFiZWwiOiAi5YWs5YiG5q%NIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfc2NpZW50aWZpY19ub3RhdGlvbl9sYWJlbCI6ICLnp5HlraborqHmlbDms5UiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19kZWNpbWFsX25vdGF0aW9uX2xhYmVsIjogIuWwj%aVsOihqOekuuazlSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2NoZWNrX3N5bWJvbGljX2xhYmVsIjogIuespuWPt%etlOahiCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2NoZWNrX3ByZWNpc2lvbl9sYWJlbCI6ICLku44gJHttaW59IOWIsCAke21heH0gJHtyZWxhdGl2ZX0iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19wcmVjaXNpb25fbWluX2xhYmVsIjogIuiHs%WwkSAke21pbn0gJHtyZWxhdGl2ZX0iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19wcmVjaXNpb25fbWF4X2xhYmVsIjogIuiHs%WkmiAke21heH0gJHtyZWxhdGl2ZX0iLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19wcmVjaXNpb25fZXF1YWxfbGFiZWwiOiAiJHttaW59ICR7cmVsYXRpdmV9IiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfcHJlY2lzaW9uX2RlY2ltYWxfcGxhY2VzX2xhYmVsIjogIuWwj%aVsOaVsOS9jSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2NoZWNrX3ByZWNpc2lvbl9zaWduaWZpY2FudF9maWd1cmVzX2xhYmVsIjogIuacieaViOaVsOWtlyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3Rlc3RfcXVlc3Rpb25fc3R1ZGVudF9hbnN3ZXJfZmVlZGJhY2tfYXNzZXJ0aW9uX2NoZWNrX2VxdWl2YWxlbnRfdW5pdHNfbGFiZWwiOiAi5Yy56YWN6K6h6YeP5Y2V5L2NIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfbm9fc3VwZXJmbHVvdXNfbGFiZWwiOiAi5peg5aSa5L2Z5YWD57SgIiwKCQkicXVpenplc19zdHVkaW9fdGVzdF9xdWVzdGlvbl9zdHVkZW50X2Fuc3dlcl9mZWVkYmFja19hc3NlcnRpb25fY2hlY2tfY29sb3JfbGFiZWwiOiAi6aKc6ImyIiwKICAJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9jaGVja19saW5lc3R5bGVfbGFiZWwiOiAi57q:5Z6LIiwKCgoJCSJxdWl6emVzX3N0dWRpb192aWV3X3NvdXJjZV9xdWVzdGlvbl94bWxfbGFiZWwiOiAi6Zeu6aKYIFhNTCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZpZXdfc291cmNlX2dyYW1tYXJfdXJsX2xhYmVsIjogIuivreazlSBVUkwiLAoJCSJxdWl6emVzX3N0dWRpb192aWV3X3NvdXJjZV9yZXNlcnZlZF93b3Jkc19sYWJlbCI6ICLkv53nlZnor40iLAoKCQkicXVpenplc19zdHVkaW9fc3VtbWFyeV90aXRsZSI6ICLpqozor4Hlkozlj5jph48iLAoJCSJxdWl6emVzX3N0dWRpb19zdW1tYXJ5X2lucHV0X21ldGhvZF90aXRsZSI6ICLovpPlhaXms5UiLAoJCSJxdWl6emVzX3N0dWRpb19zdW1tYXJ5X2FsbG93ZWRfaW5wdXRfdGl0bGUiOiAi5YWB6K6455qE6L6T5YWlIiwKCQkicXVpenplc19zdHVkaW9fc3VtbWFyeV9jb21wYXJpc29uX3RpdGxlIjogIuavlOi%gyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3N1bW1hcnlfcHJvcGVydGllc190aXRsZSI6ICLlsZ7mgKciLAoJCSJxdWl6emVzX3N0dWRpb19zdW1tYXJ5X3ZhcmlhYmxlc190aXRsZSI6ICLlj5jph48iLAoKCQkicXVpenplc19zdHVkaW9fc3VtbWFyeV9mcm9tX3ByZWNpc2lvbl9sYWJlbCI6ICLku44iLAoJCSJxdWl6emVzX3N0dWRpb19zdW1tYXJ5X3VwX3RvX3ByZWNpc2lvbl9sYWJlbCI6ICLliLAiLAoJCSJxdWl6emVzX3N0dWRpb19zdW1tYXJ5X3NpZ25pZmljYW50X2ZpZ3VyZXNfbGFiZWwiOiAi5pyJ5pWI5pWw5a2XIiwKCQkicXVpenplc19zdHVkaW9fc3VtbWFyeV9kZWNpbWFsX3BsYWNlc19sYWJlbCI6ICLlsI:mlbDmlbDkvY0iLAoJCSJxdWl6emVzX3N0dWRpb19zdW1tYXJ5X3BlcmNlbnRfZXJyb3JfbGFiZWwiOiAiJSDnmb7liIbmr5TplJnor68iLAoJCSJxdWl6emVzX3N0dWRpb19zdW1tYXJ5X2Fic29sdXRlX2Vycm9yX2xhYmVsIjogIue7neWvueivr%W3riIsCgkJInF1aXp6ZXNfc3R1ZGlvX3N1bW1hcnlfaW5saW5lX2hhbmRfbGFiZWwiOiAiTWF0aFR5cGUg5bWM5YWl5omL5YaZIiwKCQkicXVpenplc19zdHVkaW9fc3VtbWFyeV9wcmVjaXNpb25fbGFiZWwiOiAi57K%56Gu5bqmIiwKCQkicXVpenplc19zdHVkaW9fc3VtbWFyeV9oYXNfYWxnb3JpdGhtX2xhYmVsIjogIuWFt%acieeul%azlSIsCgoJCSJxdWl6emVzX3N0dWRpb19pbXBvcnRfZGlhbG9nX3RpdGxlIjogIuWvvOWFpemXrumimO%8nyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2ltcG9ydF9kaWFsb2dfbGFiZWwiOiAi5oKo5Y2z5bCG5omT5byA55qE6Zeu6aKY5YyF5ZCr5bey5byD55So55qE5Yqf6IO944CC5a%85YWl6L%H56iL5Y%v6IO95Lya56iN5b6u5pS55Y%Y6Zeu6aKY55qE6KGo546w44CC5by654OI5bu66K6u5oKo5Zyo5a%85YWl5ZCO5LuU57uG5rWL6K%V6Zeu6aKY44CCIiwKCQkicXVpenplc19zdHVkaW9faW1wb3J0X2RpYWxvZ19jb25maXJtX2J1dHRvbl9sYWJlbCI6ICLmjqXlj5ciLAoJCSJxdWl6emVzX3N0dWRpb19pbXBvcnRfZGlhbG9nX2NhbmNlbF9idXR0b25fbGFiZWwiOiAi5Y%W5raIIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX3JlbGV2YW50X29wdGlvbnNfZGlhbG9nX3RpdGxlIjogIumAiemhueS4jeWFvOWuuSIsCgkJInF1aXp6ZXNfc3R1ZGlvX3JlbGV2YW50X29wdGlvbnNfZGlhbG9nX2xhYmVsIjogIuaJgOmAiemAiemhueS4juaCqOeahOato%ehruetlOahiOS4reaOqOWumueahOaWreiogOS4jeWFvOWuueOAguaCqOehruWumuimgee7p%e7reWQl%%8nyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3JlbGV2YW50X29wdGlvbnNfZGlhbG9nX2NvbmZpcm1fYnV0dG9uX2xhYmVsIjogIuaYryIsCgkJInF1aXp6ZXNfc3R1ZGlvX3JlbGV2YW50X29wdGlvbnNfZGlhbG9nX2NhbmNlbF9idXR0b25fbGFiZWwiOiAi5ZCmIiwKCgkJImFuc3dlcl9maWVsZF9tYXRodHlwZV9wb3B1cF9idXR0b25fdG9vbHRpcCI6ICLmiZPlvIAgTWF0aFR5cGUg5pWw5a2m57yW6L6R5ZmoIiwKCQkKCQkicG9wdXBfdGV4dF9maWVsZF93YXJuaW5nX3RpdGxlIjogIuacquS:neWtmOeahOabtOaUuSIsCgkJInBvcHVwX3RleHRfZmllbGRfd2FybmluZ19tZXNzYWdlIjogIuWmguaenOWFs%mXreatpOeql%WPo%%8jOaCqOWwhuS4ouWkseaJgOacieacquS:neWtmOeahOabtOaUueOAguaCqOehruWumuimgee7p%e7reWQl%%8nyIsCgkJInBvcHVwX3RleHRfZmllbGRfd2FybmluZ19hY2NlcHRfYnV0dG9uX2xhYmVsIjogIuaOpeWPlyIsCgkJInBvcHVwX3RleHRfZmllbGRfd2FybmluZ19jYW5jZWxfYnV0dG9uX2xhYmVsIjogIuWPlua2iCIsCgkJInBvcHVwX3RleHRfZmllbGRfd2FybmluZ19zYXZlX2FuZF9jbG9zZV9idXR0b25fbGFiZWwiOiAi5L%d5a2YICYg5YWz6ZetIiwKCQkicG9wdXBfdGV4dF9maWVsZF93YXJuaW5nX2Nsb3NlX3dpdGhvdXRfc2F2aW5nX2J1dHRvbl9sYWJlbCI6ICLkuI3kv53lrZjlhbPpl60iLAoJCQoJCSJjbGlja3RvZWRpdGFsZ29yaXRobSI6ICLngrnlh7vmjInpkq7kuIvovb3lubbov5DooYwgV2lyaXMgQ0FTIOW6lOeUqOeoi%W6j%S7pee8lui%kemXrumimOeul%azleOAgiIsCgkJInJ1bmNhbGN1bGF0b3IiOiAi6L%Q6KGM6K6h566X5ZmoIiwKCQkiY2xpY2t0b3J1bmNhbGN1bGF0b3IiOiAi54K55Ye75oyJ6ZKu5LiL6L295bm26L%Q6KGMIFdpcmlzIENBUyDlupTnlKjnqIvluo:vvIzku6Xkvr:ov5vooYzmiYDpnIDnmoTorqHnrpfjgIIiLAoJCSJzZW5kaW5naW5pdGlhbHNlc3Npb24iOiAi5Y%R6YCB5Yid5aeL5Lya6K%dLi4uLi4uIiwKCQkid2FpdGluZ2ZvcnVwZGF0ZXMiOiAi562J5b6F5pu05pawLi4uLi4uIiwKCQkic2Vzc2lvbmNsb3NlZCI6ICLmiYDmnInmm7TmlLnlt7Lkv53lrZgiLAoJCSJnb3RzZXNzaW9uIjogIuabtOaUueW3suS:neWtmO%8iOS:ruiuoiAke25977yJ44CCIiwKCQkic2hvd2NhcyI6ICLkvb:nlKggV2lyaXMgQ0FTIiwKCQkic2hvd2NhbGNtZSI6ICLkvb:nlKggQ2FsY01lIiwKCQkibGVhcm5tb3JlIjogIuS6huino%abtOWkmiIsCgoKCQkiY2F0YWxhbiI6ICJDYXRhbMOgIiwKCQkiZW5nbGlzaCI6ICJFbmdsaXNoIiwKCQkic3BhbmlzaCI6ICJFc3Bhw7FvbCIsCgkJImVzdGlvbmlhbiI6ICJFZXN0aSIsCgkJImJhc3F1ZSI6ICJFdXNrYXJhIiwKCQkiZnJlbmNoIjogIkZyYW7Dp2FpcyIsCgkJImdlcm1hbiI6ICJEZXV0c2NoIiwKCQkiaXRhbGlhbiI6ICJJdGFsaWFubyIsCgkJImR1dGNoIjogIk5lZGVybGFuZHMiLAoJCSJwb3J0dWd1ZXNlIjogIlBvcnR1Z3XDqnMgKFBvcnR1Z2FsKSIsCgoJCSJxdWl6emVzX3N0dWRpb192YXJpYWJsZXNfb3B0aW9uc19jYXNfYWxnb3JpdGhtX2NvbnZlcnRfdG9fY2FsY21lX2J1dHRvbl9sYWJlbCI6ICLovazmjaLkuLogQ2FsY01lIiwKCQkicXVpenplc19zdHVkaW9fdmFyaWFibGVzX29wdGlvbnNfY2FzX2FsZ29yaXRobV9jb252ZXJ0X3RvX2NhbGNtZV9kZXNjcmlwdGlvbl9sYWJlbCI6ICLpl67popjnrpfms5XlsIbku44gV2lyaXMgQ0FTIOWvvOWFpeWIsOaIkeS7rOeahOaWsOeul%azlee8lui%keWZqCBDYWxjTWUg5Lit44CC55Sf5oiQ55qE566X5rOV5b%F6aG75omL5Yqo5L%u5pS55ZKM5rWL6K%V44CC5a%85YWl5YiwIENhbGNNZSDnmoTnrpfms5Xml6Dms5Xlho3kvb:nlKggV2lyaXMgQ0FTIOaJk%W8gOOAguWmguaenOaCqOWcqOaOpeWPl%WQjuaDs%aSpOa2iOWvvOWFpe%8jOivt%S4jeimgeS:neWtmOmXrumimO%8muWcqCBXaXJpcyBRdWl6emVzIFN0dWRpbyDnqpflj6Pngrnlh7vlj5bmtojlubblho3mrKHlsIblhbbmiZPlvIDjgILlr7nkuo7ljIXlkKvnvJbnqIvpgLvovpHnmoTlpI3mnYLnrpfms5XvvIzor7fkvb:nlKggXCLovazmjaLkuLrnrpfms5VcIumAiemhue%8jOS7peWunueOsOabtOWKoOWHuuiJsueahOaAp%iDveWSjOaYk%eUqOaAp%OAgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhcmlhYmxlc19vcHRpb25zX2Nhc19hbGdvcml0aG1fY29udmVydF90b19hbGdvcml0aG1fZGVzY3JpcHRpb25fbGFiZWwiOiAi6L2s5o2i5Li6566X5rOVIiwKCgkJImFuc3dlcl9maWVsZF9tYXRodHlwZV9wb3B1cF9hY2NlcHRfZGlhbG9nIjogIuaOpeWPlyIsCgkJImFuc3dlcl9maWVsZF9tYXRodHlwZV9wb3B1cF9jYW5jZWxfZGlhbG9nIjogIuWPlua2iCIsCgkJCgkJInN5bnRheF9ncmFwaGljIjogIuWbvuW9oiIsCgkJInN5bnRheF9ncmFwaGljX2Rlc2NyaXB0aW9uIiA6Iu%8iOWbvuihqOOAgeWHoOS9leWFg%e0oOKApuKApu%8iSIsCgkJInN5bnRheF9ncmFwaGljX2NvcmVjdF9mZWVkYmFjayI6ICLnrZTmoYjmoLzlvI:mraPnoa4iLAoJCgkJImNoZWNrX2NvbG9yIjogIuWMuemFjeminOiJsiIsCgkJImNoZWNrX2xpbmVzdHlsZSI6ICLljLnphY3nur:lnosiLAoJCSJjaGVja19ub19zdXBlcmZsdW91cyI6ICLkuI3ljIXlkKvlpJrkvZnlhYPntKAiLAoJCgkJImVxdWl2YWxlbnRfZ3JhcGhpYyI6ICLlh6DkvZXkuIrnm7jnrYkiLAoJCSJlcXVpdmFsZW50X2dyYXBoaWNfY29ycmVjdF9mZWVkYmFjayI6ICLnrZTmoYjlh6DkvZXkuIrnm7jnrYkiLAoKCQkicGFyYW1ldGVyIjogIuWPguaVsCIsCgkJImFuc3dlciI6ICLnrZTmoYgiLAoKCQkicXVpenplc19zdHVkaW9faG9tZV9jb3B5X2luaXRpYWxfY29udGVudF9idXR0b25fdGV4dCI6ICLoh6rliJ3lp4vlhoXlrrnlpI3liLYiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2NvcHlfY29ycmVjdF9hbnN3ZXJfYnV0dG9uX3RleHQiOiAi6Ieq5q2j56Gu562U5qGI5aSN5Yi2IiwKCQkicXVpenplc19zdHVkaW9faG9tZV9hbnN3ZXJfdHlwZV9nZW9tZXRyeV9sYWJlbCI6ICLnu5jlm77lmagiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2Fuc3dlcl90eXBlX3N0YXRpc3RpY2FsX2NoYXJ0c19sYWJlbCI6ICLnu5:orqHlm77ooagiLAoJCQoJCSJxdWl6emVzX3N0dWRpb19ob21lX2NvcnJlY3RfYW5zd2VyX2Rlc2NyaXB0aW9uX21hdGgiOiAi6L6T5YWl5q2k6Zeu6aKY55qE5q2j56Gu562U5qGI44CC5oKo5Y%v5Lul5L2:55So6aqM6K%B6YCJ6aG56I%c5Y2V5L%u5pS555So5LqO5bCG5YW25LiO5a2m55Sf562U5qGI6L%b6KGM5q%U6L6D55qE5qCH5YeG44CCIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9jb3JyZWN0X2Fuc3dlcl9kZXNjcmlwdGlvbl9ncmFwaGljIjogIui%k%WFpeatpOmXrumimOeahOato%ehruetlOahiOOAguaCqOWPr%S7peS9v%eUqOiuvue9ruiPnOWNleS:ruaUueWFtuS4juWtpueUn%etlOahiOeahOavlOi%g%aWueW8j%S7peWPiuWvueWTquS6m%WFg%e0oOi:m%ihjOivhOWIhuOAgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfY29ycmVjdF9hbnN3ZXJfZGVzY3JpcHRpb25fdGV4dCI6ICLovpPlhaXmraTpl67popjnmoTmraPnoa7nrZTmoYjjgILmgqjlj6:ku6Xkvb:nlKjpqozor4HpgInpobnoj5zljZXkv67mlLnnlKjkuo7lsIblhbbkuI7lrabnlJ:nrZTmoYjov5vooYzmr5TovoPnmoTmoIflh4bjgIIiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2luaXRpYWxfY29udGVudF9kZXNjcmlwdGlvbl9tYXRoIjogIui:meaYr%aCqOeahOWtpueUn%WcqOWwneivleino%etlOivpemXrumimOaXtuWwhueci%WIsOeahOaVsOWtpue8lui%keWZqOeahOWIneWni%eKtuaAgeOAgui:meagt%aCqOWPr%S7peS4uuS7luS7rOeahOetlOahiOaPkOS%m%S4gOenjee7k%aehOaIlumcgOimgeWhq%WGmeeahOepuueZveOAgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfaW5pdGlhbF9jb250ZW50X2Rlc2NyaXB0aW9uX2dyYXBoaWMiOiAi6L%Z5piv5oKo55qE5a2m55Sf5Zyo5bCd6K%V6Kej562U6K%l6Zeu6aKY5pe25bCG55yL5Yiw55qE5Zu%6KGo57yW6L6R5Zmo55qE5Yid5aeL54q25oCB44CC5oKo5Y%v5Lul6Ieq5a6a5LmJ5LuW5Lus5bCG5Zyo6L6T5YWl6YCJ6aG55Lit55yL5Yiw55qE5bel5YW35qCP5YWD57Sg44CCIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9pbml0aWFsX2NvbnRlbnRfZGVzY3JpcHRpb25fdGV4dCI6ICLov5nmmK:mgqjnmoTlrabnlJ:lnKjlsJ3or5Xop6PnrZTor6Xpl67popjml7blsIbnnIvliLDnmoTmlofmnKznvJbovpHlmajnmoTliJ3lp4vnirbmgIHjgILmraTnrZTmoYjnsbvlnovkuI3lgZrmlbDlrabor4TkvLDjgIIiLAoJCQkJCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcHJvZHVjdF9tZXNzYWdlX2hlYWRlcl9sYWJlbCI6ICLmgqjmraPlnKjkvb:nlKggV2lyaXNRdWl6emVzIDQuNiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcHJvZHVjdF9tZXNzYWdlX3RleHRfbGFiZWwiOiAi5oKo546w5Zyo5Y%v5Lul5Lqr5Y%X5oiR5Lus5paw55qE6ZqP5py65Y%Y6YeP5Yqf6IO977yM6K%l5Yqf6IO95YWB6K645oKo5Lul5pu05b%r44CB5pu055u05o6l55qE5pa55byP5Yib5bu65Yqo5oCB6Zeu6aKY44CCIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9wcm9kdWN0X21lc3NhZ2VfcmVsZWFzZV9ub3Rlc19saW5rIjogIuafpeeci%aIkeS7rOeahOWPkeihjOivtOaYjuOAgiIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcHJvZHVjdF9tZXNzYWdlX2dpdmVfdXNfZmVlZGJhY2tfbGluayI6ICLlkJHmiJHku6zmj5DkvpvmgqjnmoTlj43ppojjgIIiLAkJCgoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfaW5pdGlhbF9jb250ZW50X2xhYmVsIjogIuWIneWni%WGheWuuSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9sb2NrX2luaXRpYWxfY29udGVudF9sYWJlbCI6ICLplIHlrprliJ3lp4vlhoXlrrkiLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfbG9ja19pbml0aWFsX2NvbnRlbnRfaGVscGVyX3RleHQiOiAi5LiN5YWB6K645a2m55Sf5Zyo5Yid5aeL5YaF5a655Lit55WZ5LiL55qE56m65Y2g5L2N56ym5LmL5aSW5L%u5pS5562U5qGI44CC5aaC5p6c5ZCv55So5q2k6K6%572u77yM5a2m55Sf5bCG5Y%q6IO95aGr5YaZ5Yid5aeL5YaF5a6555qE5pa55qGG44CCIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9kaXNwbGF5X3NldHRpbmdzX2xhYmVsIjogIuaYvuekuuiuvue9riIsCgkJInF1aXp6ZXNfc3R1ZGlvX2lucHV0X29wdGlvbnNfYW5zd2VyX2lucHV0X21ldGhvZF9kaXNwbGF5X3NldHRpbmdzX2xhYmVsX25hbWUiOiAi5qCH562%5ZCN56ew55qE5Y%v6KeB5oCnIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX2Rpc3BsYXlfc2V0dGluZ3NfbGFiZWxfdmFsdWUiOiAi5qCH562%5YC855qE5Y%v6KeB5oCnIiwKCQkicXVpenplc19zdHVkaW9faW5wdXRfb3B0aW9uc19hbnN3ZXJfaW5wdXRfbWV0aG9kX2Rpc3BsYXlfc2V0dGluZ3NfaGVscGVyX3RleHQiOiAi6YCJ5oup5qCH562%5ZCN56ew5ZKM5YC855qE5pi%56S66K6%572u44CC5oKo5Y%v5Lul6YCJ5oup5qCH562%5YC85a%55a2m55Sf55qE5pi%56S65pa55byP77ya5aeL57uI5pi%56S644CB5LuO5LiN5pi%56S65oiW5YWz5rOo5pe25pi%56S644CCIiwKCQkiYWx3YXlzIjogIuWni%e7iCIsCgkJImZvY3VzIjogIuWFs%azqCIsCgkJIm5ldmVyIjogIuS7juS4jSIsCgoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfbWFnbmV0aWNfZ3JpZF9sYWJlbCI6ICLno4HmoIXorr7nva4iLAoJCSJxdWl6emVzX3N0dWRpb19pbnB1dF9vcHRpb25zX2Fuc3dlcl9pbnB1dF9tZXRob2RfbWFnbmV0aWNfZ3JpZF9sYWJlbF90ZXh0IjogIuS4uuWtpueUn%etlOahiOWtl%autemAieaLqeejgeaghemAiemhueOAgiIsCgkJImZvcmNlIjogIuWKmyIsCgkJInNuYXAiOiAi5b%r54WnIiwKCQkiZGlzYWJsZWQiOiAi5bey56aB55SoIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlc190aXRsZSI6ICLpmo:mnLrlj5jph48iLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZXNfdGl0bGVfYmFzaWNfbW9kZSI6ICLln7rmnKzmqKHlvI8iLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2FkdmFuY2VkX3JhbmRvbV92YXJpYWJsZXNfYnV0dG9uX3RleHQiOiAi6auY57qn5qih5byPIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9hZHZhbmNlZF9yYW5kb21fdmFyaWFibGVzX2J1dHRvbl90ZXh0X3N0cmluZ19zeW50YXgiOiAi6ZqP5py65Y%Y6YePIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVzX2Rlc2NyaXB0aW9uX3RleHQiOiAi6YCa6L%H5Zyo6Zeu6aKY6ZmI6L%w5Lit5re75Yqg6ZqP5py65Y%Y6YeP77yM5L2:5oKo55qE6Zeu6aKY5Yqo5oCB5YyW44CC5LiN6KaB5b%Y6K6w5Zyo5q2j56Gu562U5qGI5Lit5re75Yqg6L%Z5Lqb5Y%Y6YeP77yM5aaC5p6c5oKo5biM5pyb5a6D5Lus5pi%56S65Li66KKr6K%E5Lyw77yM6K%35re75Yqg6K%E5Lyw5ZG95Luk44CCIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVzX3NpbXBsZV9hbGdvcml0aG1fdGV4dCI6ICLpgJrov4flnKjpl67popjpmYjov7DkuK3mt7vliqDpmo:mnLrlj5jph4:vvIzkvb:mgqjnmoTpl67popjliqjmgIHljJbjgILkuI3opoHlv5jorrDlnKjmraPnoa7nrZTmoYjkuK3mt7vliqDov5nkupvlj5jph4:vvIzlpoLmnpzmgqjluIzmnJvlroPku6zmmL7npLrkuLrooqvor4TkvLDvvIzor7fmt7vliqDor4TkvLDlkb3ku6TjgIIiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZXNfc3RyaW5nX3N5bnRheF90ZXh0IjogIuS9v%eUqCBDYWxjTWUg57yW5YaZ5LiA5Liq566X5rOV5Lul55Sf5oiQ6ZqP5py65Y%Y6YeP77yBIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVzX2FkZF9uZXdfYnV0dG9uX3RleHQiOiAiKyDmt7vliqDlj5jph48iLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZXNfY29tcGxleF9hbGdvcml0aG1fdGV4dCI6ICLmgqjmnInkuIDkuKrlpI3mnYLnmoTnrpfms5XvvIzor7fkvb:nlKjpq5jnuqfmqKHlvI:vvIEiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZXNfaGVscF9idXR0b24iOiAi6ZqP5py65Y%Y6YeP5paH5qGjIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlX3Jvd192YXJpYWJsZV9uYW1lX3RleHQiOiAi5Y%Y6YeP5ZCNIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVfcm93X3ByZWZpeF90ZXh0IjogIiMiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZV90eXBlX3RleHQiOiAi5piv5pW05pWw77yM5LuL5LqOIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVfbWluX3ZhbHVlX3RleHQiOiAi5pyA5bCP5YC8IiwKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVfcm93X2FuZF90ZXh0IjogIuWSjCIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlX21heF92YWx1ZV90ZXh0IjogIuacgOWkp%WAvCIsCgoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZV9uYW1lX2FscmVhZHlfdXNlZF9lcnJvciI6ICLlj5jph4:lkI3lt7Looqvkvb:nlKjvvIEiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZV9udW1iZXJfbm90X2ludGVnZXJfZXJyb3IiOiAi5LiN5piv5pW05pWw77yBIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVfaW52YWxpZF9uYW1lX2Vycm9yIjogIuS4jeaYr%acieaViOeahOWPmOmHj%WQje%8gSIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfcmFuZG9tX3ZhcmlhYmxlX21heF92YWx1ZV9lcnJvciI6ICLmnIDlpKflgLzlv4Xpobvmm7TlpKfvvIEiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX3JhbmRvbV92YXJpYWJsZV9uYW1lX21pc3NpbmdfZXJyb3IiOiAi57y65bCR5Y%Y6YeP5ZCNIiwKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVfbWF4X3ZhbHVlX21pc3NpbmdfZXJyb3IiOiAi57y65bCR5pyA5aSn5YC8IiwKCQkicXVpenplc19zdHVkaW9faG9tZV9yYW5kb21fdmFyaWFibGVfbWluX3ZhbHVlX21pc3NpbmdfZXJyb3IiOiAi57y65bCR5pyA5bCP5YC8IiwKCQkKCQkiZXZhbHVhdGVfa2V5d29yZCI6ICLor4TkvLAiLAoJCQoJCSJob21lX2dldHRpbmdfc3RhcnRlZF93ZWxjb21lX2hlYWRlcl90ZXh0IjogIldpcmlzUXVpenplcyA0LjguMOS7i%e7je%8mueOsOWcqOmFjeWkh%S6huaJi%WGmeWbvuihqOWbnuetlCIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19zdGFydGVkX3dlbGNvbWVfZGVzY3JpcHRpb25fdGV4dCI6ICLmiJHku6zlvojpq5jlhbTlnLDlkJHmgqjku4vnu43kuIDnp43mlrDnmoTnrZTlpI3nsbvlnovvvIzkvb:mgqjnmoTlrabnlJ:lj6:ku6XpgJrov4fmiYvlhpnlm77ooajlm57nrZTpl67popjjgILopoHmg7Pkuobop6Por6Xlip:og73nmoTmm7TlpJrkv6Hmga:vvIzor7fmn6XnnIvlj5HluIPor7TmmI7lkozmlofmoaPjgILluIzmnJvmgqjlkozmgqjnmoTlrabnlJ:og73kuqvnlKhXaXJpc1F1aXp6ZXPnmoTov5nkuKrmlrDlip:og73vvIEiLAogICAgICAgICJob21lX2dldHRpbmdfc3RhcnRlZF9yZWxlYXNlX25vdGVzX2J1dHRvbl90ZXh0IjogIueJiOacrOWPkeW4g%mAmuefpSIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19naXZlX3VzX2ZlZWRiYWNrX2J1dHRvbl90ZXh0IjogIuWQkeaIkeS7rOaPkOS%m%aCqOeahOWPjemmiCIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19zdGFydGVkX2NyZWF0ZV9xdWVzdGlvbl9oZWFkZXJfdGV4dCI6ICLlpoLkvZXliJvlu7rmgqjnmoTnrKzkuIDkuKrpl67popgiLAogICAgICAgICJob21lX2dldHRpbmdfc3RhcnRlZF9jcmVhdGVfcXVlc3Rpb25fdGV4dCI6ICLkuobop6Pkvb:nlKggV2lyaXNRdWl6emVzIOWIm%W7uumXrumimOeahOaJgOacieatpemqpOS7peWPiuWmguS9leS9v%eUqOWFtumqjOivgeWKn%iDveOAgiIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19zdGFydGVkX2NyZWF0ZV9yYW5kb21fcXVlc3Rpb25faGVhZGVyX3RleHQiOiAi5aaC5L2V5Yib5bu65LiA5Liq6ZqP5py66Zeu6aKYIiwKICAgICAgICAiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfY3JlYXRlX3JhbmRvbV9xdWVzdGlvbl90ZXh0IjogIuS6huino%WmguS9lemAmui:h%aIkeS7rOeahOWfuuacrOWSjOmrmOe6p%aooeW8j%S9v%eUqCBXaXJpc1F1aXp6ZXMg6L275p2%5Yib5bu66ZqP5py66Zeu6aKY44CCIiwKICAgICAgICAiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfdHJhaW5pbmdfcGFuZWxfaGVhZGVyX3RleHQiOiAi6YCa6L%H5oiR5Lus55qE5YWN6LS55Z%56K6t5LqG6Kej5pyJ5YWzIFdpcmlzUXVpenplcyDnmoTkuIDliIciLAogICAgICAgICJob21lX2dldHRpbmdfc3RhcnRlZF90cmFpbmluZ19wYW5lbF90ZXh0IjogIuaIkeS7rOaPkOS%m%WFjei0ueeahOiHquWumui:m%W6puWfueiureWSjOW4pui%heWvvOeahOS7mOi0ueWfueiuremAiemhue%8jOaCqOWPr%S7pemAmui:h%i:meS6m%WfueiureS6huino%acieWFsyBXaXJpc1F1aXp6ZXMg5Yqf6IO95ZKM6auY57qn6K6%572u55qE5omA5pyJ5L%h5oGv44CCIiwKICAgICAgICAiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfbGVhcm5fbW9yZV9idXR0b25fdGV4dCI6ICLkuobop6Pmm7TlpJoiLAogICAgICAgICJob21lX2dldHRpbmdfc3RhcnRlZF9iYXNpY19tb2RlX2J1dHRvbl90ZXh0IjogIuWfuuacrOaooeW8jyIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19zdGFydGVkX2FkdmFuY2VkX21vZGVfYnV0dG9uX3RleHQiOiAi6auY57qn5qih5byPIiwKICAgICAgICAiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfZW5yb2xsX21lX2J1dHRvbl90ZXh0IjogIuaIkeimgeaKpeWQjSIsCiAgICAgICAgImhvbWVfZ2V0dGluZ19zdGFydGVkX2NvbnRhY3RfdXNfYnV0dG9uX3RleHQiOiAi6IGU57O75oiR5LusIiwKICAgICAgICAiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfdmlzaXRfb3VyX3dlYnBhZ2VfYnV0dG9uX3RleHQiOiAi6K6:6Zeu5oiR5Lus55qE572R56uZIiwKICAgICAgICAiaG9tZV9nZXR0aW5nX3N0YXJ0ZWRfcmVwb3J0X2FuX2lzc3VlX2J1dHRvbl90ZXh0IjogIuaKpeWRiumXrumimCIsCgkJImhvbWVfZ2V0dGluZ19zdGFydGVkX2xpc3RfYnV0dG9uX3RleHQiOiAi5byA5aeLIiwKCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfYW5zd2VyX3R5cGVfc2tldGNoX2xhYmVsIjogIuiNieWbviIsCgkJInF1aXp6ZXNfc3R1ZGlvX2hvbWVfaW5pdGlhbF9jb250ZW50X2Rlc2NyaXB0aW9uX3NrZXRjaCI6ICLov5nmmK:mgqjnmoTlrabnlJ:lnKjlsJ3or5Xop6PnrZTor6Xpl67popjml7blsIbnnIvliLDnmoTlm77ooajnvJbovpHlmajnmoTliJ3lp4vlhoXlrrnnirbmgIHjgILor7fms6jmhI:vvIzlrabnlJ:lt6XlhbfmoI:ku4XmnInmiYvlhpnlkozliKDpmaTmjInpkq7jgILor7fkvb:nlKjigJzmtYvor5Xor6Xpl67popjigJ3lip:og73mn6XnnIvlroPlsIblpoLkvZXmmL7npLrjgIIiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2NvcnJlY3RfYW5zd2VyX2Rlc2NyaXB0aW9uX3NrZXRjaF9wYXJhZ3JhcGhfMSI6ICLor7fovpPlhaXmraTpl67popjnmoTmraPnoa7nrZTmoYjjgILmgqjnmoTlrabnlJ:lsIbkvb:nlKjmiYvlhpnlt6XlhbfotbfojYnnrZTmoYjvvIzor6Xlip:og73kuLrmraTlr7nkuI3lrozlhajlh4bnoa7nmoTnrZTmoYjorr7nva7kuobmnIDkvY7lrrnlv43luqbjgILmgqjlj6:ngrnlh7vigJzpqozor4HpgInpobnigJ3lr7nmraTov5vooYzorr7nva7jgIIiLAoJCSJxdWl6emVzX3N0dWRpb19ob21lX2NvcnJlY3RfYW5zd2VyX2Rlc2NyaXB0aW9uX3NrZXRjaF9wYXJhZ3JhcGhfMiI6ICLor7fkvb:nlKjigJzmtYvor5Xor6Xpl67popjigJ3mjInpkq7mn6XnnIvlrabnlJ:nlYzpnaLjgIIiLAoJCSJxdWl6emVzX3N0dWRpb190ZXN0X3F1ZXN0aW9uX3N0dWRlbnRfYW5zd2VyX2ZlZWRiYWNrX2Fzc2VydGlvbl9lcXVpdmFsZW50X3NrZXRjaF9sYWJlbCIgOiAi562J5pWI6I2J5Zu%IiwKCQkicXVpenplc19kZW1vX3NrZXRjaF90aXRsZV9tZW51IiA6ICLojYnlm74iLAoJCSJob21lX2dldHRpbmdfc3RhcnRlZF9kb2N1bWVudGF0aW9uX2J1dHRvbl90ZXh0IiA6ICLmlofmoaMiLCAKCgkJImNsb3NlX21hdGh0eXBlX3BvcHVwIiA6ICLlhbPpl61NYXRoVHlwZSIsCgoJCSJxdWl6emVzX3N0dWRpb192YWxpZGF0aW9uX29wdGlvbnNfc3R1ZGVudF9hbnN3ZXJfY29tcGFyaXNvbl9rZWVwX2FyZ3VtZW50c19ldmFsdWF0ZWRfbGFiZWwiOiAiRXZhbHVhdGVkIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fa2VlcF9hcmd1bWVudHNfdW5ldmFsdWF0ZWRfbGFiZWwiOiAi5L%d5oyB6Ieq5Y%Y6YeP5LiN6KKr6K%E5LywIiwKCQkicXVpenplc19zdHVkaW9fdmFsaWRhdGlvbl9vcHRpb25zX3N0dWRlbnRfYW5zd2VyX2NvbXBhcmlzb25fa2VlcF9hcmd1bWVudHNfc3RyaW5nX2xhYmVsIjogIlN0cmluZyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3ZhbGlkYXRpb25fb3B0aW9uc19zdHVkZW50X2Fuc3dlcl9jb21wYXJpc29uX2FyZ3VtZW50c19oZWxwZXJfdGV4dCI6ICJEZWZpbmUgaG93IHRoZSBzdHVkZW50IGFuc3dlciB3aWxsIGJlIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgZ3JhZGluZyBmdW5jdGlvbi4gVGhpcyBpcyBhIHZlcnkgYWR2YW5jZWQgZmVhdHVyZS4iLAoKCQkicXVpenplc19zdHVkaW9faW1wb3J0X2RlcHJlY2F0ZWRfbWVzc2FnZV90aXRsZSIgOiAiRGVwcmVjYXRlZCBmZWF0dXJlcyIsCgkJInF1aXp6ZXNfc3R1ZGlvX2ltcG9ydF9kZXByZWNhdGVkX21lc3NhZ2VfdGV4dCIgOiAiVGhlIHF1ZXN0aW9uIHlvdSBhcmUgYWJvdXQgdG8gb3BlbiBjb250YWlucyBkZXByZWNhdGVkIGZlYXR1cmVzLiBUaGUgaW1wb3J0IHByb2Nlc3MgbWF5IGNoYW5nZSBzbGlnaHRseSB0aGUgYmVoYXZpb3Igb2YgdGhlIHF1ZXN0aW9uLiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY2FyZWZ1bGx5IHRlc3QgZGUgcXVlc3Rpb24gYWZ0ZXIgaW1wb3J0LiBcbiAgICBUaGUgZGVwcmVjYXRlZCBmZWF0dXJlcyBhcmUgdGhlIGZvbGxvd2luZyBvbmVzOiIsCgoJCSJxdWl6emVzX3N0dWRpb19lcXVpdmFsZW50X3NldF9hc3NlcnRpb24iOiAiRXF1aXZhbGVudCBzZXQgYXNzZXJ0aW9uIGlzIG5vIGxvbmdlciBhdmFpbGFibGUiLAoJCSJxdWl6emVzX3N0dWRpb19zeW50YXhfbGlzdF9hc3NlcnRpb24iOiAiU3ludGF4IGxpc3QgYXNzZXJ0aW9uIGlzIG5vIGxvbmdlciBhdmFpbGFibGUiLAoJCSJxdWl6emVzX3N0dWRpb190ZXh0X2xvZ2ljX29wZXJhdG9ycyIgOiAiVGV4dCBsb2dpYyBvcGVyYXRvcnMgYXJlIG5vIGxvbmdlciBhdmFpbGFibGUiLAoJCSJxdWl6emVzX3N0dWRpb19lcXVpdmFsZW50X3VuaXRfbGl0ZXJhbCIgOiAiRXF1aXZhbGVudCB1bml0IGxpdGVyYWwgYXNzZXJ0aW9uIGlzIG5vIGxvbmdlciBhdmFpbGFibGUiCgoJfQp9CgoK"},{ name : "graph_config.json", data : "s8986: "},{ name : "strings_graph.de.json", data : "s12135: "},{ name : "strings_quizzes.it.json", data : "s77976:ewoJIm1ldGEiOiB7CgkJImxhbmciOiAiaXQiCgl9LAoJIndvcmRzIjogewoJCSJzeW50YXhfbWF0aCI6ICJtYXRlbWF0aWNhIiwKCQkic3ludGF4X3N0cmluZyI6ICJ0ZXN0byIsCgoJCSJlcXVpdmFsZW50X2xpdGVyYWwiOiAibGV0dGVyYWxtZW50ZSB1Z3VhbGUiLAoJCSJlcXVpdmFsZW50X3N5bWJvbGljIjogIm1hdGVtYXRpY2FtZW50ZSB1Z3VhbGUiLAoJCSJlcXVpdmFsZW50X2VxdWF0aW9ucyI6ICJlcXVhemlvbmkgZXF1aXZhbGVudGkiLAoJCSJlcXVpdmFsZW50X2FsbCI6ICJRdWFsc2lhc2kgcmlzcG9zdGEiLAoJCSJlcXVpdmFsZW50X2Z1bmN0aW9uIjogImZ1bnppb25lIGRpIGNsYXNzaWZpY2F6aW9uZSIsCgoJCSJjaGVja19pbnRlZ2VyX2Zvcm0iOiAiY29ycmlzcG9uZGUgYSB1biBudW1lcm8gaW50ZXJvIiwKCQkiY2hlY2tfZnJhY3Rpb25fZm9ybSI6ICJjb3JyaXNwb25kZSBhIHVuYSBmcmF6aW9uZSIsCgkJImNoZWNrX3BvbHlub21pYWxfZm9ybSI6ICJjb3JyaXNwb25kZSBhIHVuIHBvbGlub21pbyIsCgkJImNoZWNrX3JhdGlvbmFsX2Z1bmN0aW9uX2Zvcm0iOiAiY29ycmlzcG9uZGUgYSB1bmEgZnVuemlvbmUgcmF6aW9uYWxlIiwKCQkiY2hlY2tfZWxlbWVudGFsX2Z1bmN0aW9uX2Zvcm0iOiAiw6ggdW5hIGNvbWJpbmF6aW9uZSBkaSBmdW56aW9uaSBlbGVtZW50YXJpIiwKCQkiY2hlY2tfc2NpZW50aWZpY19ub3RhdGlvbiI6ICLDqCBlc3ByZXNzYSBpbiBub3RhemlvbmUgc2NpZW50aWZpY2EiLAoJCSJjaGVja19zaW1wbGlmaWVkIjogIsOoIHNlbXBsaWZpY2F0YSIsCgkJImNoZWNrX2V4cGFuZGVkIjogIsOoIGVzcGFuc2EiLAoJCSJjaGVja19mYWN0b3JpemVkIjogIsOoIHNjb21wb3N0YSBpbiBmYXR0b3JpIiwKCQkiY2hlY2tfcmF0aW9uYWxpemVkIjogIsOoIHJhemlvbmFsaXp6YXRhIiwKCQkiY2hlY2tfbm9fY29tbW9uX2ZhY3RvciI6ICJub24gaGEgZmF0dG9yaSBjb211bmkiLAoJCSJjaGVja19taW5pbWFsX3JhZGljYW5kcyI6ICJoYSByYWRpY2FuZGkgbWluaW1pIiwKCQkiY2hlY2tfZGl2aXNpYmxlIjogIsOoIGRpdmlzaWJpbGUgcGVyIiwKCQkiY2hlY2tfY29tbW9uX2Rlbm9taW5hdG9yIjogImhhIHVuIHNvbG8gZGVub21pbmF0b3JlIGNvbXVuZSIsCgkJImNoZWNrX3VuaXQiOiAiaGEgdW4ndW5pdMOgIGVxdWl2YWxlbnRlIGEiLAoJCSJjaGVja191bml0X2xpdGVyYWwiOiAiaGEgdW4ndW5pdMOgIGxldHRlcmFsbWVudGUgdWd1YWxlIGEiLAoJCSJjaGVja19wcmVjaXNpb24iOiAiaGEiLAoJCSJjaGVja19zeW1ib2xpYyI6ICLDqCBzaW1ib2xpY2EiLAoJCSJjaGVja19lcXVpdmFsZW50X3VuaXRzIjogImhhIHVuaXTDoCBlcXVpdmFsZW50aSIsCgoJCSJsaXN0IjogImVsZW5jbyIsCgkJIm9yZGVybWF0dGVycyI6ICJsJ29yZGluZSDDqCByaWxldmFudGUiLAoJCSJvcmRlcmRvZXNudG1hdHRlciI6ICJsJ29yZGluZSBub24gw6ggcmlsZXZhbnRlIiwKCQkicXVlc3Rpb254bWwiOiAiWE1MIGRvbWFuZGEiLAoJCSJncmFtbWFydXJsIjogIlVSTCBncmFtbWF0aWNhIiwKCQkicmVzZXJ2ZWR3b3JkcyI6ICJwYXJvbGUgcmlzZXJ2YXRlIiwKCQkiZm9yY2VicmFja2V0cyI6ICJHbGkgZWxlbmNoaSBkZXZvbm8gc2VtcHJlIGNvbnRlbmVyZSBsZSBwYXJlbnRlc2kgZ3JhZmZlIFwie31cIi4iLAoJCSJjb21tYWFzaXRlbXNlcGFyYXRvciI6ICJVdGlsaXp6YSBsYSB2aXJnb2xhIFwiLFwiIHBlciBzZXBhcmFyZSBnbGkgZWxlbWVudGkgZGkgdW4gZWxlbmNvLiIsCgkJImNvbmZpcm1pbXBvcnRkZXByZWNhdGVkIjogIlZ1b2kgaW1wb3J0YXJlIGxhIGRvbWFuZGE: :IiwKCQkicXVpenplc19zdHVkaW9faW1wb3J0X2RpYWxvZ19sYWJlbCI6ICJMYSBkb21hbmRhIGNoZSBzdGFpIHBlciBpbXBvcnRhcmUgY29udGllbmUgZnVuemlvbmFsaXTDoCBvYnNvbGV0ZS4gTGEgcHJvY2VkdXJhIGRpIGltcG9ydGF6aW9uZSBwb3RyZWJiZSBtb2RpZmljYXJlIGxlZ2dlcm1lbnRlIGlsIGNvbXBvcnRhbWVudG8gZGVsbGEgZG9tYW5kYS4gU2kgY29uc2lnbGlhIGRpIHRlc3RhcmUgYWNjdXJhdGFtZW50ZSBsYSBkb21hbmRhIGRvcG8gbCdpbXBvcnRhemlvbmUuIiwKCQkicXVpenplc19zdHVkaW9faW1wb3J0X2RpYWxvZ19jb25maXJtX2J1dHRvbl9sYWJlbCI6ICJBY2NldHRhIiwKCQkicXVpenplc19zdHVkaW9faW1wb3J0X2RpYWxvZ19jYW5jZWxfYnV0dG9uX2xhYmVsIjogIkFubnVsbGEiLAoKCQkicXVpenplc19zdHVkaW9fcmVsZXZhbnRfb3B0aW9uc19kaWFsb2dfdGl0bGUiOiAiT3B6aW9uaSBpbmNvbXBhdGliaWxpIiwKCQkicXVpenplc19zdHVkaW9fcmVsZXZhbnRfb3B0aW9uc19kaWFsb2dfbGFiZWwiOiAiTGUgb3B6aW9uaSBzZWxlemlvbmF0ZSBub24gc29ubyBjb21wYXRpYmlsaSBjb24gbGUgYXNzZXJ6aW9uaSBkZWRvdHRlIGRhbGxhIHJpc3Bvc3RhIGNvcnJldHRhLiBDb25mZXJtaSBkaSB2b2xlciBjb250aW51YXJlPyIsCgkJInF1aXp6ZXNfc3R1ZGlvX3JlbGV2YW50X29wdGlvbnNfZGlhbG9nX2NvbmZpcm1fYnV0dG9uX2xhYmVsIjogIlPDrCIsCgkJInF1aXp6ZXNfc3R1ZGlvX3JlbGV2YW50X29wdGlvbnNfZGlhbG9nX2NhbmNlbF9idXR0b25fbGFiZWwiOiAiTm8iLAoKCQkiYW5zd2VyX2ZpZWxkX21hdGh0eXBlX3BvcHVwX2J1dHRvbl90b29sdGlwIjogIkFwcmkgbCdlZGl0b3IgbWF0ZW1hdGljbyBNYXRoVHlwZSIsCgkJCgkJInBvcHVwX3RleHRfZmllbGRfd2FybmluZ190aXRsZSI6ICJNb2RpZmljaGUgbm9uIHNhbHZhdGUiLAoJCSJwb3B1cF90ZXh0X2ZpZWxkX3dhcm5pbmdfbWVzc2FnZSI6ICJTZSBjaGl1ZGkgbGEgZmluZXN0cmEgcGVyZGVyYWkgdHV0dGUgbGUgbW9kaWZpY2hlIG5vbiBzYWx2YXRlLiBDb25mZXJtaSBkaSB2b2xlciBwcm9jZWRlcmU: "},{ name : "sketch_correct_answer_config.json", data : "s12032: "},{ name : "line_chart_config.json", data : "s3250:ewogICJpZCI6ICJncmFwaCIsCiAgIml0ZW1zIjogWwogICAgewogICAgICAiaWQiOiAidG9vbHMiLAogICAgICAiaXRlbXMiOiBbCiAgICAgICAgewogICAgICAgICAgImlkIjogInBvaW50ZXJzIiwKICAgICAgICAgICJpdGVtcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJpZCI6ICJjdXJzb3JFZGl0TGluZUNoYXJ0IgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiaWQiOiAidmlzdWFscyIsCiAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiaWQiOiAiZml0UGxvdHRlclRvU3RhdHMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiaWQiOiAiY2hhbmdlT3JpZW50YXRpb25MaW5lcyIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImlkIjogImVsZW1lbnRzIiwKICAgICAgICAgICJpdGVtcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJpZCI6ICJuZXdQb2ludHNMaW5lQ2hhcnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiaWQiOiAibmV3TGluZUxpbmVDaGFydCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJpZCI6ICJuZXdGcmVlTGFiZWwiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJpZCI6ICJtZW51IiwKICAgICAgIml0ZW1zIjogWwogICAgICAgIHsKICAgICAgICAgICJpZCI6ICJlZGl0aW9uIiwKICAgICAgICAgICJpdGVtcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJpZCI6ICJ1bmRvIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgImlkIjogInJlZG8iCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJpZCI6ICJhY3Rpb25zIiwKICAgICAgICAgICJpdGVtcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJpZCI6ICJkb3dubG9hZCIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgImlkIjogInZpZXciLAogICAgICAiaXRlbXMiOiBbCiAgICAgICAgewogICAgICAgICAgImlkIjogInZpZXdUb29scyIsCiAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiaWQiOiAiem9vbUluIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgImlkIjogInpvb21PdXQiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJpZCI6ICJ2aWV3QWN0aW9ucyIsCiAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiaWQiOiAibWF4aW1pemUiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJpZCI6ICJjb250ZXh0dWFsRWxlbWVudCIsCiAgICAgICJpdGVtcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiaWQiOiAiZWxlbWVudFN0eWxlcyIsCiAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiaWQiOiAibGluZVdpZHRoIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgImlkIjogInBvaW50RGlhbWV0ZXIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiaWQiOiAibGluZUNvbG9yIgogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiaWQiOiAiZGVsZXRlU2VjdGlvbiIsCiAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiaWQiOiAiZGVsZXRlUG9pbnRzTGluZUNoYXJ0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgImlkIjogImRlbGV0ZUxpbmVMaW5lQ2hhcnQiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICJpZCI6ICJjb250ZXh0dWFsTGFiZWwiLAogICAgICAiaXRlbXMiOiBbCiAgICAgICAgewogICAgICAgICAgImlkIjogImxhYmVsU3R5bGVzIiwKICAgICAgICAgICJpdGVtcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJpZCI6ICJib2xkIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgImlkIjogIml0YWxpYyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJpZCI6ICJjb2xvciIKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXQogICAgfQogIF0KfQ"},{ name : "bar_chart_config.json", data : "s3504:ewogICAgImlkIjogImdyYXBoIiwKICAgICJpdGVtcyI6IFsKICAgICAgewogICAgICAgICJpZCI6ICJ0b29scyIsCiAgICAgICAgIml0ZW1zIjogWwogICAgICAgICAgewogICAgICAgICAgICAiaWQiOiAicG9pbnRlcnMiLAogICAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjogImN1cnNvckVkaXRCYXJDaGFydCIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJpZCI6ICJ2aXN1YWxzIiwKICAgICAgICAgICAgIml0ZW1zIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJmaXRQbG90dGVyVG9TdGF0cyIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJjaGFuZ2VPcmllbnRhdGlvbkJhcnMiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiAiY2hhbmdlQmFyc1Bvc2l0aW9uaW5nIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImlkIjogImVsZW1lbnRzIiwKICAgICAgICAgICAgIml0ZW1zIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJuZXdQYWNrQmFycyIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJuZXdTaWRlQmFycyIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJuZXdGcmVlTGFiZWwiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9LAogICAgICB7CiAgICAgICAgImlkIjogIm1lbnUiLAogICAgICAgICJpdGVtcyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImlkIjogImVkaXRpb24iLAogICAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjogInVuZG8iCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiAicmVkbyIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJpZCI6ICJhY3Rpb25zIiwKICAgICAgICAgICAgIml0ZW1zIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJkb3dubG9hZCIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiaWQiOiAidmlldyIsCiAgICAgICAgIml0ZW1zIjogWwogICAgICAgICAgewogICAgICAgICAgICAiaWQiOiAidmlld1Rvb2xzIiwKICAgICAgICAgICAgIml0ZW1zIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJ6b29tSW4iCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiAiem9vbU91dCIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJpZCI6ICJ2aWV3QWN0aW9ucyIsCiAgICAgICAgICAgICJpdGVtcyI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiAibWF4aW1pemUiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9LAogICAgICB7CiAgICAgICAgImlkIjogImNvbnRleHR1YWxFbGVtZW50IiwKICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJpZCI6ICJlbGVtZW50U3R5bGVzIiwKICAgICAgICAgICAgIml0ZW1zIjogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ICJsaW5lQ29sb3IiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiaWQiOiAiZGVsZXRlU2VjdGlvbiIsCiAgICAgICAgICAgICJpdGVtcyI6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiAiZGVsZXRlUGFja0JhcnMiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiAiZGVsZXRlU2lkZUJhcnMiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9LAogICAgICB7CiAgICAgICAgImlkIjogImNvbnRleHR1YWxMYWJlbCIsCiAgICAgICAgIml0ZW1zIjogWwogICAgICAgICAgewogICAgICAgICAgICAiaWQiOiAibGFiZWxTdHlsZXMiLAogICAgICAgICAgICAiaXRlbXMiOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjogImJvbGQiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiAiaXRhbGljIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjogImNvbG9yIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfQogICAgXQp9"},{ name : "strings_graph.nl.json", data : "s11302: "},{ name : "strings_graph.it.json", data : "s11918: "},{ name : "strings_quizzes.en.json", data : "s73716: % : "}];
if(typeof document != "undefined") js.Lib.document = document;
if(typeof window != "undefined") {
	js.Lib.window = window;
	js.Lib.window.onerror = function(msg,url,line) {
		var f = js.Lib.onerror;
		if(f == null) return false;
		return f(msg,[url + ":" + line]);
	};
}
js.XMLHttpRequest = window.XMLHttpRequest?XMLHttpRequest:window.ActiveXObject?function() {
	try {
		return new ActiveXObject("Msxml2.XMLHTTP");
	} catch( e ) {
		try {
			return new ActiveXObject("Microsoft.XMLHTTP");
		} catch( e1 ) {
			throw "Unable to create XMLHttpRequest object.";
		}
	}
}:(function($this) {
	var $r;
	throw "Unable to create XMLHttpRequest object.";
	return $r;
}(this));
com.wiris.kernel.plotter.QuizzesCorrectAnswerPlotter.__meta__ = { fields : { getElementsToGrade : { Deprecated : null}}};
com.wiris.quizzes.HxMathViewer.THUMBNAIL_WIDTH = 250;
com.wiris.quizzes.HxMathViewer.THUMBNAIL_HEIGHT = 250;
com.wiris.quizzes.HxMathViewer.PLOT_WIDTH = 450;
com.wiris.quizzes.HxMathViewer.PLOT_HEIGHT = 450;
com.wiris.quizzes.api.ui.AuthoringField.__meta__ = { fields : { showAuxiliarTextInput : { Deprecated : null}, showAuxiliarCasReplaceEditor : { Deprecated : null}, showAuxiliarCas : { Deprecated : null}, showPreviewTab : { Deprecated : null}, showVariablesTab : { Deprecated : null}, showValidationTab : { Deprecated : null}, showCorrectAnswerTab : { Deprecated : null}}};
com.wiris.quizzes.JsEmbeddedAnswersEditor.CLASS_AUTHOR_FIELD_EMBEDDED = "wirisembeddedauthoringfield";
com.wiris.quizzes.impl.QuizzesImpl.singleton = null;
com.wiris.quizzes.impl.QuizzesBuilderImpl.__meta__ = { obj : { Deprecated : null}};
com.wiris.quizzes.impl.QuizzesBuilderImpl.singleton = null;
com.wiris.quizzes.JsQuizzesFilter.CLASS_QUESTION = "wirisquestion";
com.wiris.quizzes.JsQuizzesFilter.CLASS_QUESTION_INSTANCE = "wirisquestioninstance";
com.wiris.quizzes.JsQuizzesFilter.CLASS_AUTHOR_FIELD = "wirisauthoringfield";
com.wiris.quizzes.JsQuizzesFilter.CLASS_ANSWER_FIELD = "wirisanswerfield";
com.wiris.quizzes.JsQuizzesFilter.CLASS_AUXILIAR_CAS_APPLET = "wirisauxiliarcasapplet";
com.wiris.quizzes.JsQuizzesFilter.CLASS_ANSWER_FEEDBACK = "wirisanswerfeedback";
com.wiris.quizzes.JsQuizzesFilter.CLASS_LANG = "wirislang";
com.wiris.quizzes.JsQuizzesFilter.CLASS_SUBMIT = "wirissubmit";
com.wiris.system.ResourceLoader.editorDefinition = null;
com.wiris.system.ResourceLoader.charactersDefinition = null;
com.wiris.system.ResourceLoader.translations = { };
com.wiris.system.ResourceLoader.version = null;
com.wiris.system.ResourceLoader.fontAdjust = null;
com.wiris.quizzes.api.ConfigurationKeys.WIRIS_URL = "quizzes.wiris.url";
com.wiris.quizzes.api.ConfigurationKeys.CALC_URL = "quizzes.calc.url";
com.wiris.quizzes.api.ConfigurationKeys.EDITOR_URL = "quizzes.editor.url";
com.wiris.quizzes.api.ConfigurationKeys.SERVICE_OFFLINE = "quizzes.service.offline";
com.wiris.quizzes.api.ConfigurationKeys.HAND_URL = "quizzes.hand.url";
com.wiris.quizzes.api.ConfigurationKeys.SERVICE_URL = "quizzes.service.url";
com.wiris.quizzes.api.ConfigurationKeys.PROXY_URL = "quizzes.proxy.url";
com.wiris.quizzes.api.ConfigurationKeys.CACHE_DIR = "quizzes.cache.dir";
com.wiris.quizzes.api.ConfigurationKeys.MAXCONNECTIONS = "quizzes.maxconnections";
com.wiris.quizzes.api.ConfigurationKeys.HTTPPROXY_HOST = "quizzes.httpproxy.host";
com.wiris.quizzes.api.ConfigurationKeys.HTTPPROXY_PORT = "quizzes.httpproxy.port";
com.wiris.quizzes.api.ConfigurationKeys.HTTPPROXY_USER = "quizzes.httpproxy.user";
com.wiris.quizzes.api.ConfigurationKeys.HTTPPROXY_PASS = "quizzes.httpproxy.pass";
com.wiris.quizzes.api.ConfigurationKeys.CONFIGURATION_FILE = "quizzes.configuration.file";
com.wiris.quizzes.api.ConfigurationKeys.REFERER_URL = "quizzes.referer.url";
com.wiris.quizzes.api.ConfigurationKeys.HAND_ENABLED = "quizzes.hand.enabled";
com.wiris.quizzes.api.ConfigurationKeys.CALC_ENABLED = "quizzes.calc.enabled";
com.wiris.quizzes.api.ConfigurationKeys.HAND_LOGTRACES = "quizzes.hand.logtraces";
com.wiris.quizzes.api.ConfigurationKeys.WIRISLAUNCHER_URL = "quizzes.wirislauncher.url";
com.wiris.quizzes.api.ConfigurationKeys.CROSSORIGINCALLS_ENABLED = "quizzes.crossorigincalls.enabled";
com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_STATIC = "quizzes.resources.static";
com.wiris.quizzes.api.ConfigurationKeys.RESOURCES_URL = "quizzes.resources.url";
com.wiris.quizzes.api.ConfigurationKeys.GRAPH_URL = "quizzes.graph.url";
com.wiris.quizzes.api.ConfigurationKeys.VERSION = "quizzes.version";
com.wiris.quizzes.api.ConfigurationKeys.DEPLOYMENT_ID = "quizzes.deployment.id";
com.wiris.quizzes.api.ConfigurationKeys.LICENSE_ID = "quizzes.license.id";
com.wiris.quizzes.api.ConfigurationKeys.TELEMETRY_URL = "quizzes.telemetry.url";
com.wiris.quizzes.api.ConfigurationKeys.TELEMETRY_TOKEN = "quizzes.telemetry.token";
com.wiris.quizzes.api.ConfigurationKeys.QUIZZES_LOGGING_LEVEL = "quizzes.logging.level";
com.wiris.quizzes.api.ConfigurationKeys.QUIZZES_TRACKING_ENABLED = "quizzes.tracking.enabled";
com.wiris.quizzes.api.ConfigurationKeys.GRAPH_TRACK_INSTANCES = "quizzes.graph.trackinstances";
com.wiris.quizzes.api.Question.__meta__ = { fields : { setOption : { Deprecated : null}, addAssertion : { Deprecated : null}, getCorrectAnswersLength : { Deprecated : null}, getCorrectAnswer : { Deprecated : null}, setCorrectAnswer : { Deprecated : null}, addNewSlotFromModel : { Deprecated : null}}};
com.wiris.quizzes.api.QuestionInstance.__meta__ = { fields : { getAssertionChecks : { Deprecated : null}, getStudentAnswersLength : { Deprecated : null}, getStudentAnswer : { Deprecated : null}, setStudentAnswer : { Deprecated : null}, setAuxiliarText : { Deprecated : null}, getCompoundAnswerGrade : { Deprecated : null}, getAnswerGrade : { Deprecated : null}, isAnswerCorrect : { Deprecated : null}}};
com.wiris.quizzes.api.QuizzesConstants.__meta__ = { statics : { PROPERTY_AUXILIAR_TEXT : { Deprecated : null}}};
com.wiris.quizzes.api.QuizzesConstants.OPTION_RELATIVE_TOLERANCE = "relative_tolerance";
com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE = "tolerance";
com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE_DIGITS = "tolerance_digits";
com.wiris.quizzes.api.QuizzesConstants.OPTION_PRECISION = "precision";
com.wiris.quizzes.api.QuizzesConstants.OPTION_TIMES_OPERATOR = "times_operator";
com.wiris.quizzes.api.QuizzesConstants.OPTION_IMAGINARY_UNIT = "imaginary_unit";
com.wiris.quizzes.api.QuizzesConstants.OPTION_EXPONENTIAL_E = "exponential_e";
com.wiris.quizzes.api.QuizzesConstants.OPTION_NUMBER_PI = "number_pi";
com.wiris.quizzes.api.QuizzesConstants.OPTION_IMPLICIT_TIMES_OPERATOR = "implicit_times_operator";
com.wiris.quizzes.api.QuizzesConstants.OPTION_FLOAT_FORMAT = "float_format";
com.wiris.quizzes.api.QuizzesConstants.OPTION_DECIMAL_SEPARATOR = "decimal_separator";
com.wiris.quizzes.api.QuizzesConstants.OPTION_DIGIT_GROUP_SEPARATOR = "digit_group_separator";
com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER = "answer_parameter";
com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER_NAME = "answer_parameter_name";
com.wiris.quizzes.api.QuizzesConstants.PROPERTY_ANSWER_FIELD_TYPE = "inputField";
com.wiris.quizzes.api.QuizzesConstants.ANSWER_FIELD_TYPE_INLINE_EDITOR = "inlineEditor";
com.wiris.quizzes.api.QuizzesConstants.ANSWER_FIELD_TYPE_POPUP_EDITOR = "popupEditor";
com.wiris.quizzes.api.QuizzesConstants.ANSWER_FIELD_TYPE_TEXT = "textField";
com.wiris.quizzes.api.QuizzesConstants.META_PROPERTY_REFERER = "referer";
com.wiris.quizzes.api.QuizzesConstants.META_PROPERTY_QUESTION = "question";
com.wiris.quizzes.api.QuizzesConstants.META_PROPERTY_USER = "userref";
com.wiris.quizzes.api.QuizzesConstants.PROPERTY_COMPOUND_ANSWER = "inputCompound";
com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_COMPOUND_ANSWER_TRUE = "true";
com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_COMPOUND_ANSWER_FALSE = "false";
com.wiris.quizzes.api.QuizzesConstants.PROPERTY_COMPOUND_ANSWER_GRADE = "gradeCompound";
com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_COMPOUND_ANSWER_GRADE_AND = "and";
com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_COMPOUND_ANSWER_GRADE_DISTRIBUTE = "distribute";
com.wiris.quizzes.api.QuizzesConstants.PROPERTY_COMPOUND_ANSWER_GRADE_DISTRIBUTION = "gradeCompoundDistribution";
com.wiris.quizzes.api.QuizzesConstants.PROPERTY_SHOW_CAS = "cas";
com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_SHOW_CAS_FALSE = "false";
com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_SHOW_CAS_ADD = "add";
com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_SHOW_CAS_REPLACE = "replace";
com.wiris.quizzes.api.QuizzesConstants.PROPERTY_CAS_INITIAL_SESSION = "casSession";
com.wiris.quizzes.api.QuizzesConstants.PROPERTY_CAS_SESSION = "casSession";
com.wiris.quizzes.api.QuizzesConstants.PROPERTY_SHOW_AUXILIAR_TEXT_INPUT = "auxiliaryTextInput";
com.wiris.quizzes.api.QuizzesConstants.PROPERTY_SHOW_AUXILIARY_TEXT_INPUT = "auxiliaryTextInput";
com.wiris.quizzes.api.QuizzesConstants.PROPERTY_AUXILIAR_TEXT = "auxiliaryText";
com.wiris.quizzes.api.QuizzesConstants.PROPERTY_AUXILIARY_TEXT = "auxiliaryText";
com.wiris.quizzes.api.QuizzesConstants.PARAMETER_USER_ID = "user_id";
com.wiris.quizzes.api.QuizzesConstants.GRAPH_TOOLBAR = "graphToolbar";
com.wiris.quizzes.api.ui.QuizzesUIBuilder.__meta__ = { obj : { Deprecated : null}};
com.wiris.quizzes.api.ui.QuizzesUIConstants.__meta__ = { obj : { Deprecated : null}};
com.wiris.quizzes.api.ui.QuizzesUIConstants.TEXT_FIELD = com.wiris.quizzes.api.QuizzesConstants.ANSWER_FIELD_TYPE_TEXT;
com.wiris.quizzes.api.ui.QuizzesUIConstants.INLINE_EDITOR = com.wiris.quizzes.api.QuizzesConstants.ANSWER_FIELD_TYPE_INLINE_EDITOR;
com.wiris.quizzes.api.ui.QuizzesUIConstants.POPUP_EDITOR = com.wiris.quizzes.api.QuizzesConstants.ANSWER_FIELD_TYPE_POPUP_EDITOR;
com.wiris.quizzes.api.ui.QuizzesUIConstants.STUDIO = "studio";
com.wiris.quizzes.api.ui.QuizzesUIConstants.INLINE_STUDIO = "inlineStudio";
com.wiris.quizzes.api.ui.QuizzesUIConstants.EMBEDDED_ANSWERS_EDITOR = "embeddedAnswersEditor";
com.wiris.quizzes.api.ui.QuizzesUIConstants.AUTHORING = "authoring";
com.wiris.quizzes.api.ui.QuizzesUIConstants.DELIVERY = "delivery";
com.wiris.quizzes.api.ui.QuizzesUIConstants.REVIEW = "review";
com.wiris.quizzes.impl.ActionCommands.COMMANDS = ["avalua","vurdere","bewerten",com.wiris.system.Utf8.uchr(945) + com.wiris.system.Utf8.uchr(958) + com.wiris.system.Utf8.uchr(953) + com.wiris.system.Utf8.uchr(959) + com.wiris.system.Utf8.uchr(955) + com.wiris.system.Utf8.uchr(959) + com.wiris.system.Utf8.uchr(947) + com.wiris.system.Utf8.uchr(974),"evaluate","eval" + com.wiris.system.Utf8.uchr(250) + "a",com.wiris.system.Utf8.uchr(233) + "valuer","valutare","evaluere","avalie"];
com.wiris.quizzes.impl.MathContent.TYPE_TEXT = "text";
com.wiris.quizzes.impl.MathContent.TYPE_TEXT_EVAL = "textEval";
com.wiris.quizzes.impl.MathContent.TYPE_MATHML = "mathml";
com.wiris.quizzes.impl.MathContent.TYPE_MATHML_EVAL = "mathmlEval";
com.wiris.quizzes.impl.MathContent.TYPE_IMAGE = "image";
com.wiris.quizzes.impl.MathContent.TYPE_IMAGE_REF = "imageref";
com.wiris.quizzes.impl.MathContent.TYPE_STRING = "string";
com.wiris.quizzes.impl.MathContent.TYPE_GEOMETRY_FILE = "construction";
com.wiris.quizzes.impl.Answer.tagName = "answer";
com.wiris.quizzes.impl.Assertion.__meta__ = { statics : { SYNTAX_LIST : { Deprecated : null}, SYNTAX_EXPRESSION : { Deprecated : null}, SYNTAX_QUANTITY : { Deprecated : null}, PARAM_TEXT_LOGIC_OPERATORS : { Deprecated : null}, EQUIVALENT_SET : { Deprecated : null}, PARAM_NOT_EVALUATE : { Deprecated : null}, CHECK_INTEGER_FORM : { Deprecated : null}, CHECK_FRACTION_FORM : { Deprecated : null}, CHECK_POLYNOMIAL_FORM : { Deprecated : null}, CHECK_RATIONAL_FUNCTION_FORM : { Deprecated : null}, CHECK_ELEMENTAL_FUNCTION_FORM : { Deprecated : null}, CHECK_UNIT : { Deprecated : null}, CHECK_UNIT_LITERAL : { Deprecated : null}, CHECK_DIVISIBLE : { Deprecated : null}, CHECK_NO_MORE_DECIMALS : { Deprecated : null}, CHECK_NO_MORE_DIGITS : { Deprecated : null}, PARAM_UNIT : { Deprecated : null}, PARAM_DIGITS : { Deprecated : null}, PARAM_VALUE : { Deprecated : null}}};
com.wiris.quizzes.impl.Assertion.tagName = "assertion";
com.wiris.quizzes.impl.Assertion.SYNTAX_MATH = "syntax_math";
com.wiris.quizzes.impl.Assertion.SYNTAX_GRAPHIC = "syntax_graphic";
com.wiris.quizzes.impl.Assertion.SYNTAX_STRING = "syntax_string";
com.wiris.quizzes.impl.Assertion.SYNTAX_LIST = "syntax_list";
com.wiris.quizzes.impl.Assertion.SYNTAX_EXPRESSION = "syntax_expression";
com.wiris.quizzes.impl.Assertion.SYNTAX_QUANTITY = "syntax_quantity";
com.wiris.quizzes.impl.Assertion.PARAM_CONSTANTS = "constants";
com.wiris.quizzes.impl.Assertion.PARAM_FUNCTIONS = "functions";
com.wiris.quizzes.impl.Assertion.PARAM_LIST_OPERATORS = "listoperators";
com.wiris.quizzes.impl.Assertion.PARAM_GROUP_OPERATORS = "groupoperators";
com.wiris.quizzes.impl.Assertion.PARAM_ITEM_SEPARATORS = "itemseparators";
com.wiris.quizzes.impl.Assertion.PARAM_DECIMAL_SEPARATORS = "decimalseparators";
com.wiris.quizzes.impl.Assertion.PARAM_DIGIT_GROUP_SEPARATORS = "digitgroupseparators";
com.wiris.quizzes.impl.Assertion.PARAM_INTERVALS = "intervals";
com.wiris.quizzes.impl.Assertion.PARAM_RATIO = "ratio";
com.wiris.quizzes.impl.Assertion.PARAM_SCIENTIFIC_NOTATION = "scientificnotation";
com.wiris.quizzes.impl.Assertion.PARAM_UNITS = "units";
com.wiris.quizzes.impl.Assertion.PARAM_UNIT_PREFIXES = "unitprefixes";
com.wiris.quizzes.impl.Assertion.PARAM_MIXED_FRACTIONS = "mixedfractions";
com.wiris.quizzes.impl.Assertion.PARAM_NO_BRACKETS_LIST = "nobracketslist";
com.wiris.quizzes.impl.Assertion.PARAM_GRAPH_MODE = "graphMode";
com.wiris.quizzes.impl.Assertion.GRAPH_MODE_STANDARD = "standard";
com.wiris.quizzes.impl.Assertion.GRAPH_MODE_BAR_CHART = "barChart";
com.wiris.quizzes.impl.Assertion.GRAPH_MODE_LINE_CHART = "lineChart";
com.wiris.quizzes.impl.Assertion.GRAPH_MODE_PIE_CHART = "pieChart";
com.wiris.quizzes.impl.Assertion.GRAPH_MODE_SKETCH = "sketch";
com.wiris.quizzes.impl.Assertion.PARAM_TEXT_LOGIC_OPERATORS = "textlogicoperators";
com.wiris.quizzes.impl.Assertion.EQUIVALENT_SYMBOLIC = "equivalent_symbolic";
com.wiris.quizzes.impl.Assertion.EQUIVALENT_LITERAL = "equivalent_literal";
com.wiris.quizzes.impl.Assertion.EQUIVALENT_EQUATIONS = "equivalent_equations";
com.wiris.quizzes.impl.Assertion.EQUIVALENT_FUNCTION = "equivalent_function";
com.wiris.quizzes.impl.Assertion.EQUIVALENT_ALL = "equivalent_all";
com.wiris.quizzes.impl.Assertion.EQUIVALENT_GRAPHIC = "equivalent_graphic";
com.wiris.quizzes.impl.Assertion.EQUIVALENT_SKETCH = "equivalent_sketch";
com.wiris.quizzes.impl.Assertion.EQUIVALENT_SET = "equivalent_set";
com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE = com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE;
com.wiris.quizzes.impl.Assertion.PARAM_RELATIVE_TOLERANCE = com.wiris.quizzes.api.QuizzesConstants.OPTION_RELATIVE_TOLERANCE;
com.wiris.quizzes.impl.Assertion.PARAM_TOLERANCE_DIGITS = com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE_DIGITS;
com.wiris.quizzes.impl.Assertion.PARAM_ORDER_MATTERS = "ordermatters";
com.wiris.quizzes.impl.Assertion.PARAM_REPETITION_MATTERS = "repetitionmatters";
com.wiris.quizzes.impl.Assertion.PARAM_NAME = "name";
com.wiris.quizzes.impl.Assertion.PARAM_USE_CASE = "usecase";
com.wiris.quizzes.impl.Assertion.PARAM_USE_SPACES = "usespaces";
com.wiris.quizzes.impl.Assertion.PARAM_NOT_EVALUATE = "notevaluate";
com.wiris.quizzes.impl.Assertion.PARAM_FUNCTION_ARGUMENT_MODE = "functionargumentmode";
com.wiris.quizzes.impl.Assertion.PARAM_VALUE_FUNCTION_ARGUMENT_EVALUATED = "evaluate";
com.wiris.quizzes.impl.Assertion.PARAM_VALUE_FUNCTION_ARGUMENT_UNEVALUATED = "not_evaluate";
com.wiris.quizzes.impl.Assertion.PARAM_VALUE_FUNCTION_ARGUMENT_STRING = "string";
com.wiris.quizzes.impl.Assertion.PARAM_ELEMENTS_TO_GRADE = "identifiers";
com.wiris.quizzes.impl.Assertion.CHECK_SCIENTIFIC_NOTATION = "check_scientific_notation";
com.wiris.quizzes.impl.Assertion.CHECK_DECIMAL_NOTATION = "check_decimal_notation";
com.wiris.quizzes.impl.Assertion.CHECK_SYMBOLIC = "check_symbolic";
com.wiris.quizzes.impl.Assertion.CHECK_SIMPLIFIED = "check_simplified";
com.wiris.quizzes.impl.Assertion.CHECK_EXPANDED = "check_expanded";
com.wiris.quizzes.impl.Assertion.CHECK_FACTORIZED = "check_factorized";
com.wiris.quizzes.impl.Assertion.CHECK_NO_COMMON_FACTOR = "check_no_common_factor";
com.wiris.quizzes.impl.Assertion.CHECK_COMMON_DENOMINATOR = "check_common_denominator";
com.wiris.quizzes.impl.Assertion.CHECK_EQUIVALENT_UNITS = "check_equivalent_units";
com.wiris.quizzes.impl.Assertion.CHECK_RATIONALIZED = "check_rationalized";
com.wiris.quizzes.impl.Assertion.CHECK_MINIMAL_RADICANDS = "check_minimal_radicands";
com.wiris.quizzes.impl.Assertion.CHECK_PRECISION = "check_precision";
com.wiris.quizzes.impl.Assertion.CHECK_COLOR = "check_color";
com.wiris.quizzes.impl.Assertion.CHECK_LINESTYLE = "check_linestyle";
com.wiris.quizzes.impl.Assertion.CHECK_NO_SUPERFLUOUS = "check_no_superfluous";
com.wiris.quizzes.impl.Assertion.CHECK_INTEGER_FORM = "check_integer_form";
com.wiris.quizzes.impl.Assertion.CHECK_FRACTION_FORM = "check_fraction_form";
com.wiris.quizzes.impl.Assertion.CHECK_POLYNOMIAL_FORM = "check_polynomial_form";
com.wiris.quizzes.impl.Assertion.CHECK_RATIONAL_FUNCTION_FORM = "check_rational_function_form";
com.wiris.quizzes.impl.Assertion.CHECK_ELEMENTAL_FUNCTION_FORM = "check_elemental_function_form";
com.wiris.quizzes.impl.Assertion.CHECK_UNIT = "check_unit";
com.wiris.quizzes.impl.Assertion.CHECK_UNIT_LITERAL = "check_unit_literal";
com.wiris.quizzes.impl.Assertion.CHECK_DIVISIBLE = "check_divisible";
com.wiris.quizzes.impl.Assertion.CHECK_NO_MORE_DECIMALS = "check_no_more_decimals";
com.wiris.quizzes.impl.Assertion.CHECK_NO_MORE_DIGITS = "check_no_more_digits";
com.wiris.quizzes.impl.Assertion.PARAM_MIN = "min";
com.wiris.quizzes.impl.Assertion.PARAM_MAX = "max";
com.wiris.quizzes.impl.Assertion.PARAM_RELATIVE = "relative";
com.wiris.quizzes.impl.Assertion.PARAM_ALLOW_PREFIXES = "allowprefixes";
com.wiris.quizzes.impl.Assertion.PARAM_UNIT = "unit";
com.wiris.quizzes.impl.Assertion.PARAM_DIGITS = "digits";
com.wiris.quizzes.impl.Assertion.PARAM_VALUE = "value";
com.wiris.quizzes.impl.Assertion.syntactic = [com.wiris.quizzes.impl.Assertion.SYNTAX_MATH,com.wiris.quizzes.impl.Assertion.SYNTAX_GRAPHIC,com.wiris.quizzes.impl.Assertion.SYNTAX_STRING];
com.wiris.quizzes.impl.Assertion.equivalent = [com.wiris.quizzes.impl.Assertion.EQUIVALENT_LITERAL,com.wiris.quizzes.impl.Assertion.EQUIVALENT_SYMBOLIC,com.wiris.quizzes.impl.Assertion.EQUIVALENT_EQUATIONS,com.wiris.quizzes.impl.Assertion.EQUIVALENT_ALL,com.wiris.quizzes.impl.Assertion.EQUIVALENT_FUNCTION,com.wiris.quizzes.impl.Assertion.EQUIVALENT_GRAPHIC,com.wiris.quizzes.impl.Assertion.EQUIVALENT_SKETCH];
com.wiris.quizzes.impl.Assertion.structure = [com.wiris.quizzes.impl.Assertion.CHECK_SYMBOLIC,com.wiris.quizzes.impl.Assertion.CHECK_SCIENTIFIC_NOTATION,com.wiris.quizzes.impl.Assertion.CHECK_DECIMAL_NOTATION];
com.wiris.quizzes.impl.Assertion.checks = [com.wiris.quizzes.impl.Assertion.CHECK_SIMPLIFIED,com.wiris.quizzes.impl.Assertion.CHECK_EXPANDED,com.wiris.quizzes.impl.Assertion.CHECK_FACTORIZED,com.wiris.quizzes.impl.Assertion.CHECK_RATIONALIZED,com.wiris.quizzes.impl.Assertion.CHECK_NO_COMMON_FACTOR,com.wiris.quizzes.impl.Assertion.CHECK_MINIMAL_RADICANDS,com.wiris.quizzes.impl.Assertion.CHECK_DIVISIBLE,com.wiris.quizzes.impl.Assertion.CHECK_COMMON_DENOMINATOR,com.wiris.quizzes.impl.Assertion.CHECK_UNIT,com.wiris.quizzes.impl.Assertion.CHECK_UNIT_LITERAL,com.wiris.quizzes.impl.Assertion.CHECK_PRECISION,com.wiris.quizzes.impl.Assertion.CHECK_NO_SUPERFLUOUS,com.wiris.quizzes.impl.Assertion.CHECK_COLOR,com.wiris.quizzes.impl.Assertion.CHECK_LINESTYLE,com.wiris.quizzes.impl.Assertion.CHECK_EQUIVALENT_UNITS];
com.wiris.quizzes.impl.Assertion.BASIC_UNITS_LIST = "m, s, g, A, K, mol, cd, rad, sr, h, min, l, N, Pa, Hz, W, J, C, V, " + com.wiris.system.Utf8.uchr(937) + ", F, S, Wb, b, H, T, lx, lm, Gy, Bq, Sv, kat";
com.wiris.quizzes.impl.Assertion.CURRENCY_UNITS_LIST = "$, " + com.wiris.system.Utf8.uchr(165) + ", " + com.wiris.system.Utf8.uchr(8364) + ", " + com.wiris.system.Utf8.uchr(163) + ", kr, Fr, " + com.wiris.system.Utf8.uchr(8361) + ", " + com.wiris.system.Utf8.uchr(8377) + ", " + com.wiris.system.Utf8.uchr(1056) + com.wiris.system.Utf8.uchr(1091) + com.wiris.system.Utf8.uchr(1073) + ", BTC";
com.wiris.quizzes.impl.Assertion.ANGLE_UNITS_LIST = com.wiris.system.Utf8.uchr(176) + ", ', \"";
com.wiris.quizzes.impl.Assertion.PERCENT_UNITS_LIST = "%, " + com.wiris.system.Utf8.uchr(8240);
com.wiris.quizzes.impl.Assertion.ALL_UNITS_LIST = com.wiris.quizzes.impl.Assertion.ANGLE_UNITS_LIST + ", " + com.wiris.quizzes.impl.Assertion.BASIC_UNITS_LIST + ", " + com.wiris.quizzes.impl.Assertion.PERCENT_UNITS_LIST + ", " + com.wiris.quizzes.impl.Assertion.CURRENCY_UNITS_LIST;
com.wiris.quizzes.impl.AssertionCheckImpl.tagName = "check";
com.wiris.quizzes.impl.AssertionParam.TAGNAME = "param";
com.wiris.quizzes.impl.AuthorAnswerImpl.TAGNAME = "authorAnswer";
com.wiris.quizzes.impl.AuthorAnswerImpl.VALIDATIONS_TAGNAME = "validationAssertions";
com.wiris.quizzes.impl.AuthorAnswerImpl.ATTRIBUTE_ID = "id";
com.wiris.quizzes.impl.CalcDocumentTools.options = [com.wiris.quizzes.api.QuizzesConstants.OPTION_PRECISION,com.wiris.quizzes.api.QuizzesConstants.OPTION_TIMES_OPERATOR,com.wiris.quizzes.api.QuizzesConstants.OPTION_IMAGINARY_UNIT,com.wiris.quizzes.api.QuizzesConstants.OPTION_IMPLICIT_TIMES_OPERATOR,com.wiris.quizzes.api.QuizzesConstants.OPTION_FLOAT_FORMAT,com.wiris.quizzes.api.QuizzesConstants.OPTION_DECIMAL_SEPARATOR,com.wiris.quizzes.api.QuizzesConstants.OPTION_DIGIT_GROUP_SEPARATOR];
com.wiris.quizzes.impl.CalcDocumentTools.QUIZZES_QUESTION_OPTIONS = "quizzes_question_options";
com.wiris.quizzes.impl.ComparisonAssertion.TAGNAME = "comparisonAssertion";
com.wiris.quizzes.impl.ComparisonAssertion.DEFAULT_COMPARISON_MATH = com.wiris.quizzes.api.assertion.ComparisonName.MATHEMATICALLY_EQUAL;
com.wiris.quizzes.impl.ComparisonAssertion.DEFAULT_COMPARISON_GRAPHIC = com.wiris.quizzes.api.assertion.ComparisonName.GRAPHICALLY_EQUAL;
com.wiris.quizzes.impl.ComparisonAssertion.DEFAULT_COMPARISON_STRING = com.wiris.quizzes.api.assertion.ComparisonName.LITERALLY_EQUAL;
com.wiris.quizzes.impl.ConfigurationImpl.CONFIG_FILE = "quizzes.configuration.file";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_CONFIG_FILE = "configuration.ini";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_DIST_CONFIG_FILE = "integration.ini";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_VERSION_FILE = "version.txt";
com.wiris.quizzes.impl.ConfigurationImpl.CONFIG_CLASS = "quizzes.configuration.class";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_CONFIG_CLASS = "";
com.wiris.quizzes.impl.ConfigurationImpl.CONFIG_CLASSPATH = "quizzes.configuration.classpath";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_CONFIG_CLASSPATH = "";
com.wiris.quizzes.impl.ConfigurationImpl.IMAGESCACHE_CLASS = "quizzes.imagescache.class";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_IMAGESCACHE_CLASS = "";
com.wiris.quizzes.impl.ConfigurationImpl.VARIABLESCACHE_CLASS = "quizzes.variablescache.class";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_VARIABLESCACHE_CLASS = "";
com.wiris.quizzes.impl.ConfigurationImpl.LOCKPROVIDER_CLASS = "quizzes.lockprovider.class";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_LOCKPROVIDER_CLASS = "";
com.wiris.quizzes.impl.ConfigurationImpl.ACCESSPROVIDER_CLASS = "quizzes.accessprovider.class";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_ACCESSPROVIDER_CLASS = "";
com.wiris.quizzes.impl.ConfigurationImpl.ACCESSPROVIDER_CLASSPATH = "quizzes.accessprovider.classpath";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_ACCESSPROVIDER_CLASSPATH = "";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_WIRIS_URL = "http://www.wiris.net/demo/wiris";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_WIRISLAUNCHER_URL = "http://stateful.wiris.net/demo/wiris";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_CALC_URL = "https://calcme.com";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_CALC_ENABLED = "true";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_EDITOR_URL = "http://www.wiris.net/demo/editor";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_HAND_URL = "http://www.wiris.net/demo/hand";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_SERVICE_URL = "http://www.wiris.net/demo/quizzes";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_PROXY_URL = "quizzes/service";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_CACHE_DIR = "/var/wiris/cache";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_MAXCONNECTIONS = "20";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_HTTPPROXY_HOST = "";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_HTTPPROXY_PORT = "8080";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_HTTPPROXY_USER = "";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_HTTPPROXY_PASS = "";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_REFERER_URL = "";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_HAND_ENABLED = "true";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_HAND_LOGTRACES = "false";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_SERVICE_OFFLINE = "false";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_CROSSORIGINCALLS_ENABLED = "false";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_RESOURCES_STATIC = "false";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_RESOURCES_URL = "quizzes/resources";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_GRAPH_URL = "http://www.wiris.net/demo/graph";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_VERSION = "";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_DEPLOYMENT_ID = "quizzes-unknown";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_LICENSE_ID = "";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_TELEMETRY_URL = "https://telemetry.wiris.net";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_TELEMETRY_TOKEN = "1lt1OnlX3898VauysJ1nr5ODR8CNfVmB80KGxSSt";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_QUIZZES_LOGGING_LEVEL = "WARNING";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_QUIZZES_TRACKING_ENABLED = "true";
com.wiris.quizzes.impl.ConfigurationImpl.DEF_GRAPH_TRACK_INSTANCES = "true";
com.wiris.quizzes.impl.ConfigurationImpl.config = null;
com.wiris.quizzes.impl.ConfigurationImpl.thisLock = { };
com.wiris.quizzes.impl.ConfigurationImpl.isHttps = false;
com.wiris.quizzes.impl.CorrectAnswer.TAGNAME = "correctAnswer";
com.wiris.quizzes.impl.FileLockProvider.TIMEOUT = 5000;
com.wiris.quizzes.impl.FileLockProvider.WAIT = 100;
com.wiris.quizzes.impl.HTMLTools.POSITION_NONE = -1;
com.wiris.quizzes.impl.HTMLTools.POSITION_ONLY_TEXT = 1;
com.wiris.quizzes.impl.HTMLTools.POSITION_ONLY_MATHML = 2;
com.wiris.quizzes.impl.HTMLTools.POSITION_ALL = 3;
com.wiris.quizzes.impl.HTMLTools.POSITION_TABLE = 4;
com.wiris.quizzes.impl.HTMLTools.SELECTOR_2D = 2;
com.wiris.quizzes.impl.HTMLTools.SELECTOR_1D = 1;
com.wiris.quizzes.impl.HTMLTools.NOT_A_SELECTOR = 0;
com.wiris.quizzes.impl.HTMLTools.MROWS = "@math@mrow@msqrt@mstyle@merror@mpadded@mphantom@mtd@menclose@mscarry@msrow@";
com.wiris.quizzes.impl.HTMLTools.MSUPS = "@msub@msup@msubsup@";
com.wiris.quizzes.impl.HTMLTools.EMPTY_CALCME_SESSION = "<wiriscalc version=\"3.2\">\n" + "  <title>\n" + "    <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n" + "      <mtext></mtext>\n" + "    </math>\n" + "  </title>\n" + "  <session version=\"3.0\">\n" + "      <group>\n" + "        <command>\n" + "          <input>\n" + "            <math xmlns=\"http://www.w3.org/1998/Math/MathML\"/>\n" + "          </input>\n" + "        </command>\n" + "      </group>\n" + "  </session>\n" + "</wiriscalc>";
com.wiris.quizzes.impl.HTMLTools.SAFE_MATHML_LT = com.wiris.system.Utf8.uchr(171);
com.wiris.quizzes.impl.HTMLTools.SAFE_MATHML_GT = com.wiris.system.Utf8.uchr(187);
com.wiris.quizzes.impl.HTMLTools.SAFE_MATHML_QUOT = com.wiris.system.Utf8.uchr(168);
com.wiris.quizzes.impl.HTMLTools.SAFE_MATHML_AMP = com.wiris.system.Utf8.uchr(167);
com.wiris.quizzes.impl.HandwritingConstraints.ALL_SYMBOLS = [com.wiris.system.Utf8.uchr(48),com.wiris.system.Utf8.uchr(49),com.wiris.system.Utf8.uchr(50),com.wiris.system.Utf8.uchr(51),com.wiris.system.Utf8.uchr(52),com.wiris.system.Utf8.uchr(53),com.wiris.system.Utf8.uchr(54),com.wiris.system.Utf8.uchr(55),com.wiris.system.Utf8.uchr(56),com.wiris.system.Utf8.uchr(57),com.wiris.system.Utf8.uchr(97),com.wiris.system.Utf8.uchr(65),com.wiris.system.Utf8.uchr(945),com.wiris.system.Utf8.uchr(98),com.wiris.system.Utf8.uchr(66),com.wiris.system.Utf8.uchr(946),com.wiris.system.Utf8.uchr(99),com.wiris.system.Utf8.uchr(67),com.wiris.system.Utf8.uchr(46),com.wiris.system.Utf8.uchr(183),com.wiris.system.Utf8.uchr(44),com.wiris.system.Utf8.uchr(59),com.wiris.system.Utf8.uchr(46),com.wiris.system.Utf8.uchr(58),com.wiris.system.Utf8.uchr(100),com.wiris.system.Utf8.uchr(68),com.wiris.system.Utf8.uchr(948),com.wiris.system.Utf8.uchr(916),com.wiris.system.Utf8.uchr(247),com.wiris.system.Utf8.uchr(47),com.wiris.system.Utf8.uchr(101),com.wiris.system.Utf8.uchr(69),com.wiris.system.Utf8.uchr(958),com.wiris.system.Utf8.uchr(61),com.wiris.system.Utf8.uchr(8776),com.wiris.system.Utf8.uchr(8707),com.wiris.system.Utf8.uchr(102),com.wiris.system.Utf8.uchr(70),com.wiris.system.Utf8.uchr(8704),com.wiris.system.Utf8.uchr(103),com.wiris.system.Utf8.uchr(71),com.wiris.system.Utf8.uchr(947),com.wiris.system.Utf8.uchr(915),com.wiris.system.Utf8.uchr(8805),com.wiris.system.Utf8.uchr(62),com.wiris.system.Utf8.uchr(104),com.wiris.system.Utf8.uchr(72),com.wiris.system.Utf8.uchr(105),com.wiris.system.Utf8.uchr(73),com.wiris.system.Utf8.uchr(8712),com.wiris.system.Utf8.uchr(8734),com.wiris.system.Utf8.uchr(8747),com.wiris.system.Utf8.uchr(106),com.wiris.system.Utf8.uchr(74),com.wiris.system.Utf8.uchr(107),com.wiris.system.Utf8.uchr(75),com.wiris.system.Utf8.uchr(954),com.wiris.system.Utf8.uchr(108),com.wiris.system.Utf8.uchr(76),com.wiris.system.Utf8.uchr(955),com.wiris.system.Utf8.uchr(923),com.wiris.system.Utf8.uchr(8804),com.wiris.system.Utf8.uchr(123),com.wiris.system.Utf8.uchr(91),com.wiris.system.Utf8.uchr(40),com.wiris.system.Utf8.uchr(60),com.wiris.system.Utf8.uchr(109),com.wiris.system.Utf8.uchr(77),com.wiris.system.Utf8.uchr(956),com.wiris.system.Utf8.uchr(110),com.wiris.system.Utf8.uchr(78),com.wiris.system.Utf8.uchr(951),com.wiris.system.Utf8.uchr(8800),com.wiris.system.Utf8.uchr(111),com.wiris.system.Utf8.uchr(79),com.wiris.system.Utf8.uchr(112),com.wiris.system.Utf8.uchr(80),com.wiris.system.Utf8.uchr(961),com.wiris.system.Utf8.uchr(966),com.wiris.system.Utf8.uchr(934),com.wiris.system.Utf8.uchr(960),com.wiris.system.Utf8.uchr(928),com.wiris.system.Utf8.uchr(968),com.wiris.system.Utf8.uchr(936),com.wiris.system.Utf8.uchr(177),com.wiris.system.Utf8.uchr(8242),com.wiris.system.Utf8.uchr(113),com.wiris.system.Utf8.uchr(81),com.wiris.system.Utf8.uchr(114),com.wiris.system.Utf8.uchr(82),com.wiris.system.Utf8.uchr(8594),com.wiris.system.Utf8.uchr(125),com.wiris.system.Utf8.uchr(93),com.wiris.system.Utf8.uchr(41),com.wiris.system.Utf8.uchr(115),com.wiris.system.Utf8.uchr(83),com.wiris.system.Utf8.uchr(963),com.wiris.system.Utf8.uchr(931),com.wiris.system.Utf8.uchr(8730),com.wiris.system.Utf8.uchr(8721),com.wiris.system.Utf8.uchr(8719),com.wiris.system.Utf8.uchr(116),com.wiris.system.Utf8.uchr(84),com.wiris.system.Utf8.uchr(964),com.wiris.system.Utf8.uchr(952),com.wiris.system.Utf8.uchr(920),com.wiris.system.Utf8.uchr(117),com.wiris.system.Utf8.uchr(85),com.wiris.system.Utf8.uchr(118),com.wiris.system.Utf8.uchr(86),com.wiris.system.Utf8.uchr(957),com.wiris.system.Utf8.uchr(119),com.wiris.system.Utf8.uchr(87),com.wiris.system.Utf8.uchr(969),com.wiris.system.Utf8.uchr(937),com.wiris.system.Utf8.uchr(120),com.wiris.system.Utf8.uchr(88),com.wiris.system.Utf8.uchr(967),com.wiris.system.Utf8.uchr(215),com.wiris.system.Utf8.uchr(121),com.wiris.system.Utf8.uchr(89),com.wiris.system.Utf8.uchr(122),com.wiris.system.Utf8.uchr(90),com.wiris.system.Utf8.uchr(950),com.wiris.system.Utf8.uchr(124),com.wiris.system.Utf8.uchr(45),com.wiris.system.Utf8.uchr(33),com.wiris.system.Utf8.uchr(43),com.wiris.system.Utf8.uchr(126),com.wiris.system.Utf8.uchr(94),com.wiris.system.Utf8.uchr(176),com.wiris.system.Utf8.uchr(8364),com.wiris.system.Utf8.uchr(36),com.wiris.system.Utf8.uchr(163),com.wiris.system.Utf8.uchr(37),com.wiris.system.Utf8.uchr(8240),com.wiris.system.Utf8.uchr(8706),com.wiris.system.Utf8.uchr(8711),com.wiris.system.Utf8.uchr(949),com.wiris.system.Utf8.uchr(8709),com.wiris.system.Utf8.uchr(8746),com.wiris.system.Utf8.uchr(8745),com.wiris.system.Utf8.uchr(8834),com.wiris.system.Utf8.uchr(8835),com.wiris.system.Utf8.uchr(8838),com.wiris.system.Utf8.uchr(8839),com.wiris.system.Utf8.uchr(8473),com.wiris.system.Utf8.uchr(8469),com.wiris.system.Utf8.uchr(8484),com.wiris.system.Utf8.uchr(8474),com.wiris.system.Utf8.uchr(8450),com.wiris.system.Utf8.uchr(8477),com.wiris.system.Utf8.uchr(120128),com.wiris.system.Utf8.uchr(8658),com.wiris.system.Utf8.uchr(9180),com.wiris.system.Utf8.uchr(8743),com.wiris.system.Utf8.uchr(8744),com.wiris.system.Utf8.uchr(35),"...","cos","cm","dm","lim","log","sin","tan","frac"];
com.wiris.quizzes.impl.HandwritingConstraints.GENERAL = "General";
com.wiris.quizzes.impl.HandwritingConstraints.FRACTIONS = "Fraction";
com.wiris.quizzes.impl.HandwritingConstraints.BIGOPERATORS = "BigOperator";
com.wiris.quizzes.impl.HandwritingConstraints.RADICALS = "Radical";
com.wiris.quizzes.impl.HandwritingConstraints.PIECEWISE = "PiecewiseFunction";
com.wiris.quizzes.impl.HandwritingConstraints.MATRICES = "Matrix";
com.wiris.quizzes.impl.HandwritingConstraints.MULTILINE = "Multiline";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISMULTICHOICE = "wirismultichoice";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISOPENANSWER = "wirisopenanswer";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISESSAY = "wirisessay";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISPREVIEW = "wirispreview";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISVARIABLES = "wirisvariables";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISVALIDATION = "wirisvalidation";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISTEACHERANSWER = "wiristeacheranswer";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISAUXILIARCAS = "wirisauxiliarcas";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISAUXILIARTEXTINPUT = "wirisauxiliartextinput";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISAUXILIARCASREPLACEEDITOR = "wirisauxiliarcasreplaceeditor";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISAUXILIARYCAS = "wirisauxiliarycas";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISAUXILIARYTEXTINPUT = "wirisauxiliarytextinput";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISAUXILIARYCASREPLACEEDITOR = "wirisauxiliarycasreplaceeditor";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISGRADINGFUNCTION = "wirisgradingfunction";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISGRAPHICSYNTAX = "wirisgraphicsyntax";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISANSWERFIELDINLINEEDITOR = "wirisanswerfieldinlineeditor";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISANSWERFIELDPOPUPEDITOR = "wirisanswerfieldpopupeditor";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISANSWERFIELDPLAINTEXT = "wirisanswerfieldplaintext";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISANSWERFEEDBACK = "wirisanswerfeedback";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISEMBEDDEDFEEDBACK = "wirisembeddedfeedback";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISASSERTIONSFEEDBACK = "wirisassertionsfeedback";
com.wiris.quizzes.impl.HtmlUiConfig.WIRISCORRECTFEEDBACK = "wiriscorrectfeedback";
com.wiris.quizzes.impl.InitialContent.TAGNAME = "initialContent";
com.wiris.quizzes.impl.LocalData.TAGNAME = "data";
com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_COMPOUND_ANSWER = com.wiris.quizzes.api.QuizzesConstants.PROPERTY_COMPOUND_ANSWER;
com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_INPUT_FIELD = com.wiris.quizzes.api.QuizzesConstants.PROPERTY_ANSWER_FIELD_TYPE;
com.wiris.quizzes.impl.LocalData.KEY_SHOW_CAS = com.wiris.quizzes.api.QuizzesConstants.PROPERTY_SHOW_CAS;
com.wiris.quizzes.impl.LocalData.KEY_CAS_INITIAL_SESSION = com.wiris.quizzes.api.QuizzesConstants.PROPERTY_CAS_INITIAL_SESSION;
com.wiris.quizzes.impl.LocalData.KEY_CAS_SESSION = com.wiris.quizzes.api.QuizzesConstants.PROPERTY_CAS_SESSION;
com.wiris.quizzes.impl.LocalData.KEY_SHOW_AUXILIARY_TEXT_INPUT = com.wiris.quizzes.api.QuizzesConstants.PROPERTY_SHOW_AUXILIARY_TEXT_INPUT;
com.wiris.quizzes.impl.LocalData.KEY_AUXILIARY_TEXT = com.wiris.quizzes.api.QuizzesConstants.PROPERTY_AUXILIARY_TEXT;
com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_COMPOUND_ANSWER_GRADE = com.wiris.quizzes.api.QuizzesConstants.PROPERTY_COMPOUND_ANSWER_GRADE;
com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTION = com.wiris.quizzes.api.QuizzesConstants.PROPERTY_COMPOUND_ANSWER_GRADE_DISTRIBUTION;
com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_GRAPH_TOOLBAR = com.wiris.quizzes.api.QuizzesConstants.GRAPH_TOOLBAR;
com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_HANDWRITING_CONSTRAINTS = "handwritingConstraints";
com.wiris.quizzes.impl.LocalData.KEY_ITEM_SEPARATOR = "itemSeparator";
com.wiris.quizzes.impl.LocalData.KEY_AUXILIARY_CAS_HIDE_FILE_MENU = "auxiliaryCasHideFileMenu";
com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_TRUE = com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_COMPOUND_ANSWER_TRUE;
com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_FALSE = com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_COMPOUND_ANSWER_FALSE;
com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_INPUT_FIELD_INLINE_EDITOR = com.wiris.quizzes.api.QuizzesConstants.ANSWER_FIELD_TYPE_INLINE_EDITOR;
com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_INPUT_FIELD_POPUP_EDITOR = com.wiris.quizzes.api.QuizzesConstants.ANSWER_FIELD_TYPE_POPUP_EDITOR;
com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_INPUT_FIELD_PLAIN_TEXT = com.wiris.quizzes.api.QuizzesConstants.ANSWER_FIELD_TYPE_TEXT;
com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_INPUT_FIELD_INLINE_HAND = "inlineHand";
com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_INPUT_FIELD_INLINE_GRAPH = "inlineGraph";
com.wiris.quizzes.impl.LocalData.VALUE_SHOW_CAS_FALSE = com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_SHOW_CAS_FALSE;
com.wiris.quizzes.impl.LocalData.VALUE_SHOW_CAS_ADD = com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_SHOW_CAS_ADD;
com.wiris.quizzes.impl.LocalData.VALUE_SHOW_CAS_REPLACE_INPUT = com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_SHOW_CAS_REPLACE;
com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_GRADE_AND = com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_COMPOUND_ANSWER_GRADE_AND;
com.wiris.quizzes.impl.LocalData.VALUE_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTE = com.wiris.quizzes.api.QuizzesConstants.PROPERTY_VALUE_COMPOUND_ANSWER_GRADE_DISTRIBUTE;
com.wiris.quizzes.impl.LocalData.VALUE_AUXILIARY_CAS_HIDE_FILE_MENU_TRUE = "true";
com.wiris.quizzes.impl.LocalData.VALUE_AUXILIARY_CAS_HIDE_FILE_MENU_FALSE = "false";
com.wiris.quizzes.impl.LocalData.KEY_ELEMENTS_TO_HANDWRITE = "elementsToHandwrite";
com.wiris.quizzes.impl.LocalData.KEY_GRAPH_LOCK_INITIAL_CONTENT = "graphLockInitialContent";
com.wiris.quizzes.impl.LocalData.KEY_GRAPH_SHOW_NAME_IN_LABEL = "graphShowNameInLabel";
com.wiris.quizzes.impl.LocalData.KEY_GRAPH_SHOW_VALUE_IN_LABEL = "graphShowValueInLabel";
com.wiris.quizzes.impl.LocalData.VALUE_NEVER = "never";
com.wiris.quizzes.impl.LocalData.VALUE_ALWAYS = "always";
com.wiris.quizzes.impl.LocalData.VALUE_FOCUS = "focus";
com.wiris.quizzes.impl.LocalData.KEY_GRAPH_MAGNETIC_GRID = "graphMagneticGrid";
com.wiris.quizzes.impl.LocalData.VALUE_SNAP = "snap";
com.wiris.quizzes.impl.LocalData.keys = [com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_COMPOUND_ANSWER,com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_INPUT_FIELD,com.wiris.quizzes.impl.LocalData.KEY_SHOW_CAS,com.wiris.quizzes.impl.LocalData.KEY_CAS_INITIAL_SESSION,com.wiris.quizzes.impl.LocalData.KEY_CAS_SESSION,com.wiris.quizzes.impl.LocalData.KEY_SHOW_AUXILIARY_TEXT_INPUT,com.wiris.quizzes.impl.LocalData.KEY_AUXILIARY_TEXT,com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_COMPOUND_ANSWER_GRADE,com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_COMPOUND_ANSWER_GRADE_DISTRIBUTION,com.wiris.quizzes.impl.LocalData.KEY_OPENANSWER_GRAPH_TOOLBAR,com.wiris.quizzes.impl.LocalData.KEY_AUXILIARY_CAS_HIDE_FILE_MENU,com.wiris.quizzes.impl.LocalData.KEY_ELEMENTS_TO_HANDWRITE,com.wiris.quizzes.impl.LocalData.KEY_GRAPH_LOCK_INITIAL_CONTENT,com.wiris.quizzes.impl.LocalData.KEY_GRAPH_SHOW_NAME_IN_LABEL,com.wiris.quizzes.impl.LocalData.KEY_GRAPH_SHOW_VALUE_IN_LABEL,com.wiris.quizzes.impl.LocalData.KEY_GRAPH_MAGNETIC_GRID];
com.wiris.quizzes.impl.MaxConnectionsHttpImpl.CONNECTION_TIMEOUT = 60;
com.wiris.quizzes.impl.MaxConnectionsHttpImpl.DATA_KEY_MAX_CONNECTIONS = "wiris_maxconnections";
com.wiris.quizzes.impl.MultipleQuestionRequest.tagName = "processQuestions";
com.wiris.quizzes.impl.MultipleQuestionResponse.tagName = "processQuestionsResult";
com.wiris.quizzes.impl.QuizzesServiceImpl.USE_CACHE = true;
com.wiris.quizzes.impl.QuizzesServiceImpl.PROTOCOL_REST = 0;
com.wiris.quizzes.impl.QuizzesServiceImpl.deploymentId = null;
com.wiris.quizzes.impl.QuizzesServiceImpl.licenseId = null;
com.wiris.quizzes.impl.Option.options = [com.wiris.quizzes.api.QuizzesConstants.OPTION_RELATIVE_TOLERANCE,com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE,com.wiris.quizzes.api.QuizzesConstants.OPTION_PRECISION,com.wiris.quizzes.api.QuizzesConstants.OPTION_TIMES_OPERATOR,com.wiris.quizzes.api.QuizzesConstants.OPTION_IMAGINARY_UNIT,com.wiris.quizzes.api.QuizzesConstants.OPTION_EXPONENTIAL_E,com.wiris.quizzes.api.QuizzesConstants.OPTION_NUMBER_PI,com.wiris.quizzes.api.QuizzesConstants.OPTION_IMPLICIT_TIMES_OPERATOR,com.wiris.quizzes.api.QuizzesConstants.OPTION_FLOAT_FORMAT,com.wiris.quizzes.api.QuizzesConstants.OPTION_DECIMAL_SEPARATOR,com.wiris.quizzes.api.QuizzesConstants.OPTION_DIGIT_GROUP_SEPARATOR,com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER,com.wiris.quizzes.api.QuizzesConstants.OPTION_STUDENT_ANSWER_PARAMETER_NAME,com.wiris.quizzes.api.QuizzesConstants.OPTION_TOLERANCE_DIGITS];
com.wiris.quizzes.impl.Parameter.tagName = "parameter";
com.wiris.quizzes.impl.ProcessGetCheckAssertions.tagName = "getCheckAssertions";
com.wiris.quizzes.impl.ProcessGetFeaturedAssertions.TAGNAME = "getFeaturedAssertions";
com.wiris.quizzes.impl.ProcessGetFeaturedSyntaxAssertions.TAGNAME = "getFeaturedSyntaxAssertions";
com.wiris.quizzes.impl.ProcessGetTranslation.tagName = "getTranslation";
com.wiris.quizzes.impl.ProcessGetVariables.TAGNAME = "getVariables";
com.wiris.quizzes.impl.ProcessStoreQuestion.TAGNAME = "storeQuestion";
com.wiris.quizzes.impl.Property.tagName = "property";
com.wiris.quizzes.impl.QuestionImpl.defaultOptions = null;
com.wiris.quizzes.impl.QuestionImpl.TAGNAME = "question";
com.wiris.quizzes.impl.QuestionImpl.NO_DEPRECATED = 0;
com.wiris.quizzes.impl.QuestionImpl.DEPRECATED_COMPATIBLE = 1;
com.wiris.quizzes.impl.QuestionImpl.DEPRECATED_NEEDS_CHECK = 2;
com.wiris.quizzes.impl.QuestionImpl.EQUIVALENT_SET_NO_AVAILABLE = "equivalent_set_no_available";
com.wiris.quizzes.impl.QuestionImpl.EQUIVALENT_SET_ASSERTION = "quizzes_studio_equivalent_set_assertion";
com.wiris.quizzes.impl.QuestionImpl.SYNTAX_LIST_ASSERTION = "quizzes_studio_syntax_list_assertion";
com.wiris.quizzes.impl.QuestionImpl.TEXT_LOGIC_OPERATORS = "quizzes_studio_text_logic_operators";
com.wiris.quizzes.impl.QuestionImpl.EQUIVALENT_UNIT_LITERAL = "quizzes_studio_equivalent_unit_literal";
com.wiris.quizzes.impl.QuestionInstanceImpl.__meta__ = { fields : { getCompoundAnswerGrade : { Deprecated : null}, getAnswerGrade : { Deprecated : null}, getMatchingCorrectAnswer : { Deprecated : null}, isAnswerMatching : { Deprecated : null}}};
com.wiris.quizzes.impl.QuestionInstanceImpl.tagName = "questionInstance";
com.wiris.quizzes.impl.QuestionInstanceImpl.DEF_ALGORITHM_LANGUAGE = "en";
com.wiris.quizzes.impl.QuestionInstanceImpl.KEY_ALGORITHM_LANGUAGE = "sessionLang";
com.wiris.quizzes.impl.QuestionRequestImpl.tagName = "processQuestion";
com.wiris.quizzes.impl.QuestionResponseImpl.tagName = "processQuestionResult";
com.wiris.quizzes.impl.QuizzesTranslator.languages = null;
com.wiris.quizzes.impl.QuizzesTranslator.available = null;
com.wiris.quizzes.impl.QuizzesUIBuilderImpl.__meta__ = { obj : { Deprecated : null}};
com.wiris.quizzes.impl.ResultError.tagName = "error";
com.wiris.quizzes.impl.ResultError.TYPE_MATHSYNTAX = "mathSyntax";
com.wiris.quizzes.impl.ResultError.TYPE_PARAMVALUE = "paramValue";
com.wiris.quizzes.impl.ResultErrorLocation.tagName = "location";
com.wiris.quizzes.impl.ResultGetCheckAssertions.tagName = "getCheckAssertionsResult";
com.wiris.quizzes.impl.ResultGetFeaturedAssertions.tagName = "getFeaturedAssertionsResult";
com.wiris.quizzes.impl.ResultGetFeaturedSyntaxAssertions.tagName = "getFeaturedSyntaxAssertionsResult";
com.wiris.quizzes.impl.ResultGetTranslation.tagName = "getTranslationResult";
com.wiris.quizzes.impl.ResultGetVariables.tagName = "getVariablesResult";
com.wiris.quizzes.impl.ResultStoreQuestion.tagName = "storeQuestionResult";
com.wiris.quizzes.impl.SharedVariables.h = null;
com.wiris.quizzes.impl.SlotImpl.TAGNAME = "slot";
com.wiris.quizzes.impl.SlotImpl.ATTRIBUTE_ID = "id";
com.wiris.quizzes.impl.SlotImpl.AUTHORANSWERS_TAGNAME = "authorAnswers";
com.wiris.quizzes.impl.SlotImpl.LOCALDATA_TAGNAME = "localData";
com.wiris.quizzes.impl.Strings.lang = [["lang","ca"],["parameter","paràmetre"],["answer","resposta"],["lang","da"],["parameter","parameter"],["answer","svar"],["lang","de"],["parameter","parameter"],["answer","antwort"],["lang","el"],["parameter","παράμετρος"],["answer","απάντηση"],["lang","en"],["parameter","parameter"],["answer","answer"],["lang","es"],["parameter","parámetro"],["answer","respuesta"],["lang","fr"],["parameter","paramètre"],["answer","réponse"],["lang","it"],["parameter","parametro"],["answer","risposta"],["lang","no"],["parameter","parameter"],["answer","svar"],["lang","nn"],["parameter","parameter"],["answer","svar"],["lang","pt"],["parameter","parâmetro"],["answer","resposta"],["lang","pt_br"],["parameter","parâmetro"],["answer","resposta"],["lang","ru"],["parameter","параметр"],["answer","ответ"],["lang","zh"],["parameter","参数"],["answer","答案"]];
com.wiris.quizzes.impl.SyntaxAssertion.TAGNAME = "syntaxAssertion";
com.wiris.quizzes.impl.TranslationNameChange.tagName = "nameChange";
com.wiris.quizzes.impl.UserData.TAGNAME = "userData";
com.wiris.quizzes.impl.ValidationAssertion.TAGNAME = "validationAssertion";
com.wiris.quizzes.impl.Variable.tagName = "variable";
com.wiris.util.ui.component.Component.CLASS_COMPONENT = "component";
com.wiris.util.ui.component.Component.CLASS_APP = "app";
com.wiris.util.ui.component.Component.CLASS_MAIN_CONTENT = "mainContent";
com.wiris.util.ui.component.Component.CLASS_INTERESTING = "interesting";
com.wiris.util.ui.component.Component.CLASS_FOCUSED = "focused";
com.wiris.util.ui.component.Component.CLASS_HIDDEN = "hidden";
com.wiris.util.ui.component.Panel.CLASS_PANEL = "panel";
com.wiris.util.ui.component.Panel.CLASS_PANEL_SOLID = "panelSolid";
com.wiris.util.ui.component.Panel.CLASS_PANEL_DARK_BACKGROUND = "panelDarkBackground";
com.wiris.util.ui.component.Panel.CLASS_PANEL_LIGHT_BACKGROUND = "panelLightBackground";
com.wiris.util.ui.component.Panel.CLASS_PANEL_CARD = "panelCard";
com.wiris.util.ui.component.FlowPanel.CLASS_FLOW_PANEL = "flowPanel";
com.wiris.util.ui.component.FlowPanel.CLASS_FLOW_PANEL_LEFT_TO_RIGHT = "flowPanelLeftToRight";
com.wiris.util.ui.component.FlowPanel.CLASS_FLOW_PANEL_LEFT_TO_RIGHT_WITH_WRAP = "flowPanelLeftToRightWithWrap";
com.wiris.util.ui.component.FlowPanel.CLASS_FLOW_PANEL_TOP_TO_BOTTOM = "flowPanelTopToBottom";
com.wiris.util.ui.component.FlowPanel.CLASS_FLOW_PANEL_RIGHT_TO_LEFT = "flowPanelRightToLeft";
com.wiris.util.ui.component.FlowPanel.CLASS_FLOW_PANEL_RIGHT_TO_LEFT_WITH_WRAP = "flowPanelRightToLeftWithWrap";
com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT = 0;
com.wiris.util.ui.component.FlowPanel.DIRECTION_LEFT_TO_RIGHT_WITH_WRAP = 1;
com.wiris.util.ui.component.FlowPanel.DIRECTION_TOP_TO_BOTTOM = 2;
com.wiris.util.ui.component.FlowPanel.DIRECTION_RIGHT_TO_LEFT = 3;
com.wiris.util.ui.component.FlowPanel.DIRECTION_RIGHT_TO_LEFT_WITH_WRAP = 4;
com.wiris.util.ui.component.FlowPanel.DIRECTION_CLASSES = [com.wiris.util.ui.component.FlowPanel.CLASS_FLOW_PANEL_LEFT_TO_RIGHT,com.wiris.util.ui.component.FlowPanel.CLASS_FLOW_PANEL_LEFT_TO_RIGHT_WITH_WRAP,com.wiris.util.ui.component.FlowPanel.CLASS_FLOW_PANEL_TOP_TO_BOTTOM,com.wiris.util.ui.component.FlowPanel.CLASS_FLOW_PANEL_RIGHT_TO_LEFT,com.wiris.util.ui.component.FlowPanel.CLASS_FLOW_PANEL_RIGHT_TO_LEFT_WITH_WRAP];
com.wiris.quizzes.impl.ui.AnswerFeedbackImpl.CLASS_QUIZZES_ANSWER_FEEDBACK = "quizzesAnswerFeedback";
com.wiris.quizzes.impl.ui.AnswerFieldImpl.CLASS_QUIZZES_ANSWER_FIELD = "quizzesAnswerField";
com.wiris.quizzes.impl.ui.AnswerFieldImpl.CLASS_QUIZZES_ANSWER_FIELD_DIALOG = "quizzesAnswerFieldDialog";
com.wiris.quizzes.impl.ui.AnswerFieldImpl.CLASS_QUIZZES_EMBEDDED_ANSWER_FIELD = "quizzesEmbeddedAnswerField";
com.wiris.quizzes.impl.ui.AnswerFieldImpl.STUDENT_ANSWER_CHANGED_ACTION_ID = "studentAnswerChanged";
com.wiris.quizzes.impl.ui.AnswerFieldImpl.CLASS_READ_ONLY = "readOnly";
com.wiris.quizzes.impl.ui.AnswerFieldImpl.MAX_ATTEMPTS_TO_EXPAND_INITIAL_CONTENT_VARIABLES = 5;
com.wiris.quizzes.impl.ui.AuthoringFieldImpl.__meta__ = { fields : { showAuxiliarTextInput : { Deprecated : null}, showAuxiliarCasReplaceEditor : { Deprecated : null}, showAuxiliarCas : { Deprecated : null}, showPreviewTab : { Deprecated : null}, showVariablesTab : { Deprecated : null}, showValidationTab : { Deprecated : null}, showCorrectAnswerTab : { Deprecated : null}}};
com.wiris.quizzes.impl.ui.AuthoringFieldImpl.CLASS_QUIZZES_AUTHORING_FIELD = "quizzesAuthoringField";
com.wiris.quizzes.impl.ui.AuthoringFieldImpl.AUTHORING_FIELD_CONTENT_CHANGED = "authoringFieldContentChanged";
com.wiris.quizzes.impl.ui.AuthoringFieldImpl.AUTHORING_FIELD_CONTENT_CHANGE_STARTED = "authoringFieldContentChangeStarted";
com.wiris.quizzes.impl.ui.AuthoringFieldImpl.DEPRECATED_MESSAGE_TITLE = "quizzes_studio_import_deprecated_message_title";
com.wiris.quizzes.impl.ui.AuthoringFieldImpl.DEPRECATED_MESSAGE_TEXT = "quizzes_studio_import_deprecated_message_text";
com.wiris.quizzes.impl.ui.AuthoringFieldImpl.DEPRECATED_MESSAGE_BUTTON = "quizzes_studio_import_dialog_confirm_button_label";
com.wiris.quizzes.impl.ui.AuthoringFieldImpl.hasShownDeprecatedWarning = false;
com.wiris.quizzes.impl.ui.AuxiliaryCalcInputImpl.CLASS_QUIZZES_AUXILIARY_CALCME_INPUT = "quizzesAuxiliaryCalcMeInput";
com.wiris.quizzes.impl.ui.AuxiliaryCalcInputImpl.ACTION_ID_AUXILIARY_CALC_ME_CONTENT_CHANGED = "auxiliaryCalcMeContentChanged";
com.wiris.util.ui.component.ShadowComponent.CLASS_SHADOW_COMPONENT = "shadowComponent";
com.wiris.quizzes.impl.ui.EmbeddedAuthoringField.__meta__ = { fields : { showAuxiliarTextInput : { Deprecated : null}, showAuxiliarCasReplaceEditor : { Deprecated : null}, showAuxiliarCas : { Deprecated : null}, showPreviewTab : { Deprecated : null}, showVariablesTab : { Deprecated : null}, showValidationTab : { Deprecated : null}, showCorrectAnswerTab : { Deprecated : null}}};
com.wiris.quizzes.impl.ui.EmbeddedAuthoringField.CLASS_QUIZZES_EMBEDDED_AUTHORING_FIELD = "quizzesEmbeddedAuthoringField";
com.wiris.quizzes.impl.ui.QuizzesContext.DEFAULT_LANG = "en";
com.wiris.quizzes.impl.ui.QuizzesContext.AVAILABLE_LANGS = "ca,da,de,el,en,es,fr,it,no,nn,pt,pt_br,ru,zh";
com.wiris.quizzes.impl.ui.QuizzesContext.GRAPH_AVAILABLE_LANGS = "ca,da,de,el,en,es,fr,it,nl,no,pt";
com.wiris.quizzes.impl.ui.QuizzesContext.UTM_SUFFIX = "utm_source=Product&utm_medium=WQStudio&utm_campaign=N/A";
com.wiris.quizzes.impl.ui.QuizzesStudioContext.GRAPHICAL_ELEMENT_NOT_ACTIVE = -1.0;
com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_INITIAL_CONTENT = 0;
com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_CORRECT_ANSWER = 1;
com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_GETTING_STARTED = 0;
com.wiris.quizzes.impl.ui.QuizzesStudioContext.HOME_PAGE_STATUS_SHOW_MAIN_CONTENT = 1;
com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent.STUDENT_ANSWER_FEEDBACK_LABEL_INDETERMINATE = "quizzes_studio_test_question_student_answer_feedback_label";
com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent.STUDENT_ANSWER_FEEDBACK_LABEL_CORRECT = "quizzes_studio_test_question_student_answer_feedback_correct_label";
com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent.STUDENT_ANSWER_FEEDBACK_LABEL_PARTIALLY_CORRECT = "quizzes_studio_test_question_student_answer_feedback_partially_correct_label";
com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent.STUDENT_ANSWER_FEEDBACK_LABEL_ERROR = "quizzes_studio_test_question_student_answer_feedback_incorrect_label";
com.wiris.quizzes.impl.ui.component.AnswerFeedbackComponent.CLASS_STUDENT_ANSWER_FEEDBACK = "studentAnswerFeedback";
com.wiris.util.ui.component.InputComponent.CLASS_INPUT_COMPONENT = "inputComponent";
com.wiris.util.ui.component.InputComponent.CLASS_INPUT_COMPONENT_CORRECT = "inputComponentCorrect";
com.wiris.util.ui.component.InputComponent.CLASS_INPUT_COMPONENT_ERROR = "inputComponentError";
com.wiris.util.ui.component.InputComponent.CLASS_INPUT_COMPONENT_WARNING = "inputComponentWarning";
com.wiris.util.ui.component.InputComponent.STATUS_INDETERMINATE = 0;
com.wiris.util.ui.component.InputComponent.STATUS_CORRECT = 1;
com.wiris.util.ui.component.InputComponent.STATUS_WARNING = 2;
com.wiris.util.ui.component.InputComponent.STATUS_ERROR = 3;
com.wiris.quizzes.impl.ui.component.MathTypeInputComponent.CLASS_MATH_TYPE_COMPONENT = "mathTypeComponent";
com.wiris.quizzes.impl.ui.component.MathTypeInputComponent.ACTION_HAND_OPENED_ID = "handOpened";
com.wiris.quizzes.impl.ui.component.MathTypeInputComponent.ACTION_HAND_CLOSED_ID = "handClosed";
com.wiris.quizzes.impl.ui.component.MathTypeInputComponent.EMPTY_MATHML = "<math xmlns=\"http://www.w3.org/1998/Math/MathML\"/>";
com.wiris.quizzes.impl.ui.component.AuthoringFieldMathTypeComponent.CONTENT_CHANGED = "authoringFieldMathTypeContentChanged";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_TITLE = "quizzes_studio_summary_title";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_INPUT_METHOD_TITLE = "quizzes_studio_summary_input_method_title";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_ALLOWED_INPUT_TITLE = "quizzes_studio_summary_allowed_input_title";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_COMPARISON_TITLE = "quizzes_studio_summary_comparison_title";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_PROPERTIES_TITLE = "quizzes_studio_summary_properties_title";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_VARIABLES_TITLE = "quizzes_studio_summary_variables_title";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_FROM_PRECISION_LABEL = "quizzes_studio_summary_from_precision_label";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_UP_TO_PRECISION_LABEL = "quizzes_studio_summary_up_to_precision_label";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_SIGNIFICANT_FIGURES_LABEL = "quizzes_studio_summary_significant_figures_label";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_DECIMAL_PLACES_LABEL = "quizzes_studio_summary_decimal_places_label";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_PERCENT_ERROR_LABEL = "quizzes_studio_summary_percent_error_label";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_ABSOLUTE_ERROR_LABEL = "quizzes_studio_summary_absolute_error_label";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_INLINE_HAND_LABEL = "quizzes_studio_summary_inline_hand_label";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_PRECISION_LABEL = "quizzes_studio_summary_precision_label";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_HAS_ALGORITHM_LABEL = "quizzes_studio_summary_has_algorithm_label";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_INPUT_METHOD_ID = "inputMethod";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_ALLOWED_INPUT_ID = "allowedInput";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_COMPARISON_ID = "comparison";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_PROPERTIES_ID = "properties";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.QUIZZES_STUDIO_SUMMARY_VARIABLES_ID = "variables";
com.wiris.quizzes.impl.ui.component.AuthoringFieldSummaryComponent.CLASS_AUTHORING_FIELD_SUMMARY = "authoringFieldSummary";
com.wiris.util.ui.component.ActivityPanel.CLASS_ACTIVITY_PANEL = "activityPanel";
com.wiris.quizzes.impl.ui.component.AuxiliaryInitialContentActivity.AUXILIAR_INITIAL_CONTENT_LABEL = "quizzes_studio_auxiliar_initial_content_calcme_label";
com.wiris.quizzes.impl.ui.component.AuxiliaryInitialContentActivity.CLASS_CALC_ME_LABEL = "calcMeLabel";
com.wiris.quizzes.impl.ui.component.CalcMeInputComponent.CLASS_CALC_ME_COMPONENT = "calcMeComponent";
com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_FIELD_ID = "compoundAnswer";
com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_FIELD_LABEL = "quizzes_studio_input_options_compound_answer_title";
com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_LABEL_GRADE_ANSWER_BOXES_SEPARATELY = "quizzes_studio_input_options_compound_answer_grade_answer_boxes_separately_label";
com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_LABEL_ALL_ANSWERS_CORRECT = "quizzes_studio_input_options_compound_answer_all_answers_correct_label";
com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_HELPER_TEXT_GRADE_ANSWER_BOXES_SEPARATELY = "quizzes_studio_input_options_compound_answer_grade_answer_boxes_separately_helper_text";
com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_HELPER_TEXT_ALL_ANSWERS_CORRECT = "quizzes_studio_input_options_compound_answer_all_answers_correct_helper_text";
com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_ID_GRADE_ANSWER_BOXES_SEPARATELY = "gradeAnswersSeparately";
com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_ID_ALL_ANSWERS_CORRECT = "allAnswersCorrect";
com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_ID_RATIOS_CHANGED = "compoundAnswerRatiosChanged";
com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_LABEL_ANSWER_COLUMN = "quizzes_studio_input_options_compound_answer_table_answer_column_label";
com.wiris.quizzes.impl.ui.component.CompoundAnswerComponent.COMPOUND_ANSWER_LABEL_GRADE_WEIGHT_COLUMN = "quizzes_studio_input_options_compound_answer_table_grade_weight_column_label";
com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.CUSTOMIZE_TOOLBAR_LABEL = "quizzes_studio_customize_graph_toolbar_label";
com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.CUSTOMIZE_TOOLBAR_HEADER = "quizzes_studio_customize_graph_toolbar_header";
com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.CUSTOMIZE_TOOLBAR_HEIGHT = 450;
com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.CLASS_CUSTOMIZE_TOOLBAR_COMPONENT = "customizeToolbarComponent";
com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.GRAPH_VIEW_ID = "customGraphId";
com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.QUIZZES_GRAPH_ACTIONS = "graph_actions.json";
com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.QUIZZES_STANDARD_CONFIG = "graph_config.json";
com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.QUIZZES_BAR_CHART_CONFIG = "bar_chart_config.json";
com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.QUIZZES_LINE_CHART_CONFIG = "line_chart_config.json";
com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.QUIZZES_PIE_CHART_CONFIG = "pie_chart_config.json";
com.wiris.quizzes.impl.ui.component.CustomizeToolbarComponent.QUIZZES_SKETCH_CONFIG = "sketch_correct_answer_config.json";
com.wiris.quizzes.impl.ui.component.GraphInputComponent.CLASS_GRAPH_COMPONENT = "graphComponent";
com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_TOOLBAR_DEFINITION = "toolbarDefinition";
com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_VIEW_ONLY = "viewOnly";
com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_AWAKE_MODE = "awakeMode";
com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_FROZEN_MODE = "frozenMode";
com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_ALLOW_ANIMATIONS = "allowAnimations";
com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_DEFAULT_DISPLAY_SETTINGS = "defaultDisplaySettings";
com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_GRAPH_MODE = "graphMode";
com.wiris.quizzes.impl.ui.component.GraphInputComponent.PARAM_LANGUAGE = "language";
com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_GRAPH = "{\"elements\":[],\"constraints\":[],\"displays\":[{}],\"handwriting\":[]}";
com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_BAR_CHART = "{\"elements\":[{\"id\":\"a\",\"type\":\"bar_chart\",\"statistical_data\":[[1],[3],[2],[6],[4]],\"wiris_cas_kernel_computed\":\"false\"}],\"constraints\":[],\"displays\":[{\"styles\":[{\"label\":true,\"show_data_labels\":true,\"show_name_labels\":true,\"name_labels\":[\"<math><mtext>label</mtext></math>\",\"<math><mtext>label</mtext></math>\",\"<math><mtext>label</mtext></math>\",\"<math><mtext>label</mtext></math>\",\"<math><mtext>label</mtext></math>\"],\"colors\":[\"#3575B7\"],\"bar_width\":1,\"space_between_bars\":1,\"space_between_side_bars\":0.2,\"beside\":true,\"change_step\":1,\"length_for_news\":1,\"ref\":\"a\"}],\"id\":\"\",\"center\":[4.199999999999999,2.8],\"background_color\":\"#FFFFFF\",\"axis_color\":\"#717171\",\"grid_primary_color\":\"#C6C6C6\",\"grid_secondary_color\":\"#E2E2E2\",\"axis_x\":true,\"horizontal_axis_label\":\"\",\"horizontal_axis_values_position\":\"below\",\"horizontal_axis_step\":2,\"grid_x\":false,\"horizontal_grid_step\":\"auto\",\"axis_y\":true,\"vertical_axis_label\":\"\",\"vertical_axis_values_position\":\"left\",\"vertical_axis_step\":\"auto\",\"grid_y\":false,\"vertical_grid_step\":\"auto\",\"stats_axis\":true,\"width\":12,\"height\":8,\"grid_subdivisions\":2}],\"handwriting\":[]}";
com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_LINE_CHART = "{\"elements\":[{\"id\":\"a\",\"type\":\"line_chart\",\"statistical_data\":[[1,2,3,4],[2,1,2,3],[4,3,4,2]],\"wiris_cas_kernel_computed\":\"false\"}],\"constraints\":[],\"displays\":[{\"styles\":[{\"label\":true,\"show_data_labels\":true,\"show_name_labels\":true,\"name_labels\":[\"<math><mtext>label</mtext></math>\",\"<math><mtext>label</mtext></math>\",\"<math><mtext>label</mtext></math>\",\"<math><mtext>label</mtext></math>\"],\"colors\":[\"#3575B7\",\"#BA4848\",\"#458148\"],\"point_sizes\":[[5,5,5,5],[5,5,5,5],[5,5,5,5]],\"stroke_widths\":[[2,2,2],[2,2,2],[2,2,2]],\"ref\":\"a\"}],\"id\":\"\",\"center\":[1.4,2.4000000000000004],\"background_color\":\"#FFFFFF\",\"axis_color\":\"#717171\",\"grid_primary_color\":\"#C6C6C6\",\"grid_secondary_color\":\"#E2E2E2\",\"axis_x\":true,\"horizontal_axis_label\":\"\",\"horizontal_axis_values_position\":\"below\",\"horizontal_axis_step\":2,\"grid_x\":true,\"horizontal_grid_step\":\"auto\",\"axis_y\":true,\"vertical_axis_label\":\"\",\"vertical_axis_values_position\":\"left\",\"vertical_axis_step\":\"auto\",\"grid_y\":false,\"vertical_grid_step\":\"auto\",\"stats_axis\":true,\"width\":4,\"height\":4,\"grid_subdivisions\":2}],\"handwriting\":[]}";
com.wiris.quizzes.impl.ui.component.GraphInputComponent.EMPTY_GEOMETRY_FILE_PIE_CHART = "{\"elements\":[{\"id\":\"a\",\"type\":\"pie_chart\",\"statistical_data\":[5,4,3,2,1],\"wiris_cas_kernel_computed\":\"false\"}],\"constraints\":[],\"displays\":[{\"styles\":[{\"label\":true,\"show_data_labels\":true,\"show_name_labels\":true,\"name_labels\":[\"<math><mtext>label</mtext></math>\",\"<math><mtext>label</mtext></math>\",\"<math><mtext>label</mtext></math>\",\"<math><mtext>label</mtext></math>\",\"<math><mtext>label</mtext></math>\"],\"colors\":[\"#3575B7\",\"#BA4848\",\"#458148\",\"#D17E25\",\"#8D3C9C\"],\"view_3D\":false,\"pie_radius\":8,\"pie_height\":3,\"pie_inclination_angle\":1.0471,\"pie_starting_angle\":0,\"pie_clockwise\":false,\"change_step\":1,\"length_for_news\":1,\"max_value_pie\":100,\"ref\":\"a\"}],\"id\":\"\",\"center\":[0,0],\"background_color\":\"#FFFFFF\",\"axis_color\":\"#717171\",\"grid_primary_color\":\"#C6C6C6\",\"grid_secondary_color\":\"#E2E2E2\",\"axis_x\":false,\"horizontal_axis_label\":\"\",\"horizontal_axis_values_position\":\"below\",\"horizontal_axis_step\":2,\"grid_x\":false,\"horizontal_grid_step\":\"auto\",\"axis_y\":false,\"vertical_axis_label\":\"\",\"vertical_axis_values_position\":\"left\",\"vertical_axis_step\":\"auto\",\"grid_y\":false,\"vertical_grid_step\":\"auto\",\"stats_axis\":true,\"width\":24,\"height\":24,\"grid_subdivisions\":2}],\"handwriting\":[]}";
com.wiris.quizzes.impl.ui.component.GraphInputOptionsActivity.GRAPH_OPTIONS_ID = "graphInputOptions";
com.wiris.quizzes.impl.ui.component.GraphInputOptionsActivity.CLASS_QUIZZES_STUDIO_GRAPH_INPUT_OPTIONS = "quizzesStudioGraphInputOptions";
com.wiris.quizzes.impl.ui.component.GraphValidationElement.CLASS_GRAPH_VALIDATION_ELEMENT = "graphValidationElement";
com.wiris.quizzes.impl.ui.component.GraphValidationElement.CLASS_COMPONENT_CONTENT = "componentContent";
com.wiris.quizzes.impl.ui.component.GraphValidationElement.TEXT_FIELD_SUFFIX = " %";
com.wiris.quizzes.impl.ui.component.GraphValidationElement.ID_CHECKBOX = "checkBoxId";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.ELEMENTS_TITLE = "quizzes_studio_graph_validation_options_elements_title";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.ELEMENTS_SUBTITLE = "quizzes_studio_graph_validation_options_elements_subtitle";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.CRITERIA_TITLE = "quizzes_studio_graph_validation_options_criteria_title";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.TOLERANCE_TITLE = "quizzes_studio_graph_validation_options_tolerance_title";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.TOLERANCE_HELPER = "quizzes_studio_graph_validation_options_tolerance_helper";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.SUPERFLUOUS_TEXT = "quizzes_studio_graph_validation_options_superfluous_text";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.SUPERFLUOUS_HELPER = "quizzes_studio_graph_validation_options_superfluous_helper";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.MATCH_COLOR_TEXT = "quizzes_studio_graph_validation_options_color_text";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.MATCH_LINE_TYPE_TEXT = "quizzes_studio_graph_validation_options_line_type_text";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.MATCH_COLOR_HELPER = "quizzes_studio_graph_validation_options_color_helper";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.MATCH_LINE_TYPE_HELPER = "quizzes_studio_graph_validation_options_line_type_helper";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.CLASS_GRAPH_VALIDATION_OPTIONS = "graphValidationOptions";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.CLASS_ACTIVITY_WRAPPER = "activityWrapper";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.CLASS_ELEMENTS_CONTAINER = "elementsContainer";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.CLASS_ELEMENT_SELECTOR = "elementSelector";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.CLASS_GRAPH_VIEW = "graphView";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.CLASS_CRITERIA_CONTAINER = "criteriaContainer";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.CLASS_TOLERANCE_TITLE = "toleranceTitle";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.CLASS_TOLERANCE_INPUT = "toleranceInput";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.ACTION_TOLERANCE = "tolerance";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.ACTION_SUPERFLUOUS = "superfluous";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.ACTION_MATCH_COLOR = "matchColor";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.ACTION_MATCH_LINETYPE = "matchLineType";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.GRAPH_VALIDATION_ID_MATCH_COLOR = "matchColor";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.GRAPH_VALIDATION_ID_MATCH_LINE_TYPE = "matchLineType";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.GRAPH_VALIDATION_ID_CHECK_NO_SUPERFLUOUS = "checkNoSuperfluous";
com.wiris.quizzes.impl.ui.component.GraphValidationOptionsActivity.TOLERANCE_DEFAULT_VALUE = "0.00";
com.wiris.quizzes.impl.ui.component.GraphValidationSelector.SELECT_ALL = "quizzes_studio_graph_validation_options_selector_select_all";
com.wiris.quizzes.impl.ui.component.GraphValidationSelector.DISTRIBUTE_GRADES = "quizzes_studio_graph_validation_options_selector_distribute_grades";
com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_GRAPH_VALIDATION_CHANGED = "graphValidationChanged";
com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_DISTRIBUTE_GRADE = "distributeGrade";
com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_CHECKBOX = "activateCheckbox";
com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_ACTIVATE_ALL_CHECKBOX = "activateAll";
com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_EDIT_VALUE = "editValue";
com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_FOCUS_GRAPH_ELEMENT = "focusGraphElement";
com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ACTION_UNFOCUS_GRAPH_ELEMENT = "unfocusGraphElement";
com.wiris.quizzes.impl.ui.component.GraphValidationSelector.CLASS_UNDETERMINED = "undetermined";
com.wiris.quizzes.impl.ui.component.GraphValidationSelector.CLASS_SELECTOR_HEADER = "selectorHeader";
com.wiris.quizzes.impl.ui.component.GraphValidationSelector.CLASS_ELEMENTS_PANEL = "elementsPanel";
com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ID_CHECKBOX_HEADER = "checkboxHeader";
com.wiris.quizzes.impl.ui.component.GraphValidationSelector.ID_GRADE_DISTRIBUTION = "gradeDistribution";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.CLASS_HOME_PAGE_WELCOME_PANEL = "homePageWelcomePanel";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.CLASS_GETTING_STARTED_PANEL = "gettingStartedPanel";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.CLASS_GETTING_STARTED_FLOW_PANEL = "gettingStartedFlowPanel";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.CLASS_TRAINING_PANEL = "trainingPanel";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.CLASS_GETTING_STARTED_ABOUT_US_BUTTON = "gettingStartedAboutUsButton";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_PAGE_RELEASE_NOTES_BUTTON_URL = "https://docs.wiris.com/quizzes/${lang}/release-notes/wirisquizzes-release-notes.html";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_GIVE_US_YOUR_FEEDBACK_BUTTON_URL = "https://surveys.hotjar.com/1f858315-8648-45a4-83e1-6ae70c54775f";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_WELCOME_HEADER_TEXT = "home_getting_started_welcome_header_text";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_WELCOME_DESCRIPTION_TEXT = "home_getting_started_welcome_description_text";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_RELEASE_NOTES_BUTTON_TEXT = "home_getting_started_release_notes_button_text";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_GIVE_US_FEEDBACK_BUTTON_TEXT = "home_getting_give_us_feedback_button_text";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_CREATE_QUESTION_HEADER_TEXT = "home_getting_started_create_question_header_text";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_CREATE_QUESTION_TEXT = "home_getting_started_create_question_text";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_CREATE_RANDOM_QUESTION_HEADER_TEXT = "home_getting_started_create_random_question_header_text";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_CREATE_RANDOM_QUESTION_TEXT = "home_getting_started_create_random_question_text";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_TRAINING_PANEL_HEADER_TEXT = "home_getting_started_training_panel_header_text";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_TRAINING_PANEL_TEXT = "home_getting_started_training_panel_text";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_LEARN_MORE_BUTTON_TEXT = "home_getting_started_learn_more_button_text";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_LEARN_MORE_BUTTON_URL = "https://docs.wiris.com/quizzes/${lang}/getting-started/basic-guide-to-question-creation-with-wirisquizzes.html";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_BASIC_MODE_BUTTON_TEXT = "home_getting_started_basic_mode_button_text";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_BASIC_MODE_BUTTON_URL = "https://docs.wiris.com/quizzes/${lang}/advanced-validation-features/use-of-random-basic-variables.html";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_ADVANCED_MODE_BUTTON_TEXT = "home_getting_started_advanced_mode_button_text";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_ADVANCED_MODE_BUTTON_URL = "https://docs.wiris.com/quizzes/${lang}/advanced-validation-features/use-of-random-variables.html";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_ENROLL_ME_BUTTON_TEXT = "home_getting_started_enroll_me_button_text";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_ENROLL_ME_BUTTON_URL = "https://info.wiris.com/QuizzesTraining-enrollment?_ga=2.33860449.1520813146.1669129953-1816873140.1642601747";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_CONTACT_US_BUTTON_TEXT = "home_getting_started_contact_us_button_text";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_CONTACT_US_BUTTON_URL = "https://www.wiris.com/${lang}/contact-us/";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_VISIT_OUR_WEBPAGE_BUTTON_TEXT = "home_getting_started_visit_our_webpage_button_text";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_VISIT_OUR_WEBPAGE_BUTTON_URL = "https://www.wiris.com/${lang}/wirisquizzes/";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_REPORT_AN_ISSUE_BUTTON_TEXT = "home_getting_started_report_an_issue_button_text";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_REPORT_AN_ISSUE_BUTTON_URL = "https://www.wiris.com/${lang}/wirisquizzes/report-an-issue/";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_DOCUMENTATION_BUTTON_TEXT = "home_getting_started_documentation_button_text";
com.wiris.quizzes.impl.ui.component.HomeGettingStartedPanel.HOME_GETTING_STARTED_DOCUMENTATION_BUTTON_URL = "https://docs.wiris.com/quizzes/";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_COPY_CORRECT_ANSWER_BUTTON_TEXT = "quizzes_studio_home_copy_correct_answer_button_text";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_COPY_INITIAL_CONTENT_BUTTON_TEXT = "quizzes_studio_home_copy_initial_content_button_text";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_INITIAL_CONTENT_BUTTON_TEXT = "quizzes_studio_home_initial_content_label";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_CORRECT_ANSWER_BUTTON_TEXT = "quizzes_studio_home_correct_answer_label";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_CORRECT_ANSWER_DESCRIPTION_MATH = "quizzes_studio_home_correct_answer_description_math";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_CORRECT_ANSWER_DESCRIPTION_GRAPHIC = "quizzes_studio_home_correct_answer_description_graphic";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_CORRECT_ANSWER_DESCRIPTION_SKETCH_PARAGRAPH_1 = "quizzes_studio_home_correct_answer_description_sketch_paragraph_1";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_CORRECT_ANSWER_DESCRIPTION_SKETCH_PARAGRAPH_2 = "quizzes_studio_home_correct_answer_description_sketch_paragraph_2";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_CORRECT_ANSWER_DESCRIPTION_TEXT = "quizzes_studio_home_correct_answer_description_text";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_INITIAL_CONTENT_DESCRIPTION_MATH = "quizzes_studio_home_initial_content_description_math";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_INITIAL_CONTENT_DESCRIPTION_GRAPHIC = "quizzes_studio_home_initial_content_description_graphic";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_INITIAL_CONTENT_DESCRIPTION_SKETCH = "quizzes_studio_home_initial_content_description_sketch";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_INITIAL_CONTENT_DESCRIPTION_TEXT = "quizzes_studio_home_initial_content_description_text";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.HOME_MAIN_CONTENT_CONTAINER_CLASS = "homeMainContentContainer";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.ACTION_MAIN_CONTENT_CHANGED = "mainContentChanged";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.ACTION_INITIAL_CONTENT_SELECTED = "initialContentSelected";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.ACTION_CORRECT_ANSWER_SELECTED = "correctAnswerSelected";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.CLASS_MAIN_COMPONENT_MATHTYPE = "mainComponentMathtype";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.CORRECT_ANSWER_SELECTABLE_ID = "correctAnswer";
com.wiris.quizzes.impl.ui.component.HomeMainContentContainer.INITIAL_CONTENT_SELECTABLE_ID = "initialContent";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_FIELD_ID = "inputMethod";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_FIELD_LABEL = "quizzes_studio_input_options_answer_input_method_title";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ANSWER_INPUT_FIELD_LABEL = "quizzes_studio_input_options_answer_input_method_answer_input_field_label";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_MATHEDITOR_EMBEDDED = "quizzes_studio_input_options_answer_input_method_matheditor_embedded_label";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_MATHEDITOR_POPUP = "quizzes_studio_input_options_answer_input_method_matheditor_popup_label";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_PLAINTEXT = "quizzes_studio_input_options_answer_input_method_plain_text_label";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_MATHEDITOR_EMBEDDED = "quizzes_studio_input_options_answer_input_method_matheditor_embedded_helper_text";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_MATHEDITOR_POPUP = "quizzes_studio_input_options_answer_input_method_matheditor_popup_helper_text";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_PLAINTEXT = "quizzes_studio_input_options_answer_input_method_plain_text_helper_text";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_MATHEDITOR_EMBEDDED = "mathEditorEmbedded";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_MATHEDITOR_POPUP = "mathEditorPopup";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_PLAINTEXT = "plainText";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_AUXILIARY_INPUT_LABEL = "quizzes_studio_input_options_answer_input_method_auxiliar_input_label";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_DISPLAY_AUXILIARY_INPUT = "quizzes_studio_input_options_answer_input_method_display_auxiliar_input_label";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_REPLACE_AUXILIARY_INPUT = "quizzes_studio_input_options_answer_input_method_replace_auxiliar_input_label";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_TEXT_AUXILIARY_INPUT = "quizzes_studio_input_options_answer_input_method_text_auxiliar_input_label";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_NO_AUXILIARY_INPUT = "quizzes_studio_input_options_answer_input_method_no_auxiliar_input_label";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_HIDE_FILE_MENU_AUXILIARY_INPUT = "quizzes_studio_input_options_answer_input_method_auxiliar_input_hide_file_menu_label";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_DISPLAY_AUXILIARY_INPUT = "quizzes_studio_input_options_answer_input_method_display_auxiliar_input_helper_text";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_REPLACE_AUXILIARY_INPUT = "quizzes_studio_input_options_answer_input_method_replace_auxiliar_input_helper_text";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_TEXT_AUXILIARY_INPUT = "quizzes_studio_input_options_answer_input_method_text_auxiliar_input_helper_text";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_NO_AUXILIARY_INPUT = "quizzes_studio_input_options_answer_input_method_no_auxiliar_input_helper_text";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_HIDE_FILE_MENU_AUXILIARY_INPUT = "quizzes_studio_input_options_answer_input_method_auxiliar_input_hide_file_menu_helper_text";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_DISPLAY_AUXILIARY_INPUT = "displayAuxiliaryInput";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_REPLACE_AUXILIARY_INPUT = "replaceAuxiliaryInput";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_TEXT_AUXILIARY_INPUT = "textAuxiliaryInput";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_NO_AUXILIARY_INPUT = "noAuxiliaryInput";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_INITIAL_CONTENT = "quizzes_studio_input_options_answer_input_method_initial_content_label";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_LOCK_INITIAL_CONTENT = "quizzes_studio_input_options_answer_input_method_lock_initial_content_label";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_LOCK_INITIAL_CONTENT = "quizzes_studio_input_options_answer_input_method_lock_initial_content_helper_text";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_DISPLAY_SETTINGS = "quizzes_studio_input_options_answer_input_method_display_settings_label";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_DISPLAY_SETTINGS_NAME = "quizzes_studio_input_options_answer_input_method_display_settings_label_name";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_LABEL_DISPLAY_SETTINGS_VALUE = "quizzes_studio_input_options_answer_input_method_display_settings_label_value";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_MAGNETIC_GRID = "quizzes_studio_input_options_answer_input_method_magnetic_grid_label";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_MAGNETIC_GRID_TEXT = "quizzes_studio_input_options_answer_input_method_magnetic_grid_label_text";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_HELPER_TEXT_DISPLAY_SETTINGS = "quizzes_studio_input_options_answer_input_method_display_settings_helper_text";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.ALWAYS = "always";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.FOCUS = "focus";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.NEVER = "never";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.ACTION_LOCK_INITIAL_CONTENT = "lockInitialContent";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_ID_AUXILIARY_CAS_HIDE_FILE_MENU = "auxiliaryCasHideFileMenu";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_DEFINE_INITIAL_CONTENT_BUTTON_LABEL = "quizzes_studio_input_options_answer_input_method_define_initial_content_button_label";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.INPUT_METHOD_CUSTOMIZE_TOOLBAR_LABEL = "quizzes_studio_input_options_answer_input_method_customize_toolbar_label";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.CLASS_CUSTOMIZE_TOOLBAR = "customizeToolbar";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.CLASS_SEPARATOR_ROW_DISPLAY = "separatorRowDisplay";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.FORCE = "force";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.SNAP = "snap";
com.wiris.quizzes.impl.ui.component.InputMethodComponent.DISABLED = "disabled";
com.wiris.quizzes.impl.ui.component.InputOptionsActivity.CLASS_QUIZZES_STUDIO_INPUT_OPTIONS = "quizzesStudioInputOptions";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_FIELD_ID = "inputSyntax";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_FIELD_LABEL = "quizzes_studio_input_options_input_syntax_title";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_SELECT_ALL = "quizzes_studio_input_options_input_syntax_select_all_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_CLEAR_ALL = "quizzes_studio_input_options_input_syntax_clear_all_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SELECT_ALL_CONSTANTS = "selectAllConstants";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CLEAR_ALL_CONSTANTS = "clearAllConstants";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SELECT_ALL_FUNCTIONS = "selectAllFunctions";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CLEAR_ALL_FUNCTIONS = "clearAllFunctions";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SELECT_ALL_UNITS = "selectAllUnits";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CLEAR_ALL_UNITS = "clearAllUnits";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SELECT_ALL_PREFIXES = "selectAllPrefixes";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CLEAR_ALL_PREFIXES = "clearAllPrefixes";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_CONSTANTS_LABEL = "quizzes_studio_input_options_input_syntax_constants_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_CONSTANTS_HELPER_TEXT = "quizzes_studio_input_options_input_syntax_constants_helper_text";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_CONSTANTS_ID = "inputSyntaxConstants";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_CONSTANT_PI = "quizzes_studio_input_options_input_syntax_constants_pi_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_CONSTANT_E = "quizzes_studio_input_options_input_syntax_constants_e_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_CONSTANT_I = "quizzes_studio_input_options_input_syntax_constants_i_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_CONSTANT_J = "quizzes_studio_input_options_input_syntax_constants_j_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_CONSTANT_MORE_CONSTANTS = "quizzes_studio_input_options_input_syntax_constants_more_constants";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CONSTANT_PI = "constantPi";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CONSTANT_E = "constantE";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CONSTANT_I = "constantI";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CONSTANT_J = "constantJ";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_CONSTANT_MORE_CONSTANTS = "constantMoreConstants";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_BUTTON_DEFINE_NEW_CONSTANT = "quizzes_studio_input_options_input_syntax_constants_define_constant_button_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_FUNCTIONS_LABEL = "quizzes_studio_input_options_input_syntax_functions_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_FUNCTIONS_HELPER_TEXT = "quizzes_studio_input_options_input_syntax_functions_helper_text";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_FUNCTIONS_ID = "inputSyntaxFunctions";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_FUNCTION_EXP_LOG = "quizzes_studio_input_options_input_syntax_functions_exp_log_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_FUNCTION_TRIGONOMETRIC = "quizzes_studio_input_options_input_syntax_functions_trigonometric_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_FUNCTION_HYPERBOLIC = "quizzes_studio_input_options_input_syntax_functions_hyperbolic_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_FUNCTION_ARITHMETIC = "quizzes_studio_input_options_input_syntax_functions_arithmetic_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_FUNCTION_MORE_FUNCTIONS = "quizzes_studio_input_options_input_syntax_functions_more_functions";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_FUNCTION_EXP_LOG = "functionExpLog";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_FUNCTION_TRIGONOMETRIC = "functionTrigonometric";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_FUNCTION_HYPERBOLIC = "functionHyperbolic";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_FUNCTION_ARITHMETIC = "functionArithmetic";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_FUNCTION_MORE_FUNCTIONS = "functionMoreFunctions";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_BUTTON_DEFINE_NEW_FUNCTION = "quizzes_studio_input_options_input_syntax_functions_define_function_button_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_MEASURE_UNITS_LABEL = "quizzes_studio_input_options_input_syntax_measure_units_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_MEASURE_UNITS_HELPER_TEXT = "quizzes_studio_input_options_input_syntax_measure_units_helper_text";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_MEASURE_UNITS_ID = "inputSyntaxMeasureUnits";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_MEASURE_UNITS_MORE_UNITS = "quizzes_studio_input_options_input_syntax_measure_units_more_units_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_MEASURE_UNITS_MORE_UNITS = "measureUnitsMoreUnits";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.MEASURE_UNITS_MAIN = ["meter","second","gram","degree","percent","money"];
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.MEASURE_UNITS_SECONDARY = ["ampere","kelvin","mol","candela","radian","steradian","hour","minute","litre","newton","pascal","hertz","watt","joule","coulomb","volt","ohm","farad","siemens","weber","bar","henry","tesla","lux","lumen","gray","becquerel","sievert","katal","atmosphere","molar","dalton","electronvolt","pond","yard","foot","inch","mile","nautical_mile","gallon","ounce","pound_mass","fluid_ounce","pint"];
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.MEASURE_UNITS_MAIN_SYMBOLS = ["m","s","g",com.wiris.system.Utf8.uchr(176),"%","$"];
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.MEASURE_UNITS_SECONDARY_SYMBOLS = ["A","K","mol","cd","rad","sr","h","min","l","N","Pa","Hz","W","J","C","V",com.wiris.system.Utf8.uchr(937),"F","S","Wb","bar","H","T","lx","lm","Gy","Bq","Sv","kat","atm","M","u","eV","p","yd","ft","in","mi","nmi","gal","oz","lb","floz","pt"];
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_UNIT_PREFIXES_LABEL = "quizzes_studio_input_options_input_syntax_unit_prefixes_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_UNIT_PREFIXES_HELPER_TEXT = "quizzes_studio_input_options_input_syntax_unit_prefixes_helper_text";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_UNIT_PREFIXES_ID = "inputSyntaxUnitPrefixes";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.UNIT_PREFIXES_MAIN = ["mega","kilo","centi","milli"];
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.UNIT_PREFIXES_SECONDARY = ["yotta","zetta","exa","peta","tera","giga","hecto","deca","deci","micro","nano","pico","femto","atto","zepto","yocto"];
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.UNIT_PREFIXES_MAIN_SYMBOLS = ["M","k","c","m"];
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.UNIT_PREFIXES_SECONDARY_SYMBOLS = ["Y","Z","E","P","T","G","h","da","d",com.wiris.system.Utf8.uchr(181),"n","p","f","a","z","y"];
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_UNIT_PREFIXES_MORE_PREFIXES = "quizzes_studio_input_options_input_syntax_unit_prefixes_more_prefixes_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_UNIT_PREFIXES_MORE_PREFIXES = "unitPrefixesMorePrefixes";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ALLOWED_CONSTRUCTIONS_LABEL = "quizzes_studio_input_options_input_syntax_allowed_constructions_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ALLOWED_CONSTRUCTIONS_ID = "inputSyntaxAllowedConstructions";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_MIXED_FRACTIONS = "quizzes_studio_input_options_input_syntax_allowed_constructions_mixed_fractions_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_LISTS = "quizzes_studio_input_options_input_syntax_allowed_constructions_lists_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_INTERVALS = "quizzes_studio_input_options_input_syntax_allowed_constructions_intervals_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_RATIOS = "quizzes_studio_input_options_input_syntax_allowed_constructions_ratios_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_COMPUTER_SCIENTIFIC_NOTATION = "quizzes_studio_input_options_input_syntax_allowed_constructions_scientific_notation_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_HELPER_TEXT_MIXED_FRACTIONS = "quizzes_studio_input_options_input_syntax_allowed_constructions_mixed_fractions_helper_text";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_HELPER_TEXT_MIXED_FRACTIONS_2 = "quizzes_studio_input_options_input_syntax_allowed_constructions_mixed_fractions_helper_text_2";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_HELPER_TEXT_MIXED_FRACTIONS_3 = "quizzes_studio_input_options_input_syntax_allowed_constructions_mixed_fractions_helper_text_3";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_HELPER_TEXT_MIXED_FRACTIONS_4 = "quizzes_studio_input_options_input_syntax_allowed_constructions_mixed_fractions_helper_text_4";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_HELPER_TEXT_LISTS = "quizzes_studio_input_options_input_syntax_allowed_constructions_lists_helper_text";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_HELPER_TEXT_INTERVALS = "quizzes_studio_input_options_input_syntax_allowed_constructions_intervals_helper_text";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_HELPER_TEXT_RATIOS = "quizzes_studio_input_options_input_syntax_allowed_constructions_ratios_helper_text";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_HELPER_TEXT_COMPUTER_SCIENTIFIC_NOTATION = "quizzes_studio_input_options_input_syntax_allowed_constructions_scientific_notation_helper_text";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_MIXED_FRACTIONS = "mixedFractions";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_LISTS = "lists";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_INTERVALS = "intervals";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_RATIOS = "ratios";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_COMPUTER_SCIENTIFIC_NOTATION = "computerScientificNotation";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_LISTS_WITHOUT_ENCLOSERS = "quizzes_studio_input_options_input_syntax_allowed_constructions_lists_without_enclosers_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_HELPER_TEXT_LISTS_WITHOUT_ENCLOSERS = "quizzes_studio_input_options_input_syntax_allowed_constructions_lists_without_enclosers_helper_text";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_LISTS_WITHOUT_ENCLOSERS = "listsWithoutEnclosers";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_SEPARATOR_SYMBOLS_LABEL = "quizzes_studio_input_options_input_syntax_separator_symbols_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_SEPARATOR_SYMBOLS_HELPER_TEXT = "quizzes_studio_input_options_input_syntax_separator_symbols_helper_text";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_SEPARATOR_POINT_LABEL = "quizzes_studio_input_options_input_syntax_separator_symbols_point_dropdown_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_SEPARATOR_COMMA_LABEL = "quizzes_studio_input_options_input_syntax_separator_symbols_comma_dropdown_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_SEPARATOR_SPACE_LABEL = "quizzes_studio_input_options_input_syntax_separator_symbols_space_dropdown_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_SEPARATOR_POINT_ID = "pointSeparator";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_SEPARATOR_COMMA_ID = "commaSeparator";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_SEPARATOR_SPACE_ID = "spaceSeparator";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_SEPARATOR_NOTHING = "quizzes_studio_input_options_input_syntax_separator_symbols_dropdown_nothing_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_SEPARATOR_DECIMAL_PLACES = "quizzes_studio_input_options_input_syntax_separator_symbols_dropdown_decimal_places_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_SEPARATOR_DIGIT_GROUPS = "quizzes_studio_input_options_input_syntax_separator_symbols_dropdown_digit_groups_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_LABEL_SEPARATOR_LIST_ITEMS = "quizzes_studio_input_options_input_syntax_separator_symbols_dropdown_list_items_label";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_NOTHING = "nothing";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_DECIMAL_PLACES = "decimalPlaces";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_DIGIT_GROUPS = "digitGroups";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.INPUT_SYNTAX_ID_SEPARATOR_LIST_ITEMS = "listItems";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.CLASS_SEPARATOR_ROW = "separatorRow";
com.wiris.quizzes.impl.ui.component.InputSyntaxComponent.CLASS_INPUT_SYNTAX_ROW = "inputSyntaxRow";
com.wiris.util.ui.component.Label.CLASS_LABEL = "label";
com.wiris.util.ui.component.Label.CLASS_LABEL_TINY = "labelTiny";
com.wiris.util.ui.component.Label.CLASS_LABEL_IMPORTANT = "labelImportant";
com.wiris.util.ui.component.Label.CLASS_LABEL_HEADER = "labelHeader";
com.wiris.quizzes.impl.ui.component.MathLabel.CLASS_MATH_LABEL = "mathLabel";
com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT = "textComponent";
com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_EMPTY = "textComponentEmpty";
com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_WITH_LABEL = "textComponentWithLabel";
com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_WITH_PREFIX = "textComponentWithPrefix";
com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_WITH_SUFFIX = "textComponentWithSuffix";
com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_DISABLED = "textComponentDisabled";
com.wiris.util.ui.component.TextComponent.CLASS_TEXT_COMPONENT_OUTLINED = "textComponentOutlined";
com.wiris.util.ui.component.TextField.CLASS_TEXT_FIELD = "textField";
com.wiris.util.ui.component.TextField.CLASS_FORCE_LTR = "forceLTR";
com.wiris.util.ui.component.TextField.NO_SIZE = -1;
com.wiris.quizzes.impl.ui.component.MathTextField.CLASS_MATH_TEXT_FIELD = "mathTextField";
com.wiris.quizzes.impl.ui.component.PopupTextField.CLASS_POPUP_TEXT_FIELD = "popupTextField";
com.wiris.quizzes.impl.ui.component.PopupTextField.CLASS_POPUP_TEXT_FIELD_WINDOW = "popupTextFieldWindow";
com.wiris.quizzes.impl.ui.component.PopupTextField.CLASS_POPUP_TEXT_FIELD_CLICKABLE = "popupTextFieldClickable";
com.wiris.quizzes.impl.ui.component.PopupTextField.OPENED_POPUP_ACTION_ID = "openedPopup";
com.wiris.quizzes.impl.ui.component.PopupTextField.POPUP_TEXT_FIELD_BUTTON_ACTION_ID = "openPopup";
com.wiris.quizzes.impl.ui.component.PopupTextField.POPUP_TEXT_FIELD_WINDOW_LOADED_ACTION_ID = "windowLoaded";
com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.POPUP_MATHTYPE_TEXT_FIELD_BUTTON_ICON = "mathtype18w.png";
com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.POPUP_MATHTYPE_TEXT_FIELD_BUTTON_TOOLTIP = "answer_field_mathtype_popup_button_tooltip";
com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.POPUP_MATHTYPE_TEXT_FIELD_ACCEPT_DIALOG = "answer_field_mathtype_popup_accept_dialog";
com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.POPUP_MATHTYPE_TEXT_FIELD_CANCEL_DIALOG = "answer_field_mathtype_popup_cancel_dialog";
com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.POPUP_MATHTYPE_TEXT_FIELD_ACCEPT_VALUE_ACTION_ID = "acceptValue";
com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.POPUP_MATHTYPE_TEXT_FIELD_CANCEL_ACTION_ID = "cancel";
com.wiris.quizzes.impl.ui.component.MathTypePopupTextField.TOOLTIP_CLOSE_MATHTYPE_POPUP = "close_mathtype_popup";
com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.MEASURE_UNITS_VALIDATION_ID = "measureUnits";
com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.MEASURE_UNITS_VALIDATION_LABEL = "quizzes_studio_validation_options_measure_units_title";
com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.MEASURE_UNITS_VALIDATION_LABEL_MATCH_UNITS = "quizzes_studio_validation_options_measure_units_match_unit_label";
com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.MEASURE_UNITS_VALIDATION_LABEL_ALLOW_PREFIXES = "quizzes_studio_validation_options_measure_units_allow_other_prefixes_label";
com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.MEASURE_UNITS_VALIDATION_HELPER_TEXT_MATCH_UNITS = "quizzes_studio_validation_options_measure_units_match_unit_helper_text";
com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.MEASURE_UNITS_VALIDATION_HELPER_TEXT_ALLOW_PREFIXES = "quizzes_studio_validation_options_measure_units_allow_other_prefixes_helper_text";
com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.MEASURE_UNITS_VALIDATION_ID_MATCH_UNITS = "matchUnits";
com.wiris.quizzes.impl.ui.component.MeasureUnitsValidationComponent.MEASURE_UNITS_VALIDATION_ID_ALLOW_PREFIXES = "allowPrefixes";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID = "numbers";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL = "quizzes_studio_validation_options_numbers_title";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_SYMBOLIC_ANSWER = "quizzes_studio_validation_options_numbers_symbolic_answer_label";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_HELPER_TEXT_SYMBOLIC_ANSWER = "quizzes_studio_validation_options_numbers_symbolic_answer_helper_text";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_SYMBOLIC_ANSWER = "symbolicAnswer";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_TOLERANCE = "numberTolerance";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_TOLERANCE = "quizzes_studio_validation_options_numbers_tolerance_label";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_EXACT_ANSWER = "quizzes_studio_validation_options_numbers_tolerance_exact_answer_label";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_ERROR_MARGIN = "quizzes_studio_validation_options_numbers_tolerance_error_margin_label";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_MATCHING_DIGITS = "quizzes_studio_validation_options_numbers_tolerance_matching_digits_label";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PERCENT_ERROR = "quizzes_studio_validation_options_numbers_tolerance_error_margin_dropdown_percent_error_label";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_ABSOLUTE_ERROR = "quizzes_studio_validation_options_numbers_tolerance_error_margin_dropdown_absolute_error_label";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_HELPER_TEXT_EXACT_ANSWER = "quizzes_studio_validation_options_numbers_tolerance_exact_answer_helper_text";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_HELPER_TEXT_ERROR_MARGIN = "quizzes_studio_validation_options_numbers_tolerance_error_margin_helper_text";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_HELPER_TEXT_MATCHING_DIGITS = "quizzes_studio_validation_options_numbers_tolerance_matching_digits_helper_text";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_EXACT_ANSWER = "exactAnswer";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_ERROR_MARGIN = "errorMargin";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_MATCHING_DIGITS = "matchingDigits";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_FORMAT = "numberFormat";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_FORMAT = "quizzes_studio_validation_options_numbers_format_label";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_SCIENTIFIC_NOTATION = "quizzes_studio_validation_options_numbers_format_scientific_notation_label";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_DECIMAL_NOTATION = "quizzes_studio_validation_options_numbers_format_decimal_notation_label";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_ANY_NOTATION = "quizzes_studio_validation_options_numbers_format_any_notation_label";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_HELPER_TEXT_SCIENTIFIC_NOTATION = "quizzes_studio_validation_options_numbers_format_scientific_notation_helper_text";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_HELPER_TEXT_DECIMAL_NOTATION = "quizzes_studio_validation_options_numbers_format_decimal_notation_helper_text";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_HELPER_TEXT_ANY_NOTATION = "quizzes_studio_validation_options_numbers_format_any_notation_helper_text";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_SCIENTIFIC_NOTATION = "scientificNotation";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_DECIMAL_NOTATION = "decimalNotation";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_ANY_NOTATION = "anyNotation";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION = "quizzes_studio_validation_options_numbers_precision_label";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_ID_PRECISION_ENABLED = "precisionEnabled";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_ENABLED = "quizzes_studio_validation_options_numbers_precision_precision_check_label";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_ENABLED_2 = "quizzes_studio_validation_options_numbers_precision_precision_check_label_2";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_HELPER_TEXT_PRECISION_ENABLED = "quizzes_studio_validation_options_numbers_precision_precision_check_helper_text";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_SIGNIFICANT_FIGURES = "quizzes_studio_validation_options_numbers_precision_precision_check_dropdown_significant_figures_label";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.NUMBER_VALIDATION_LABEL_PRECISION_DECIMAL_PLACES = "quizzes_studio_validation_options_numbers_precision_precision_check_dropdown_decimal_places_label";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.CLASS_QUIZZES_INLINE_DROPDOWN = "quizzesInlineDropdown";
com.wiris.quizzes.impl.ui.component.NumberValidationComponent.CLASS_QUIZZES_INLINE_TEXT_FIELD = "quizzesInlineTextField";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_FIELD_ID = "outputVariableOptions";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_FIELD_LABEL = "quizzes_studio_variables_options_cas_output_variable_options_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_HELPER_TEXT = "quizzes_studio_variables_options_cas_output_variable_options_helper_text";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_NUMBER_FORMAT = "quizzes_studio_variables_options_cas_output_variable_options_number_format_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_EXPRESSION_FORMAT = "quizzes_studio_variables_options_cas_output_variable_options_expression_format_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_PRECISION = "outputOptionsPrecision";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_PRECISION = "quizzes_studio_variables_options_cas_output_variable_options_precision_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_PRECISION_TYPE = "outputOptionsPrecisionType";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_PRECISION_TYPE_SIGNIFICANT_FIGURES = "outputOptionsPrecisionSignificantFigures";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_PRECISION_TYPE_SIGNIFICANT_FIGURES = "quizzes_studio_variables_options_cas_output_variable_options_precision_dropdown_significant_figures_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_PRECISION_TYPE_DECIMAL_PLACES = "outputOptionsPrecisionDecimalPlaces";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_PRECISION_TYPE_DECIMAL_PLACES = "quizzes_studio_variables_options_cas_output_variable_options_precision_dropdown_decimal_places_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_NOTATION = "quizzes_studio_variables_options_cas_output_variable_options_notation_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_NOTATION_DECIMAL = "outputOptionsNotationDecimal";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_NOTATION_DECIMAL = "quizzes_studio_variables_options_cas_output_variable_options_notation_decimal_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_NOTATION_SCIENTIFIC = "outputOptionsNotationScientific";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_NOTATION_SCIENTIFIC = "quizzes_studio_variables_options_cas_output_variable_options_notation_scientific_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_NOTATION_AUTO = "outputOptionsNotationAuto";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_NOTATION_AUTO = "quizzes_studio_variables_options_cas_output_variable_options_notation_auto_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_DECIMAL = "quizzes_studio_variables_options_cas_output_variable_options_decimal_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_DECIMAL_COMMA = "outputOptionsDecimalComma";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_DECIMAL_COMMA = "quizzes_studio_variables_options_cas_output_variable_options_decimal_comma_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_DECIMAL_POINT = "outputOptionsDecimalPoint";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_DECIMAL_POINT = "quizzes_studio_variables_options_cas_output_variable_options_decimal_point_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_THOUSANDS = "quizzes_studio_variables_options_cas_output_variable_options_thousands_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_THOUSANDS_NONE = "outputOptionsThousandsNone";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_THOUSANDS_NONE = "quizzes_studio_variables_options_cas_output_variable_options_thousands_none_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_THOUSANDS_SPACE = "outputOptionsThousandsSpace";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_THOUSANDS_SPACE = "quizzes_studio_variables_options_cas_output_variable_options_thousands_space_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_THOUSANDS_COMMA = "outputOptionsThousandsComma";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_THOUSANDS_COMMA = "quizzes_studio_variables_options_cas_output_variable_options_thousands_comma_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_THOUSANDS_POINT = "outputOptionsThousandsPoint";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_THOUSANDS_POINT = "quizzes_studio_variables_options_cas_output_variable_options_thousands_point_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_IMAGINARY_UNIT = "quizzes_studio_variables_options_cas_output_variable_options_imaginary_unit_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_IMAGINARY_UNIT_I = "imaginaryUnitI";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_IMAGINARY_UNIT_I = "quizzes_studio_variables_options_cas_output_variable_options_imaginary_unit_i_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_IMAGINARY_UNIT_J = "imaginaryUnitJ";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_IMAGINARY_UNIT_J = "quizzes_studio_variables_options_cas_output_variable_options_imaginary_unit_j_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_TIMES_OPERATOR = "quizzes_studio_variables_options_cas_output_variable_options_times_operator_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_TIMES_OPERATOR_DOT = "timesOperatorDot";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_TIMES_OPERATOR_DOT = "quizzes_studio_variables_options_cas_output_variable_options_times_operator_dot_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_TIMES_OPERATOR_CROSS = "timesOperatorCross";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_TIMES_OPERATOR_CROSS = "quizzes_studio_variables_options_cas_output_variable_options_times_operator_cross_label";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_ID_INVISIBLE_TIMES_OPERATOR = "invisibleTimesOperator";
com.wiris.quizzes.impl.ui.component.OutputVariableOptionsComponent.OUTPUT_VARIABLE_OPTIONS_LABEL_INVISIBLE_TIMES_OPERATOR = "quizzes_studio_variables_options_cas_output_variable_options_times_operator_invisible_label";
com.wiris.util.ui.component.Window.CLASS_WINDOW = "window";
com.wiris.util.ui.component.Window.CLASS_WINDOW_MODAL = "windowModal";
com.wiris.util.ui.component.Window.CLASS_WINDOW_RELATIVE = "windowRelative";
com.wiris.quizzes.impl.ui.component.PopupWindow.POPUP_TEXT_FIELD_WARNING_TITLE = "popup_text_field_warning_title";
com.wiris.quizzes.impl.ui.component.PopupWindow.POPUP_TEXT_FIELD_WARNING_MESSAGE = "popup_text_field_warning_message";
com.wiris.quizzes.impl.ui.component.PopupWindow.POPUP_TEXT_FIELD_WARNING_ACCEPT_BUTTON_LABEL = "popup_text_field_warning_accept_button_label";
com.wiris.quizzes.impl.ui.component.PopupWindow.POPUP_TEXT_FIELD_WARNING_CANCEL_BUTTON_LABEL = "popup_text_field_warning_cancel_button_label";
com.wiris.quizzes.impl.ui.component.PopupWindow.ACCEPT_EASY_MODAL_CLOSE_ACTION_ID = "acceptEasyModalClose";
com.wiris.quizzes.impl.ui.component.PopupWindow.CANCEL_EASY_MODAL_CLOSE_ACTION_ID = "cancelEasyModalClose";
com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField.CLASS_QUIZZES_COMPOUND_FIELD = "quizzesCompoundField";
com.wiris.quizzes.impl.ui.component.QuizzesCompoundTextField.CLASS_QUIZZES_COMPOUND_FIELD_ROW = "quizzesCompoundFieldRow";
com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.OPTIONS_FILTER_ID = "optionsFilter";
com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.OPTIONS_FILTER_LABEL = "quizzes_studio_options_filter_label";
com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.CLASS_OPTIONS_FILTER = "optionsFilter";
com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.OPTIONS_FILTER_LABEL_RELEVANT_OPTIONS = "quizzes_studio_options_filter_relevant_options_label";
com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.OPTIONS_FILTER_LABEL_ALL_OPTIONS = "quizzes_studio_options_filter_all_options_label";
com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.OPTIONS_FILTER_ID_RELEVANT_OPTIONS = "relevantOptions";
com.wiris.quizzes.impl.ui.component.QuizzesOptionsFilterComponent.OPTIONS_FILTER_ID_ALL_OPTIONS = "allOptions";
com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL = "borderPanel";
com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_OVERLAP = "borderPanelOverlap";
com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_UNDEFINED = "borderPanelAtUndefined";
com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_NORTH = "borderPanelAtNorth";
com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_SOUTH = "borderPanelAtSouth";
com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_EAST = "borderPanelAtEast";
com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_WEST = "borderPanelAtWest";
com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_NORTH_EAST = "borderPanelAtNorthEast";
com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_NORTH_WEST = "borderPanelAtNorthWest";
com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_SOUTH_EAST = "borderPanelAtSouthEast";
com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_SOUTH_WEST = "borderPanelAtSouthWest";
com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_CENTER = "borderPanelAtCenter";
com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_STATIC = "borderPanelStatic";
com.wiris.util.ui.component.BorderPanel.POSITION_UNDEFINED = 0;
com.wiris.util.ui.component.BorderPanel.POSITION_NORTH = 1;
com.wiris.util.ui.component.BorderPanel.POSITION_SOUTH = 2;
com.wiris.util.ui.component.BorderPanel.POSITION_EAST = 3;
com.wiris.util.ui.component.BorderPanel.POSITION_WEST = 4;
com.wiris.util.ui.component.BorderPanel.POSITION_NORTH_EAST = 5;
com.wiris.util.ui.component.BorderPanel.POSITION_NORTH_WEST = 6;
com.wiris.util.ui.component.BorderPanel.POSITION_SOUTH_EAST = 7;
com.wiris.util.ui.component.BorderPanel.POSITION_SOUTH_WEST = 8;
com.wiris.util.ui.component.BorderPanel.POSITION_CENTER = 9;
com.wiris.util.ui.component.BorderPanel.positionClasses = [com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_UNDEFINED,com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_NORTH,com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_SOUTH,com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_EAST,com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_WEST,com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_NORTH_EAST,com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_NORTH_WEST,com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_SOUTH_EAST,com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_SOUTH_WEST,com.wiris.util.ui.component.BorderPanel.CLASS_BORDER_PANEL_AT_CENTER];
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_HOME_ID = "home";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_HOME_HELP_URL = "https://docs.wiris.com/quizzes/${lang}/user-interface/wirisquizzes-studio.html";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_HOME_TOOLBAR_TITLE = "quizzes_studio_home_activity_title";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_INPUT_OPTIONS_ID = "inputOptions";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_INPUT_OPTIONS_HELP_URL = "https://docs.wiris.com/quizzes/${lang}/user-interface/wirisquizzes-studio.html#input-options-2474133";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_GRAPH_INPUT_OPTIONS_HELP_URL = "https://docs.wiris.com/quizzes/${lang}/user-interface/validation-options/graphical-answer.html#input-options-2498982";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_INPUT_OPTIONS_TOOLBAR_TITLE = "quizzes_studio_input_options_activity_title";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VALIDATION_OPTIONS_ID = "validationOptions";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VALIDATION_OPTIONS_HELP_URL = "https://docs.wiris.com/quizzes/${lang}/user-interface/wirisquizzes-studio.html#validation-options-2474133";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_GRAPH_VALIDATION_OPTIONS_HELP_URL = "https://docs.wiris.com/quizzes/${lang}/user-interface/validation-options/graphical-answer.html#validation-options-2498982";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VALIDATION_OPTIONS_TOOLBAR_TITLE = "quizzes_studio_validation_options_activity_title";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VARIABLES_FUNCTIONS_ID = "variableOptions";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VARIABLES_FUNCTIONS_HELP_URL = "https://docs.wiris.com/quizzes/${lang}/user-interface/wirisquizzes-studio.html#define-random-variables-and-functions";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VARIABLES_FUNCTIONS_TOOLBAR_TITLE = "quizzes_studio_variables_options_activity_title";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_AUXILIARY_INITIAL_CONTENT_ID = "auxiliarInitialContent";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_AUXILIARY_INITIAL_CONTENT_HELP_URL = "https://docs.wiris.com/quizzes/${lang}/getting-started/calcme-integration-in-wirisquizzes-studio.html";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_AUXILIARY_INITIAL_CONTENT_TOOLBAR_TITLE = "quizzes_studio_auxiliar_initial_content_activity_title";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_TEST_QUESTION_ID = "testQuestion";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_TEST_QUESTION_HELP_URL = "https://docs.wiris.com/quizzes/${lang}/user-interface/wirisquizzes-studio.html#test-this-question";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_TEST_QUESTION_TOOLBAR_TITLE = "quizzes_studio_test_question_activity_title";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_GRAPH_INPUT_OPTIONS_ID = "graphInputOptions";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_GRAPH_INPUT_OPTIONS_TOOLBAR_TITLE = com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_INPUT_OPTIONS_TOOLBAR_TITLE;
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_GRAPH_VALIDATION_OPTIONS_ID = "graphValidationOptions";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_GRAPH_VALIDATION_OPTIONS_TITLE = com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VALIDATION_OPTIONS_TOOLBAR_TITLE;
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VIEW_SOURCE_ID = "viewSource";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_VIEW_SOURCE_TOOLBAR_TITLE = "quizzes_studio_view_source_activity_title";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_IMPORT_DIALOG_TITLE = "quizzes_studio_import_dialog_title";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_IMPORT_DIALOG_LABEL = "quizzes_studio_import_dialog_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_IMPORT_DIALOG_CONFIRM_BUTTON_LABEL = "quizzes_studio_import_dialog_confirm_button_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_IMPORT_DIALOG_CANCEL_BUTTON_LABEL = "quizzes_studio_import_dialog_cancel_button_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_IMPORT_DIALOG_CONFIRM_BUTTON_ID = "confirmImport";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_IMPORT_DIALOG_CANCEL_BUTTON_ID = "cancelImport";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_RELEVANT_OPTIONS_DIALOG_TITLE = "quizzes_studio_relevant_options_dialog_title";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_RELEVANT_OPTIONS_DIALOG_LABEL = "quizzes_studio_relevant_options_dialog_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_RELEVANT_OPTIONS_DIALOG_CONFIRM_BUTTON_LABEL = "quizzes_studio_relevant_options_dialog_confirm_button_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_RELEVANT_OPTIONS_DIALOG_CANCEL_BUTTON_LABEL = "quizzes_studio_relevant_options_dialog_cancel_button_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_RELEVANT_OPTIONS_DIALOG_CONFIRM_BUTTON_ID = "confirmRelevantOptions";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.QUIZZES_STUDIO_CONFIRM_RELEVANT_OPTIONS_DIALOG_CANCEL_BUTTON_ID = "cancelRelevantOptions";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.ID_QUIZZES_STUDIO = "quizzesStudio";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_STUDIO = "quizzesStudio";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_QUIZZES_BUTTON = "quizzesButton";
com.wiris.quizzes.impl.ui.component.QuizzesStudioComponent.CLASS_FULL_SIZE_PANEL = "quizzesFullSizePanel";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.CLASS_QUIZZES_STUDIO_HOME = "quizzesStudioHome";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.CLASS_ACTIVITY_LIST = "activityList";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.CLASS_QUIZZES_STUDIO_HOME_LEFT_PANEL = "quizzesStudioHomeLeftPanel";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.CLASS_MAIN_CONTAINER_DISPLAY_CHOOSER = "mainContainerDisplayChooser";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.CLASS_STUDIO_MAIN_CONTAINER = "studioMainContainer";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.CLASS_GETTING_STARTED_PAGE_BACKGROUND_PANEL = "gettingStartedPanelBackground";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivity.GETTING_STARTED_PAGE_BACKGROUND_FILE_NAME = "wqgettingstartedbackground.png";
com.wiris.util.ui.component.List.CLASS_LIST = "list";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.ACTIVITY_LIST_INPUT_OPTIONS_LABEL = "quizzes_studio_home_input_options_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.ACTIVITY_LIST_VALIDATION_OPTIONS_LABEL = "quizzes_studio_home_validation_options_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.ACTIVITY_LIST_LABEL = "quizzes_studio_home_activity_list_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.CLASS_BORDER_RADIUS_BOTTOM_RIGHT_HOVER = "borderRadiusBottomRight";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeActivityList.CLASS_ACTIVITY_ARROW_RIGHT = "activityArrowRight";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_LABEL = "quizzes_studio_home_answer_type_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_LABEL_EQUATION = "quizzes_studio_home_answer_type_equation_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_LABEL_TEXT = "quizzes_studio_home_answer_type_text_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_LABEL_GEOMETRY = "quizzes_studio_home_answer_type_geometry_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_LABEL_SKETCH = "quizzes_studio_home_answer_type_sketch_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_LABEL_STATISTICAL_CHARTS = "quizzes_studio_home_answer_type_statistical_charts_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_LABEL_BAR_CHART = "quizzes_studio_home_answer_type_bar_chart_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_LABEL_LINE_CHART = "quizzes_studio_home_answer_type_line_chart_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_LABEL_PIE_CHART = "quizzes_studio_home_answer_type_pie_chart_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_EQUATION = "equation";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_TEXT = "text";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_GEOMETRY = "geometry";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_SKETCH = "sketch";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_BAR_CHART = "barChart";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_STATS_CHART = "statisticsChart";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_LINE_CHART = "lineChart";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.HOME_ANSWER_TYPE_ID_PIE_CHART = "pieChart";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.CLASS_ANSWER_TYPE_LIST = "answerTypeList";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.CLASS_LIST_BORDER_RADIUS_BOTTOM_RIGHT = "borderRadiusBottomRight";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeAnswerTypeList.CLASS_ACTIVITY_ARROW_RIGHT = "activityArrowRight";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar.CLASS_QUIZZES_STUDIO_BOTTOM_BAR = "quizzesStudioBottomBar";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar.QUIZZES_STUDIO_BOTTOM_BAR_TEST_QUESTION_LABEL = "quizzes_studio_home_test_question_button_tooltip";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar.QUIZZES_STUDIO_BOTTOM_BAR_CANCEL_BUTTON_LABEL = "quizzes_studio_home_cancel_button_tooltip";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar.QUIZZES_STUDIO_BOTTOM_BAR_CANCEL_BUTTON_ID = "closeStudio";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar.QUIZZES_STUDIO_BOTTOM_BAR_SAVE_BUTTON_LABEL = "quizzes_studio_home_save_button_tooltip";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeBottomBar.QUIZZES_STUDIO_BOTTOM_BAR_SAVE_BUTTON_ID = "saveStudio";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeGettingStartedList.CLASS_GETTING_STARTED_LIST = "gettingStartedList";
com.wiris.quizzes.impl.ui.component.QuizzesStudioHomeGettingStartedList.HOME_GETTING_STARTED_LIST_BUTTON_TEXT = "home_getting_started_list_button_text";
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.AUTHORING_FIELD_ID = "authoringFieldCorrectAnswer";
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.AUTHORING_FIELD_OPEN_STUDIO_BUTTON_ID = "openStudio";
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.AUTHORING_FIELD_OPEN_STUDIO_BUTTON_ICON = "quizzes24w.png";
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.AUTHORING_FIELD_OPEN_STUDIO_BUTTON_TOOLTIP = "authoring_field_button_tooltip";
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.AUTHORING_FIELD_OPEN_STUDIO_BUTTON_FOREGROUND_COLOR = "#f2f2f2";
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.AUTHORING_FIELD_CLOSE_STUDIO_ACTION_ID = "closeStudioWindow";
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.TEXT_FIELD_CORRECT_ANSWER_CHANGED = "studioPopupTextFieldCorrectAnswerChanged";
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupTextField.CLASS_AUTHORING_FIELD = "authoringField";
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.POPUP_TEXT_FIELD_WARNING_SAVE_AND_CLOSE_BUTTON_LABEL = "popup_text_field_warning_save_and_close_button_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.POPUP_TEXT_FIELD_WARNING_CLOSE_WITHOUT_SAVING_BUTTON_LABEL = "popup_text_field_warning_close_without_saving_button_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.ACCEPT_EASY_MODAL_SAVE_AND_CLOSE_ACTION_ID = "saveAndCloseEasyModalClose";
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.ACCEPT_EASY_MODAL_CLOSE_WITHOUT_SAVING_ACTION_ID = "closeWithoutSavingEasyModalClose";
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.CLASS_AUTHORING_FIELD_WINDOW = "authoringFieldWindow";
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.WINDOW_HEIGHT_DEFAULT = 920;
com.wiris.quizzes.impl.ui.component.QuizzesStudioPopupWindow.instance = null;
com.wiris.util.ui.component.ToolBar.CLASS_TOOL_BAR = "toolBar";
com.wiris.util.ui.component.ToolBar.CLASS_TOOL_BAR_FLAT = "toolBarFlat";
com.wiris.util.ui.component.ToolBar.CLASS_TOOL_BAR_COMPACT = "toolBarCompact";
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.ID_QUIZZES_STUDIO_TOOLBAR = "quizzesStudioToolBar";
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.CLASS_QUIZZES_STUDIO_TOOLBAR = "quizzesStudioToolBar";
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.CLASS_QUIZZES_FILE_BUTTON = "quizzesStudioFileButton";
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_BACK_BUTTON_TOOLTIP = "quizzes_studio_toolbar_back_button_tooltip";
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_HELP_BUTTON_TOOLTIP = "quizzes_studio_toolbar_help_button_tooltip";
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_SEND_FEEDBACK_BUTTON_TOOLTIP = "quizzes_studio_toolbar_send_feedback_button_tooltip";
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_ICON = "arrow_drop_down";
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_TOOLTIP = "quizzes_studio_toolbar_more_options_dropdown_tooltip";
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_IMPORT_LABEL = "quizzes_studio_toolbar_more_options_dropdown_import_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_EXPORT_LABEL = "quizzes_studio_toolbar_more_options_dropdown_export_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_VIEW_SOURCE_LABEL = "quizzes_studio_toolbar_more_options_dropdown_view_source_label";
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_IMPORT_ID = "import";
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_EXPORT_ID = "export";
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_MORE_OPTIONS_DROPDOWN_VIEW_SOURCE_ID = "viewSource";
com.wiris.quizzes.impl.ui.component.QuizzesStudioToolbarComponent.QUIZZES_STUDIO_TOOLBAR_SEND_FEEDBACK_URL = "https://www.wiris.com/en/wirisquizzes/feedback/";
com.wiris.quizzes.impl.ui.component.RandomVariableRow.ACTION_RANDOM_VARIABLE_FIELD_CHANGED = "randomVariableFieldChanged";
com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_NAME_TEXT = "quizzes_studio_home_random_variable_row_variable_name_text";
com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_NAME_PREFIX = "quizzes_studio_home_random_variable_row_prefix_text";
com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_TYPE_TEXT = "quizzes_studio_home_random_variable_type_text";
com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_NAME_ALREADY_USED_ERROR = "quizzes_studio_home_random_variable_name_already_used_error";
com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_NOT_INTEGER_ERROR = "quizzes_studio_home_random_variable_number_not_integer_error";
com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_INVALID_NAME_ERROR = "quizzes_studio_home_random_variable_invalid_name_error";
com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_MAX_VALUE_ERROR = "quizzes_studio_home_random_variable_max_value_error";
com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_NAME_MISSING_ERROR = "quizzes_studio_home_random_variable_name_missing_error";
com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_MAX_VALUE_MISSING_ERROR = "quizzes_studio_home_random_variable_max_value_missing_error";
com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_MIN_VALUE_MISSING_ERROR = "quizzes_studio_home_random_variable_min_value_missing_error";
com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_MIN_VALUE = "quizzes_studio_home_random_variable_min_value_text";
com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_ROW_AND = "quizzes_studio_home_random_variable_row_and_text";
com.wiris.quizzes.impl.ui.component.RandomVariableRow.RANDOM_VARIABLE_MAX_VALUE = "quizzes_studio_home_random_variable_max_value_text";
com.wiris.quizzes.impl.ui.component.RandomVariableRow.INVALID_NAME_ERROR = -1;
com.wiris.quizzes.impl.ui.component.RandomVariableRow.NOT_A_NUMBER_ERROR = -1;
com.wiris.quizzes.impl.ui.component.RandomVariableRow.MISSING_VALUE_ERROR = -2;
com.wiris.quizzes.impl.ui.component.RandomVariableRow.MISSING_NAME_ERROR = -2;
com.wiris.quizzes.impl.ui.component.RandomVariableRow.DUPLICATE_NAME_ERROR = -3;
com.wiris.quizzes.impl.ui.component.RandomVariableRow.MAX_VALUE_SMALLER_ERROR = -3;
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.RANDOM_VARIABLES_COMPONENT_TITLE = "quizzes_studio_home_random_variables_title";
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.RANDOM_VARIABLES_COMPONENT_TITLE_BASIC_MODE = "quizzes_studio_home_random_variables_title_basic_mode";
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ADVANCED_RANDOM_VARIABLES_COMPONENT_BUTTON_TEXT = "quizzes_studio_home_advanced_random_variables_button_text";
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ADVANCED_RANDOM_VARIABLES_COMPONENT_BUTTON_TEXT_STRING_SYNTAX = "quizzes_studio_home_advanced_random_variables_button_text_string_syntax";
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.DESCRIPTION_TEXT = "quizzes_studio_home_random_variables_description_text";
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.SIMPLE_ALGORITHM_TEXT = "quizzes_studio_home_random_variables_simple_algorithm_text";
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ADD_NEW_BUTTON_TEXT = "quizzes_studio_home_random_variables_add_new_button_text";
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.COMPLEX_ALGORITHM_TEXT = "quizzes_studio_home_random_variables_complex_algorithm_text";
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.STRING_SYNTAX_TEXT = "quizzes_studio_home_random_variables_string_syntax_text";
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.QUIZZES_STUDIO_RANDOM_VARIABLES_HELP_BUTTON = "quizzes_studio_home_random_variables_help_button";
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.CLASS_RANDOM_VARIABLES_HELP_BUTTON = "randomVariablesComponentHelpButton";
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.CLASS_RANDOM_VARIABLES_BUTTON = "randomVariablesComponentButton";
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.CLASS_CALCME_BUTTON = "calcmeButton";
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.QUIZZES_STUDIO_SIMPLE_RANDOM_VARIABLES_HELP_URL = "https://docs.wiris.com/quizzes/${lang}/advanced-validation-features/use-of-random-basic-variables.html";
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ACTION_ADD_NEW_RANDOM_VARIABLE = "addNewRandomVariable";
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ACTION_REMOVE_RANDOM_VARIABLE = "removeRandomVariable";
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ACTION_RANDOM_VARIABLES_CHANGED = "randomVariablesChanged";
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.ACTION_PARAMETER_RANDOM_VARIABLES_CONTENT = "randomVariablesContent";
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.STATUS_INDETERMINATE = 0;
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.INVALID_NAME_ERROR = -1;
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.NOT_A_NUMBER_ERROR = -1;
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.MISSING_VALUE_ERROR = -2;
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.MISSING_NAME_ERROR = -2;
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.DUPLICATE_NAME_ERROR = -3;
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.MAX_VALUE_SMALLER_ERROR = -3;
com.wiris.quizzes.impl.ui.component.RandomVariablesComponent.MAX_RANDOM_VARIABLES = 5;
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID = "simplification";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL = "quizzes_studio_validation_options_simplification_title";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_GENERAL = "quizzes_studio_validation_options_simplification_general_label";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_FACTORS = "quizzes_studio_validation_options_simplification_factors_label";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_FRACTIONS = "quizzes_studio_validation_options_simplification_fractions_label";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_ROOTS = "quizzes_studio_validation_options_simplification_roots_label";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_SIMPLIFIED = "quizzes_studio_validation_options_simplification_simplified_label";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_EXPANDED = "quizzes_studio_validation_options_simplification_expanded_label";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_FACTORIZED = "quizzes_studio_validation_options_simplification_factorized_label";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_COMMON_FACTOR = "quizzes_studio_validation_options_simplification_common_factor_label";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_COMMON_DENOMINATOR = "quizzes_studio_validation_options_simplification_common_denominator_label";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_RATIONALIZED = "quizzes_studio_validation_options_simplification_rationalized_label";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_LABEL_MINIMAL_RADICANDS = "quizzes_studio_validation_options_simplification_minimal_radicands_label";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_HELPER_TEXT_SIMPLIFIED = "quizzes_studio_validation_options_simplification_simplified_helper_text";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_HELPER_TEXT_EXPANDED = "quizzes_studio_validation_options_simplification_expanded_helper_text";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_HELPER_TEXT_FACTORIZED = "quizzes_studio_validation_options_simplification_factorized_helper_text";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_HELPER_TEXT_COMMON_FACTOR = "quizzes_studio_validation_options_simplification_common_factor_helper_text";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_HELPER_TEXT_COMMON_DENOMINATOR = "quizzes_studio_validation_options_simplification_common_denominator_helper_text";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_HELPER_TEXT_RATIONALIZED = "quizzes_studio_validation_options_simplification_rationalized_helper_text";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_HELPER_TEXT_MINIMAL_RADICANDS = "quizzes_studio_validation_options_simplification_minimal_radicands_helper_text";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_SIMPLIFIED = "simplified";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_EXPANDED = "expanded";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_FACTORIZED = "factorized";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_COMMON_FACTOR = "commonFactor";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_COMMON_DENOMINATOR = "commonDenominator";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_RATIONALIZED = "rationalized";
com.wiris.quizzes.impl.ui.component.SimplificationValidationComponent.SIMPLIFICATION_VALIDATION_ID_MINIMAL_RADICANDS = "minimalRadicands";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID = "studentAnswerComparison";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL = "quizzes_studio_validation_options_student_answer_comparison_title";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_LITERALLY_EQUAL = "quizzes_studio_validation_options_student_answer_comparison_literally_equal_label";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_MATHEMATICALLY_EQUAL = "quizzes_studio_validation_options_student_answer_comparison_mathematically_equal_label";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_EQUIVALENT_EQUATIONS = "quizzes_studio_validation_options_student_answer_comparison_equivalent_equations_label";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_ANY_ANSWER = "quizzes_studio_validation_options_student_answer_comparison_any_answer_label";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_CUSTOM_GRADING_FUNCTION = "quizzes_studio_validation_options_student_answer_comparison_custom_grading_function_label";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_LITERALLY_EQUAL = "quizzes_studio_validation_options_student_answer_comparison_literally_equal_helper_text";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_MATHEMATICALLY_EQUAL = "quizzes_studio_validation_options_student_answer_comparison_mathematically_equal_helper_text";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_EQUIVALENT_EQUATIONS = "quizzes_studio_validation_options_student_answer_comparison_equivalent_equations_helper_text";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_ANY_ANSWER = "quizzes_studio_validation_options_student_answer_comparison_any_answer_helper_text";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_CUSTOM_GRADING_FUNCTION = "quizzes_studio_validation_options_student_answer_comparison_custom_grading_function_helper_text";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_LITERALLY_EQUAL = "literallyEqual";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_MATHEMATICALLY_EQUAL = "mathematicallyEqual";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_EQUIVALENT_EQUATIONS = "equivalentEquations";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_ANY_ANSWER = "anyAnswer";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_CUSTOM_GRADING_FUNCTION = "customGradingFunction";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_ORDER_AND_REPETITION_MATTERS = "quizzes_studio_validation_options_student_answer_comparison_order_and_repetition_matters_label";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_ORDER_AND_REPETITION_MATTERS = "quizzes_studio_validation_options_student_answer_comparison_order_and_repetition_matters_helper_text";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_ORDER_AND_REPETITION_MATTERS = "orderAndRepetitionMatters";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_REPETITION_MATTERS = "quizzes_studio_validation_options_student_answer_comparison_repetition_matters_label";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_REPETITION_MATTERS = "quizzes_studio_validation_options_student_answer_comparison_repetition_matters_helper_text";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_REPETITION_MATTERS = "repetitionMatters";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_UNRESTRICTED_LISTS = "quizzes_studio_validation_options_student_answer_comparison_unrestricted_lists_label";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_UNRESTRICTED_LISTS = "quizzes_studio_validation_options_student_answer_comparison_unrestricted_lists_helper_text";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_UNRESTRICTED_LISTS = "unrestrictedLists";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_MATCH_LETTER_CASE = "quizzes_studio_validation_options_student_answer_comparison_match_letter_case_label";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_MATCH_LETTER_CASE = "quizzes_studio_validation_options_student_answer_comparison_match_letter_case_helper_text";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_MATCH_LETTER_CASE = "matchLetterCase";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_MATCH_SPACES = "quizzes_studio_validation_options_student_answer_comparison_match_spaces_label";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_MATCH_SPACES = "quizzes_studio_validation_options_student_answer_comparison_match_spaces_helper_text";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_MATCH_SPACES = "matchSpaces";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_FUNCTION_NAME_DROPDOWN = "quizzes_studio_validation_options_student_answer_comparison_custom_grading_function_name_dropdown_label";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_FUNCTION_NAME = "functionName";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_DEFINE_FUNCTION_BUTTON = "quizzes_studio_validation_options_student_answer_comparison_custom_grading_function_define_function_button_label";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_ARGUMENTS_HELPER_TEXT = "quizzes_studio_validation_options_student_answer_comparison_arguments_helper_text";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_ARGUMENTS_EVALUATED = "quizzes_studio_validation_options_student_answer_comparison_keep_arguments_evaluated_label";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_ARGUMENTS_UNEVALUATED = "quizzes_studio_validation_options_student_answer_comparison_keep_arguments_unevaluated_label";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_LABEL_ARGUMENTS_STRING = "quizzes_studio_validation_options_student_answer_comparison_keep_arguments_string_label";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_HELPER_TEXT_ARGUMENTS_UNEVALUATED = "quizzes_studio_validation_options_student_answer_comparison_keep_arguments_unevaluated_helper_text";
com.wiris.quizzes.impl.ui.component.StudentAnswerComparisonComponent.STUDENT_ANSWER_COMPARISON_ID_ARGUMENTS_UNEVALUATED = "argumentsUnevaluated";
com.wiris.quizzes.impl.ui.component.StudentAnswerComponent.STUDENT_ANSWER_LABEL = "quizzes_studio_test_question_student_answer_label";
com.wiris.quizzes.impl.ui.component.StudentAnswerComponent.CLASS_STUDENT_ANSWER = "studentAnswer";
com.wiris.quizzes.impl.ui.component.StudentAnswerComponent.STUDENT_ANSWER_CHANGED_ACTION_ID = "studentAnswerChanged";
com.wiris.quizzes.impl.ui.component.TestQuestionActivity.CLASS_QUIZZES_STUDIO_TEST_QUESTION = "quizzesStudioTestQuestion";
com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent.CORRECT_ANSWER_LABEL = "quizzes_studio_test_question_correct_answer_label";
com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent.CORRECT_ANSWER_RELOAD_BUTTON_TOOLTIP = "quizzes_studio_test_question_correct_answer_regenerate_answer_button_label";
com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent.CORRECT_ANSWER_COPY_ANSWER_BUTTON_TOOLTIP = "quizzes_studio_test_question_correct_answer_copy_answer_button_label";
com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent.CORRECT_ANSWER_RELOAD_BUTTON_ID = "reloadAnswer";
com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent.CORRECT_ANSWER_COPY_ANSWER_BUTTON_ID = "copyAnswer";
com.wiris.quizzes.impl.ui.component.TestQuestionCorrectAnswerComponent.CLASS_CORRECT_ANSWER = "correctAnswer";
com.wiris.util.ui.component.TreeSelector.ACTION_CHECKBOX = "treeSelectorActionCheckbox";
com.wiris.util.ui.component.TreeSelector.CLASS_COMPONENT_TREE_SELECTOR = "treeSelector";
com.wiris.quizzes.impl.ui.component.ToolbarTreeSelector.ICON_PARENT_NAME = "chevron_right";
com.wiris.quizzes.impl.ui.component.ToolbarTreeSelector.ICON_PARENT_TYPE = "material";
com.wiris.quizzes.impl.ui.component.ToolbarTreeSelector.ACTION_GRAPH_TOOLBAR_CHANGED = "graphToolbarChanged";
com.wiris.quizzes.impl.ui.component.ValidationOptionsActivity.CLASS_QUIZZES_STUDIO_VALIDATION_OPTIONS = "quizzesStudioValidationOptions";
com.wiris.quizzes.impl.ui.component.VariableOptionsActivity.VARIABLE_OPTIONS_LABEL = "quizzes_studio_variables_options_calcme_label";
com.wiris.quizzes.impl.ui.component.VariableOptionsActivity.CLASS_CALC_ME_LABEL = "calcMeLabel";
com.wiris.quizzes.impl.ui.component.VariableOptionsActivity.CLASS_QUIZZES_STUDIO_VARIABLE_OPTIONS = "quizzesStudioVariableOptions";
com.wiris.quizzes.impl.ui.component.ViewSourceActivity.VIEW_SOURCE_QUESTION_XML_LABEL = "quizzes_studio_view_source_question_xml_label";
com.wiris.quizzes.impl.ui.component.ViewSourceActivity.VIEW_SOURCE_GRAMMAR_URL_LABEL = "quizzes_studio_view_source_grammar_url_label";
com.wiris.quizzes.impl.ui.component.ViewSourceActivity.VIEW_SOURCE_RESERVED_WORDS_LABEL = "quizzes_studio_view_source_reserved_words_label";
com.wiris.quizzes.impl.ui.component.ViewSourceActivity.CLASS_VIEW_SOURCE_TEXT_FIELD = "viewSourceTextField";
com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.CLASS_WIRIS_CAS_INPUT_COMPONENT = "wirisCasInput";
com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.WIRIS_CAS_LAUNCH_CAS_BUTTON_LABEL = "runcalculator";
com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.WIRIS_CAS_WAITING_FOR_UPDATES_LABEL = "waitingforupdates";
com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.WIRIS_CAS_SENDING_INITIAL_SESSION_LABEL = "sendinginitialsession";
com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.WIRIS_CAS_ALGORITHM_IMAGE_TOOLTIP_LABEL = "algorithmimagealt";
com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.POLL_SERVICE_INTERVAL = 1000;
com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.ACTION_LAUNCH_WIRIS_CAS = "launchWirisCas";
com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.STATE_NOT_FOUND = 0;
com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.STATE_NEW = 1;
com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.STATE_RECEIVED = 2;
com.wiris.quizzes.impl.ui.component.WirisCasInputComponent.STATE_CLOSED = 3;
com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.CLASS_WIRIS_CAS_COMPONENT = "wirisCasComponent";
com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.WIRIS_CAS_OPEN_WIRIS_CAS_LABEL = "clicktoruncalculator";
com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.WIRIS_CAS_ALGORITHM_LANGUAGE_LABEL = "quizzes_studio_variables_options_cas_algorithm_language_label";
com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.WIRIS_CAS_CONVERT_TO_CALCME_BUTTON_LABEL = "quizzes_studio_variables_options_cas_algorithm_convert_to_calcme_button_label";
com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.WIRIS_CAS_CONVERT_TO_CALCME_DESCRIPTION_LABEL = "quizzes_studio_variables_options_cas_algorithm_convert_to_calcme_description_label";
com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.WIRIS_CAS_CONVERT_TO_ALGORITHM_BUTTON_LABEL = "quizzes_studio_variables_options_cas_algorithm_convert_to_algorithm_description_label";
com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.WIRIS_CAS_USE_WIRIS_CAS_LABEL = "showcas";
com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.WIRIS_CAS_USE_CALCME_LABEL = "showcalcme";
com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.WIRIS_CAS_USE_CALCME_LEARN_MORE = "learnmore";
com.wiris.quizzes.impl.ui.component.WirisCasInputWrapperComponent.ID_WIRIS_CAS_INPUT_COMPONENT = "wirisCasInputComponent";
com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_PERCENT_ERROR = 0;
com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_ABSOLUTE_ERROR = 1;
com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_SIGNIFICANT_FIGURES = 2;
com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.TOLERANCE_DECIMAL_PLACES = 3;
com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.REQUEST_IGNORE_NON_COMPLIANT_PARTS = 0;
com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.REQUEST_DISABLE_IF_NOT_COMPLIANT = 1;
com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.REQUEST_OVERWRITE_IF_NOT_COMPLIANT = 2;
com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.EVALUATE_KEYWORD = "evaluate_keyword";
com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.EMPTY_MATHML = "<math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mrow></mrow></math>";
com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.WRS_POSITIONABLE = "wrs:positionable";
com.wiris.quizzes.impl.ui.controller.QuizzesStudioController.WRS_XMLNS = "xmlns:wrs";
com.wiris.quizzes.telemetry.QuizzesTracker.KEY_QUESTION = "question";
com.wiris.quizzes.telemetry.QuizzesTracker.KEY_ACTIVITY = "activity";
com.wiris.quizzes.telemetry.QuizzesTracker.KEY_CAUSE = "cause";
com.wiris.quizzes.telemetry.QuizzesTracker.KEY_ACTIVITY_TIME = "activity-time";
com.wiris.quizzes.telemetry.QuizzesTracker.KEY_SESSION_TIME = "session-time";
com.wiris.quizzes.telemetry.QuizzesTracker.KEY_FROM = "from";
com.wiris.quizzes.telemetry.QuizzesTracker.KEY_TO = "to";
com.wiris.quizzes.telemetry.QuizzesTracker.VALUE_CANCEL = "cancel";
com.wiris.quizzes.telemetry.QuizzesTracker.VALUE_SAVE = "save";
com.wiris.system.ui.JsComponent.TEXT_ALIGN_VALUES = ["left","center","right"];
com.wiris.system.ui.JsComponent.VERTICAL_ALIGN_VALUES = ["top","middle","bottom","baseline"];
com.wiris.system.ui.JsComponent.ALIGN_ITEMS_VALUES = ["flex-start","center","flex-end","stretch","baseline","space-between"];
com.wiris.system.ui.JsComponent.trapFocusTargetArray = new Array();
com.wiris.system.ui.JsComponent.trapFocusContainerArray = new Array();
com.wiris.system.ui.JsComponent.cssLoaded = false;
com.wiris.quizzes.ui.JsCalcMeInputComponent.loadingCalc = false;
com.wiris.quizzes.ui.JsMathTypeInputComponent.loadingEditor = false;
com.wiris.settings.PlatformSettings.IS_JAVA = false;
com.wiris.settings.PlatformSettings.IS_CSHARP = false;
com.wiris.settings.PlatformSettings.PARSE_XML_ENTITIES = true;
com.wiris.settings.PlatformSettings.UTF8_CONVERSION = false;
com.wiris.settings.PlatformSettings.IS_JAVASCRIPT = true;
com.wiris.settings.PlatformSettings.IS_FLASH = false;
com.wiris.system.JsBrowser.SOURCE_USER_AGENT = "userAgent";
com.wiris.system.JsBrowser.SOURCE_VENDOR = "vendor";
com.wiris.system.JsBrowser.SOURCE_WINDOW_OPERA = "opera";
com.wiris.system.JsBrowser.SOURCE_PLATFORM = "platform";
com.wiris.system.JsBrowser.SOURCE_APP_VERSION = "navigator.appVersion";
com.wiris.system.JsDOMUtils.TOUCHHOLD_MOVE_MARGIN = 10;
com.wiris.system.JsDOMUtils.browser = new com.wiris.system.JsBrowser();
com.wiris.system.JsDOMUtils.initialized = false;
com.wiris.system.JsDOMUtils.touchDeviceListeners = new Array();
com.wiris.system.JsDOMUtils.mouseDeviceListeners = new Array();
com.wiris.system.JsDOMUtils.internetExplorerPointers = new Hash();
com.wiris.system.LocalStorageCache.ITEMS_KEY = "_items";
com.wiris.system.Logger.SEVERE = 1000;
com.wiris.system.Logger.WARNING = 900;
com.wiris.system.Logger.INFO = 800;
com.wiris.system.TelemetryUtils.OPTIONS_KEY = "options";
com.wiris.system.TelemetryUtils.BODY_KEY = "body";
com.wiris.system.TelemetryUtils.DATA_KEY = "data";
com.wiris.system.TelemetryUtils.HEADERS_KEY = "headers";
com.wiris.system.TelemetryUtils.URL_KEY = "url";
com.wiris.system.TelemetryUtils.API_KEY_KEY = "x-api-key";
com.wiris.system.TelemetryUtils.CONTENT_TYPE_VALUE = "application/json";
com.wiris.system.UUIDUtils.rndSeed = haxe.Timer.stamp() * 1000 | 0;
com.wiris.system.UUIDUtils.state0 = com.wiris.system.UUIDUtils.splitmix64_seed(com.wiris.system.UUIDUtils.rndSeed);
com.wiris.system.UUIDUtils.state1 = com.wiris.system.UUIDUtils.splitmix64_seed(com.wiris.system.UUIDUtils.rndSeed + 1);
com.wiris.system.graphics.JsClientGraphicsContext.HIDDEN_TOP = "-9999px";
com.wiris.system.graphics.JsClientGraphicsContext.BASELINE_MARK_BASE64 = "iVBORw0KGgoAAAANSUhEUgAAAAoAAAABCAYAAADn9T9+AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A" + "/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sICAweKKkHSyMAAAAZdEVYdENv" + "bW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAEElEQVQI12P8z8Dwn4EIAABNBQIAJaFl6QAA" + "AABJRU5ErkJggg==";
com.wiris.system.graphics.JsClientGraphicsContext.STIX_SETS = [[true,StringTools.replace("U+0041-005A,U+0061-007A","U+","").split(",")],[false,StringTools.replace("U+0030-0039,U+0041-005A,U+0061-007A","U+","").split(",")],[false,StringTools.replace("U+00A1-00AB,U+00AD-00AF,U+00B2-00B6,U+00B8-00D6,U+00D8-00F6,U+00F8-01B4,U+01B6-02D8,U+02DA-03BF,U+1001-169A,U+169D-2008,U+2011-2013,U+2015-2019,U+201B-201D,U+201F-2024,U+2027-2034,U+2036-2044,U+2047-207C,U+207F-208C,U+208F-2101,U+2103-2110,U+2114,U+2116-2117,U+211B,U+211E-2123,U+2125-2130,U+2132-2134,U+2136-2189,U+219A-21A3,U+21A5,U+21A7-21A8,U+21AB-21B4,U+21B6-21BB,U+21BE-21BF,U+21C2-21C3,U+21C7-21CA,U+21CD-21CF,U+21D6-21F4,U+21F6-21FF,U+2201,U+220A,U+220D-220E,U+2214-2215,U+221A-221C,U+221F,U+2223-2224,U+2231-2233,U+2236-223B,U+223E-2240,U+2242,U+2244,U+2246-2247,U+2249-225F,U+2263,U+2266-2269,U+226C-226F,U+227C-2281,U+2284-2285,U+2288-228E,U+2296,U+2298,U+229A,U+229C,U+229E-22A4,U+22A6-22B1,U+22B4-22C3,U+22C6-22CC,U+22CE-22ED,U+22F2-2328,U+232B-239A,U+23AE,U+23B2-23B3,U+23B7-23DB,U+23E2-25A0,U+25A2-25AC,U+25AE-25B0,U+25B2,U+25B4-25CA,U+25CC-2767,U+2776-27E5,U+27F0-2920,U+2923-2941,U+2943,U+2945-2969,U+296B-296C,U+2970-2982,U+2999-29D7,U+29DC-29FB,U+29FE-2A37,U+2A39-2A7C,U+2A7F-2A86,U+2A89-2FFF,U+3002-E00D,U+E010-F001,U+F004,U+1D53F,U+1D541-FFFFF","U+","").split(",")],[true,StringTools.replace("U+0001-0040,U+005B-0060,U+007B-FFFFF","U+","").split(",")],[false,StringTools.replace("U+0001-002F,U+003A-0040,U+005B-0060,U+007B-007E,U+00A0,U+00AC,U+00B0-00B1,U+00B7,U+00D7,U+00F7,U+01B5,U+02D9,U+03C0,U+1000,U+169B-169C,U+2009-2010,U+2014,U+201A,U+201E,U+2025-2026,U+2035,U+2045-2046,U+207D-207E,U+208D-208E,U+2102,U+2111-2113,U+2115,U+2118-211A,U+211C-211D,U+2124,U+2131,U+2135,U+2190-2199,U+21A4,U+21A6,U+21A9-21AA,U+21B5,U+21BC-21BD,U+21C0-21C1,U+21C4-21C6,U+21CB-21CC,U+21D0-21D5,U+21F5,U+2200,U+2202-2209,U+220B-220C,U+220F-2213,U+2216-2219,U+221D-221E,U+2220-2222,U+2225-2230,U+2234-2235,U+223C-223D,U+2241,U+2243,U+2245,U+2248,U+2260-2262,U+2264-2265,U+226A-226B,U+227A-227B,U+2282-2283,U+2286-2287,U+228F-2295,U+2297,U+2299,U+229B,U+229D,U+22A5,U+22B2-22B3,U+22C4,U+22CD,U+22EE-22F1,U+2329-232A,U+239B-23AD,U+23AF-23B1,U+23B4-23B6,U+23DC-23E1,U+25A1,U+25AD,U+25B1,U+25B3,U+25CB,U+2768-2775,U+27E6-27EF,U+2921-2922,U+2942,U+2944,U+296A,U+296D-296F,U+2983-2998,U+29D8-29DB,U+29FC-29FD,U+2A38,U+2A7D-2A7E,U+2A87-2A88,U+3000-3001,U+E00E-E00F,U+F002-F003,U+1D540","U+","").split(",")]];
com.wiris.system.graphics.JsClientGraphicsContext.STIX_SAMPLE_SIZE = 200;
com.wiris.system.graphics.JsClientGraphicsContext.DEFAULT_COLOR = 0;
com.wiris.system.graphics.JsClientGraphicsContext.DEFAULT_FONT_FAMILY = "Arial";
com.wiris.system.graphics.JsClientGraphicsContext.DEFAULT_FONT_SIZE = 16;
com.wiris.system.graphics.JsClientGraphicsContext2D.LAYERS = 2;
com.wiris.system.graphics.JsClientGraphicsContext2D.CUSTOM_FONT_NAMES = ["a","math1","math1RTL","horizontal","brackets","brack_sm","script","fraktur","double-struck"];
com.wiris.system.graphics.JsClientGraphicsContext2D.CUSTOM_BRACKET_FONT_NAMES = ["round_brackets1854","round_brackets2254","round_brackets2654","round_brackets3054","round_brackets3454"];
com.wiris.system.graphics.JsClientGraphicsContext2D.imageElements = new Hash();
com.wiris.system.ui.ComputedStyle.TEXT_ALIGN_VALUES = ["left","center","right"];
com.wiris.system.ui.ComputedStyle.VERTICAL_ALIGN_VALUES = ["top","middle","bottom","baseline"];
com.wiris.system.ui.JsRippleComponent.RIPPLE_ANIMATION_DURATION = 450;
com.wiris.system.ui.JsCheckBox.RIPPLE_ANIMATION_DURATION = 225;
com.wiris.system.ui.JsDrawingPanel.DEBUG = false;
com.wiris.system.ui.JsDrawingPanel.MIN_POINT_DISTANCE = 1;
com.wiris.system.ui.JsEvent.standardKeyCodes = null;
com.wiris.system.ui.JsIcon.svgSpriteLoaded = false;
com.wiris.system.ui.JsRadioButton.RIPPLE_ANIMATION_DURATION = 225;
com.wiris.util.css.CSSColorInfo.UNKNOWN = 0;
com.wiris.util.css.CSSColorInfo.HTML_4_01_COLOR = 1;
com.wiris.util.css.CSSColorInfo.CSS_LEVEL_1 = com.wiris.util.css.CSSColorInfo.HTML_4_01_COLOR;
com.wiris.util.css.CSSColorInfo.CSS_LEVEL_2_1 = 2;
com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_3 = 3;
com.wiris.util.css.CSSColorInfo.CSS_COLOR_MODULE_LEVEL_4 = 4;
com.wiris.util.css.CSSUtils.SUPPORTED_CSS_HEX_VALUES_REGEX = new EReg("^#[0-9a-f]{3}([0-9a-f]{3})?$","i");
com.wiris.util.css.CSSUtils.PT_TO_PX = 1.34;
com.wiris.util.geometry.GeometryConstraint.LINE_BY_TWO_POINTS = "line_by_two_points";
com.wiris.util.geometry.GeometryConstraint.LINE_BY_POINT = "line_by_point";
com.wiris.util.geometry.GeometryConstraint.LINE_SEGMENT_BY_POINTS = "line_segment_by_points";
com.wiris.util.geometry.GeometryConstraint.LINE_SEGMENT_BY_POINTS_AND_POLY = "line_segment_by_points_and_poly";
com.wiris.util.geometry.GeometryConstraint.VECTOR_BY_POINTS = "vector_by_points";
com.wiris.util.geometry.GeometryConstraint.CIRCLE_BY_CENTER_AND_POINT = "circle_by_center_and_point";
com.wiris.util.geometry.GeometryConstraint.CIRCLE_BY_THREE_POINTS = "circle_by_three_points";
com.wiris.util.geometry.GeometryConstraint.CONIC_BY_FIVE_POINTS = "conic_by_five_points";
com.wiris.util.geometry.GeometryConstraint.ELLIPSE_BY_FOCI_AND_POINT = "ellipse_by_foci_and_point";
com.wiris.util.geometry.GeometryConstraint.HYPERBOLA_BY_FOCI_AND_POINT = "hyperbola_by_foci_and_point";
com.wiris.util.geometry.GeometryConstraint.LINE_PARALLEL_TO_LINE_BY_POINT = "line_parallel_to_line_by_point";
com.wiris.util.geometry.GeometryConstraint.POINT_INTERSECTION_OF_TWO_LINES = "point_intersection_of_two_lines";
com.wiris.util.geometry.GeometryConstraint.POINT_ON_LINE = "point_on_line";
com.wiris.util.geometry.GeometryConstraint.RAY_FROM_POINT_BY_POINT = "ray_from_point_by_point";
com.wiris.util.geometry.GeometryConstraint.ARC_BY_THREE_POINTS = "arc_by_three_points";
com.wiris.util.geometry.GeometryConstraint.ELEMENT_FIXED = "element_fixed";
com.wiris.util.geometry.GeometryConstraint.ELLIPSE_ARC_BY_FIVE_POINTS = "ellipse_arc_by_five_points";
com.wiris.util.geometry.GeometryConstraint.LINE_PERPENDICULAR_TO_ELEMENT_BY_EXTERIOR_POINT = "line_perpendicular_to_element_by_exterior_point";
com.wiris.util.geometry.GeometryConstraint.LINE_PERPENDICULAR_TO_ELEMENT_BY_POINT = "line_perpendicular_to_element_by_point";
com.wiris.util.geometry.GeometryConstraint.LINE_PERPENDICULAR_TO_LINE_BY_POINT = "line_perpendicular_to_line_by_point";
com.wiris.util.geometry.GeometryConstraint.LINE_TANGENT_TO_ELEMENT_BY_EXTERIOR_POINT = "line_tangent_to_element_by_exterior point";
com.wiris.util.geometry.GeometryConstraint.LINE_TANGENT_TO_ELEMENT_BY_POINT = "line_tangent_to_element_by_point";
com.wiris.util.geometry.GeometryConstraint.PARABOLA_BY_FOCUS_AND_DIRECTRIX = "parabola_by_focus_and_directrix";
com.wiris.util.geometry.GeometryConstraint.PARABOLA_BY_FOCUS_AND_VERTEX = "parabola_by_focus_and_vertex";
com.wiris.util.geometry.GeometryConstraint.POINT_CENTER_OF_CIRCLE = "point_center_of_circle";
com.wiris.util.geometry.GeometryConstraint.POINT_CRITICAL_OF_FUNCTION = "point_critical_of_function";
com.wiris.util.geometry.GeometryConstraint.POINT_FIXED = "point_fixed";
com.wiris.util.geometry.GeometryConstraint.POINT_INTERSECTION_OF_TWO_ELEMENTS = "point_intersection_of_two_elements";
com.wiris.util.geometry.GeometryConstraint.POINT_MIDPOINT_OF_LINE_SEGMENT = "point_midpoint_of_line_segment";
com.wiris.util.geometry.GeometryConstraint.POINT_ON_CONIC = "point_on_conic";
com.wiris.util.geometry.GeometryConstraint.POINT_ON_FUNCTION = "point_on_function";
com.wiris.util.geometry.GeometryConstraint.POINT_ORIGIN_OF_VECTOR = "point_origin_of_vector";
com.wiris.util.geometry.GeometryConstraint.POINT_ON_GENERIC_ELEMENT = "point_on_generic_element";
com.wiris.util.geometry.GeometryConstraint.POINTS_INTERSECTION_OF_CONIC_AND_LINE = "points_intersection_of_conic_and_line";
com.wiris.util.geometry.GeometryConstraint.POLYGON_BY_POINTS = "polygon_by_points";
com.wiris.util.geometry.GeometryConstraint.POLYLINE_BY_POINTS = "polyline_by_points";
com.wiris.util.geometry.GeometryConstraint.AREA_BY_BOUNDARY_ELEMENTS = "area_by_boundary_elements";
com.wiris.util.geometry.GeometryConstraint.PARALLELOGRAM_BY_TWO_VECTORS = "parallelogram_by_two_vectors";
com.wiris.util.geometry.GeometryConstraint.ANGLE_BY_TWO_ELEMENTS = "angle_by_two_elements";
com.wiris.util.geometry.GeometryConstraint.DISTANCE_BETWEEN_TWO_ELEMENTS = "distance_between_two_elements";
com.wiris.util.geometry.GeometryConstraint.PART_OF_ELEMENT_BY_ELEMENT_AND_TWO_POINTS = "part_of_element_by_element_and_two_points";
com.wiris.util.geometry.GeometryConstraint.LENGTH_OF_ELEMENT = "length_of_element";
com.wiris.util.geometry.GeometryConstraint.LABEL_OF_ELEMENT = "label_of_element";
com.wiris.util.geometry.GeometryConstraint.LABEL_FIXED = "label_fixed";
com.wiris.util.geometry.GeometryConstraint.ELEMENT_BY_LABEL = "element_by_label";
com.wiris.util.geometry.GeometryConstraint.INTERPOLATING_POLYNOMIAL_BY_POINTS = "interpolating_polynomial_by_points";
com.wiris.util.geometry.GeometryConstraint.IMAGE_BY_POINTS = "image_by_points";
com.wiris.util.geometry.GeometryConstraint.LABEL_OF_ELEMENT_PART = "label_of_element_part";
com.wiris.util.geometry.GeometryConstraint.TYPE = "type";
com.wiris.util.geometry.GeometryConstraint.INPUT = "input";
com.wiris.util.geometry.GeometryConstraint.OUTPUT = "output";
com.wiris.util.geometry.GeometryDisplay.ID = "id";
com.wiris.util.geometry.GeometryDisplay.STYLES = "styles";
com.wiris.util.geometry.GeometryDisplay.BACKGROUND_COLOR = "background_color";
com.wiris.util.geometry.GeometryDisplay.CENTER = "center";
com.wiris.util.geometry.GeometryDisplay.HEIGHT = "height";
com.wiris.util.geometry.GeometryDisplay.WIDTH = "width";
com.wiris.util.geometry.GeometryDisplay.ASPECT_RATIO = "aspect_ratio";
com.wiris.util.geometry.GeometryDisplay.AXIS_X = "axis_x";
com.wiris.util.geometry.GeometryDisplay.AXIS_Y = "axis_y";
com.wiris.util.geometry.GeometryDisplay.AXIS_COLOR = "axis_color";
com.wiris.util.geometry.GeometryDisplay.VERTICAL_AXIS_VALUES_POSITION = "vertical_axis_values_position";
com.wiris.util.geometry.GeometryDisplay.HORIZONTAL_AXIS_VALUES_POSITION = "horizontal_axis_values_position";
com.wiris.util.geometry.GeometryDisplay.VERTICAL_AXIS_LABEL = "vertical_axis_label";
com.wiris.util.geometry.GeometryDisplay.HORIZONTAL_AXIS_LABEL = "horizontal_axis_label";
com.wiris.util.geometry.GeometryDisplay.HORIZONTAL_AXIS_STEP = "horizontal_axis_step";
com.wiris.util.geometry.GeometryDisplay.VERTICAL_AXIS_STEP = "vertical_axis_step";
com.wiris.util.geometry.GeometryDisplay.GRID_X = "grid_x";
com.wiris.util.geometry.GeometryDisplay.GRID_Y = "grid_y";
com.wiris.util.geometry.GeometryDisplay.GRID_SUBDIVISIONS = "grid_subdivisions";
com.wiris.util.geometry.GeometryDisplay.GRID_SUBDIVISIONS_X = "grid_subdivisions_x";
com.wiris.util.geometry.GeometryDisplay.GRID_SUBDIVISIONS_Y = "grid_subdivisions_y";
com.wiris.util.geometry.GeometryDisplay.GRID_PRIMARY_COLOR = "grid_primary_color";
com.wiris.util.geometry.GeometryDisplay.GRID_SECONDARY_COLOR = "grid_secondary_color";
com.wiris.util.geometry.GeometryDisplay.HORIZONTAL_GRID_STEP = "horizontal_grid_step";
com.wiris.util.geometry.GeometryDisplay.VERTICAL_GRID_STEP = "vertical_grid_step";
com.wiris.util.geometry.GeometryDisplay.STATS_AXIS = "stats_axis";
com.wiris.util.geometry.GeometryDisplay.HORIZONTAL_ORIENTATION = "horizontal_orientation";
com.wiris.util.geometry.GeometryDisplay.ABOVE = "above";
com.wiris.util.geometry.GeometryDisplay.RIGHT = "right";
com.wiris.util.geometry.GeometryDisplay.BELOW = "below";
com.wiris.util.geometry.GeometryDisplay.LEFT = "left";
com.wiris.util.geometry.GeometryDisplay.NONE = "none";
com.wiris.util.geometry.GeometryDisplay.AUTO = "auto";
com.wiris.util.geometry.GeometryDisplay.DELETE_ON_UPDATE_FILE = "delete_on_update_file";
com.wiris.util.geometry.GeometryDisplay.EXTERNAL = "external";
com.wiris.util.geometry.GeometryElement.POINT = "point";
com.wiris.util.geometry.GeometryElement.LINE = "line";
com.wiris.util.geometry.GeometryElement.LINE_SEGMENT = "line_segment";
com.wiris.util.geometry.GeometryElement.VECTOR = "vector";
com.wiris.util.geometry.GeometryElement.RAY = "ray";
com.wiris.util.geometry.GeometryElement.POLYLINE = "polyline";
com.wiris.util.geometry.GeometryElement.ARC = "arc";
com.wiris.util.geometry.GeometryElement.ARC_BY_POINTS = "arc_by_points";
com.wiris.util.geometry.GeometryElement.CIRCLE_ARC = "circle_arc";
com.wiris.util.geometry.GeometryElement.CIRCLE = "circle";
com.wiris.util.geometry.GeometryElement.PATH = "path";
com.wiris.util.geometry.GeometryElement.POLYGON = "polygon";
com.wiris.util.geometry.GeometryElement.COMPOUND = "compound_element";
com.wiris.util.geometry.GeometryElement.CONIC = "conic";
com.wiris.util.geometry.GeometryElement.FUNCTION_GRAPH = "function_graph";
com.wiris.util.geometry.GeometryElement.REGION = "region";
com.wiris.util.geometry.GeometryElement.REGION_ARC = "region_arc";
com.wiris.util.geometry.GeometryElement.REGION_CIRCLE_ARC = "region_circle_arc";
com.wiris.util.geometry.GeometryElement.UNDEFINED = "undefined";
com.wiris.util.geometry.GeometryElement.TEXT_BOX = "text_box";
com.wiris.util.geometry.GeometryElement.PARAMETRIC_CURVE = "parametric_curve";
com.wiris.util.geometry.GeometryElement.AREA = "area";
com.wiris.util.geometry.GeometryElement.RECTANGLE = "rectangle";
com.wiris.util.geometry.GeometryElement.PARALLELOGRAM = "parallelogram";
com.wiris.util.geometry.GeometryElement.ANGLE = "angle";
com.wiris.util.geometry.GeometryElement.PART_OF_ELEMENT = "part_of_element";
com.wiris.util.geometry.GeometryElement.LENGTH = "length";
com.wiris.util.geometry.GeometryElement.DISTANCE = "distance";
com.wiris.util.geometry.GeometryElement.LABEL = "label";
com.wiris.util.geometry.GeometryElement.IMAGE = "image";
com.wiris.util.geometry.GeometryElement.INTERPOLATING_POLYNOMIAL = "interpolating_polynomial";
com.wiris.util.geometry.GeometryElement.HISTOGRAM = "histogram";
com.wiris.util.geometry.GeometryElement.BOX_PLOT = "box_plot";
com.wiris.util.geometry.GeometryElement.BAR_CHART = "bar_chart";
com.wiris.util.geometry.GeometryElement.PIE_CHART = "pie_chart";
com.wiris.util.geometry.GeometryElement.LINE_CHART = "line_chart";
com.wiris.util.geometry.GeometryElement.TYPE = "type";
com.wiris.util.geometry.GeometryElement.ID = "id";
com.wiris.util.geometry.GeometryElement.COORDINATES = "coordinates";
com.wiris.util.geometry.GeometryElement.PATH_CLOSED = "closed";
com.wiris.util.geometry.GeometryElement.INTERVAL = "interval";
com.wiris.util.geometry.GeometryElement.VALUE = "value_content";
com.wiris.util.geometry.GeometryElement.DEFINITION = "definition_content";
com.wiris.util.geometry.GeometryElement.ELEMENTS = "elements";
com.wiris.util.geometry.GeometryElement.START_POINT = "start_point";
com.wiris.util.geometry.GeometryElement.END_POINT = "end_point";
com.wiris.util.geometry.GeometryElement.TEXT = "text";
com.wiris.util.geometry.GeometryElement.CIRCUITS = "circuits";
com.wiris.util.geometry.GeometryElement.VERTICES = "vertices";
com.wiris.util.geometry.GeometryElement.PIECES = "pieces";
com.wiris.util.geometry.GeometryElement.PIECE_REVERSED = "piece_reversed";
com.wiris.util.geometry.GeometryElement.BOUNDED = "bounded";
com.wiris.util.geometry.GeometryElement.STATISTICAL_DATA = "statistical_data";
com.wiris.util.geometry.GeometryElement.BIN_LIMITS = "bin_limits";
com.wiris.util.geometry.GeometryElement.CLOSED_LEFT = "closed_left";
com.wiris.util.geometry.GeometryElement.WHISKER_RANGE = "whisker_range";
com.wiris.util.geometry.GeometryElement.LABEL_VERTICAL_POSITION = "text_box_vertical_position";
com.wiris.util.geometry.GeometryElement.LABEL_HORIZONTAL_POSITION = "text_box_horizontal_position";
com.wiris.util.geometry.GeometryElement.LABEL_POSITION_RIGHT = "right";
com.wiris.util.geometry.GeometryElement.LABEL_POSITION_LEFT = "left";
com.wiris.util.geometry.GeometryElement.LABEL_POSITION_CENTER = "centered";
com.wiris.util.geometry.GeometryElement.LABEL_POSITION_BASELINE = "baseline";
com.wiris.util.geometry.GeometryElement.LABEL_POSITION_TOP = "top";
com.wiris.util.geometry.GeometryElement.LABEL_POSITION_BOTTOM = "bottom";
com.wiris.util.geometry.GeometryElement.DELETE_FROM_CONSTRUCTION = "deleteFromConstruction";
com.wiris.util.geometry.GeometryElement.FROM_CAS_KERNEL = "wiris_cas_kernel_computed";
com.wiris.util.geometry.GeometryElementStyle.__meta__ = { statics : { LABEL : { Deprecated : null}}};
com.wiris.util.geometry.GeometryElementStyle.REFER = "ref";
com.wiris.util.geometry.GeometryElementStyle.PARENT = "ref_parent";
com.wiris.util.geometry.GeometryElementStyle.STROKE = "stroke";
com.wiris.util.geometry.GeometryElementStyle.STROKE_WIDTH = "stroke_width";
com.wiris.util.geometry.GeometryElementStyle.STROKE_DASHARRAY = "stroke_dasharray";
com.wiris.util.geometry.GeometryElementStyle.LINE_STYLE = "line_style";
com.wiris.util.geometry.GeometryElementStyle.BORDER_WIDTH = "border_width";
com.wiris.util.geometry.GeometryElementStyle.BORDER_OPACITY = "border_opacity";
com.wiris.util.geometry.GeometryElementStyle.FILL = "fill";
com.wiris.util.geometry.GeometryElementStyle.FILL_OPACITY = "fill_opacity";
com.wiris.util.geometry.GeometryElementStyle.POINT_SIZE = "point_size";
com.wiris.util.geometry.GeometryElementStyle.POINT_STYLE = "point_style";
com.wiris.util.geometry.GeometryElementStyle.LABEL = "label";
com.wiris.util.geometry.GeometryElementStyle.LABEL_VISIBILITY = "label_visibility";
com.wiris.util.geometry.GeometryElementStyle.LABEL_COLOR = "label_color";
com.wiris.util.geometry.GeometryElementStyle.LABEL_BOLD = "label_bold";
com.wiris.util.geometry.GeometryElementStyle.LABEL_ITALIC = "label_italic";
com.wiris.util.geometry.GeometryElementStyle.LABEL_POSITION_LOGIC = "label_position_logic";
com.wiris.util.geometry.GeometryElementStyle.VISIBLE = "visible";
com.wiris.util.geometry.GeometryElementStyle.FIXED = "fixed";
com.wiris.util.geometry.GeometryElementStyle.COLOR = "color";
com.wiris.util.geometry.GeometryElementStyle.FONT_SIZE = "font_size";
com.wiris.util.geometry.GeometryElementStyle.VIEW_3D = "view_3D";
com.wiris.util.geometry.GeometryElementStyle.PIE_RADIUS = "pie_radius";
com.wiris.util.geometry.GeometryElementStyle.PIE_HEIGHT = "pie_height";
com.wiris.util.geometry.GeometryElementStyle.PIE_INCLINATION_ANGLE = "pie_inclination_angle";
com.wiris.util.geometry.GeometryElementStyle.PIE_STARTING_ANGLE = "pie_starting_angle";
com.wiris.util.geometry.GeometryElementStyle.PIE_CLOCKWISE = "pie_clockwise";
com.wiris.util.geometry.GeometryElementStyle.SPACE_BETWEEN_BARS = "space_between_bars";
com.wiris.util.geometry.GeometryElementStyle.BAR_WIDTH = "bar_width";
com.wiris.util.geometry.GeometryElementStyle.SPACE_BETWEEN_SIDE_BARS = "space_between_side_bars";
com.wiris.util.geometry.GeometryElementStyle.BESIDE = "beside";
com.wiris.util.geometry.GeometryElementStyle.BOX_WIDTH = "box_width";
com.wiris.util.geometry.GeometryElementStyle.SPACE_BETWEEN_BOXES = "space_between_boxes";
com.wiris.util.geometry.GeometryElementStyle.NOTCH = "notch";
com.wiris.util.geometry.GeometryElementStyle.SHOW_OUTLIERS = "show_outliers";
com.wiris.util.geometry.GeometryElementStyle.FREQUENCIES = "frequencies";
com.wiris.util.geometry.GeometryElementStyle.SHOW_NAME_LABELS = "show_name_labels";
com.wiris.util.geometry.GeometryElementStyle.SHOW_DATA_LABELS = "show_data_labels";
com.wiris.util.geometry.GeometryElementStyle.LABELS_TEXT = "name_labels";
com.wiris.util.geometry.GeometryElementStyle.COLORS = "colors";
com.wiris.util.geometry.GeometryElementStyle.XREF = "xref";
com.wiris.util.geometry.GeometryElementStyle.CHANGE_STEP = "change_step";
com.wiris.util.geometry.GeometryElementStyle.LENGTH_FOR_NEWS = "length_for_news";
com.wiris.util.geometry.GeometryElementStyle.MAX_VALUE_PIE = "max_value_pie";
com.wiris.util.geometry.GeometryElementStyle.POINT_SIZES = "point_sizes";
com.wiris.util.geometry.GeometryElementStyle.STROKE_WIDTHS = "stroke_widths";
com.wiris.util.geometry.GeometryFile.ELEMENTS = "elements";
com.wiris.util.geometry.GeometryFile.CONSTRAINTS = "constraints";
com.wiris.util.geometry.GeometryFile.DISPLAYS = "displays";
com.wiris.util.geometry.GeometryFile.HANDWRITING_TRACES = "handwriting_traces";
com.wiris.util.geometry.GeometryHandwriting.RECOGNIZER = "recognizer";
com.wiris.util.geometry.GeometryHandwriting.DISPLAY_ID = "display_id";
com.wiris.util.geometry.GeometryHandwriting.STROKES = "strokes";
com.wiris.util.graphics.BoxStyle.MTEXT_FLAG = 1;
com.wiris.util.graphics.BoxStyle.MATHVARIANT_FONT_FLAG = 2;
com.wiris.util.graphics.BoxStyle.FONT_FAMILY_FLAG = 4;
com.wiris.util.graphics.BoxStyle.ITALIC_FLAG = 8;
com.wiris.util.graphics.BoxStyle.BOLD_FLAG = 16;
com.wiris.util.graphics.BoxStyle.PIXELS_SIZE_FLAG = 32;
com.wiris.util.graphics.BoxStyle.DISPLAY_STYLE_FLAG = 64;
com.wiris.util.graphics.BoxStyle.PROPORTIONAL_SIZE_FLAG = 128;
com.wiris.util.graphics.BoxStyle.COLOR_FLAG = 256;
com.wiris.util.graphics.BoxStyle.LINE_WIDTH_FLAG = 512;
com.wiris.util.graphics.BoxStyle.ZOOM_FLAG = 1024;
com.wiris.util.graphics.BoxStyle.WIDTH_FLAG = 2048;
com.wiris.util.graphics.BoxStyle.INVISIBLE_FLAG = 4096;
com.wiris.util.graphics.BoxStyle.RTL_FLAG = 8192;
com.wiris.util.graphics.BoxStyle.MAX_WIDTH_FLAG = 16384;
com.wiris.util.graphics.BoxStyle.ALIGN_FLAG = 32768;
com.wiris.util.graphics.BoxStyle.CLASSTYPE_FLAG = 65536;
com.wiris.util.graphics.BoxStyle.FORCED_LIGATURE_FLAG = 131072;
com.wiris.util.graphics.BoxStyle.IGNORE_PROPORTIONAL_SIZE_FLAG = 262144;
com.wiris.util.graphics.BoxStyle.POSITIONABLE_FLAG = 524288;
com.wiris.util.graphics.BoxStyle.SCRIPT_LEVEL_FLAG = 1048576;
com.wiris.util.graphics.BoxStyle.BACKGROUNDCOLOR_FLAG = 2097152;
com.wiris.util.graphics.BoxStyle.LINE_STYLE_FLAG = 4194304;
com.wiris.util.graphics.BoxStyle.BIT_REMOVE_FLAG = 24;
com.wiris.util.graphics.BoxStyle.FIRST_REMOVE_FLAG = 16777216;
com.wiris.util.graphics.BoxStyle.REMOVE_MTEXT_FLAG = 16777216;
com.wiris.util.graphics.BoxStyle.REMOVE_MATHVARIANT_FONT_FLAG = 33554432;
com.wiris.util.graphics.BoxStyle.REMOVE_FONT_FAMILY_FLAG = 67108864;
com.wiris.util.graphics.BoxStyle.REMOVE_ITALIC_FLAG = 134217728;
com.wiris.util.graphics.BoxStyle.REMOVE_BOLD_FLAG = 268435456;
com.wiris.util.graphics.BoxStyle.REMOVE_PIXELS_SIZE_FLAG = 536870912;
com.wiris.util.graphics.BoxStyle.LEFT_ALIGN = 1;
com.wiris.util.graphics.BoxStyle.RIGHT_ALIGN = 2;
com.wiris.util.graphics.BoxStyle.CENTER_ALIGN = 3;
com.wiris.util.graphics.BoxStyle.DECIMAL_ALIGN = 4;
com.wiris.util.graphics.BoxStyle.RELATION_ALIGN = 5;
com.wiris.util.graphics.BoxStyle.AUTO_ALIGN = 6;
com.wiris.util.graphics.DisplaySettings.MAGNETIC_GRID = "magnetic_grid";
com.wiris.util.graphics.DisplaySettings.DISPLAY_ELEMENT_NAMES = "displayElementsName";
com.wiris.util.graphics.DisplaySettings.DISPLAY_ELEMENT_VALUES = "displayElementsValue";
com.wiris.util.graphics.DisplaySettings.ASPECT_RATIO_LOCKED = "aspectRatioLocked";
com.wiris.util.graphics.DisplaySettings.ALWAYS = "always";
com.wiris.util.graphics.DisplaySettings.FOCUS = "focus";
com.wiris.util.graphics.DisplaySettings.NEVER = "never";
com.wiris.util.graphics.DisplaySettings.FORCE = "force";
com.wiris.util.graphics.DisplaySettings.SNAP = "snap";
com.wiris.util.graphics.DisplaySettings.DISABLED = "disabled";
com.wiris.util.graphics.DisplaySettings.DEFAULT_MAGNETIC_GRID = com.wiris.util.graphics.DisplaySettings.SNAP;
com.wiris.util.graphics.DisplaySettings.DEFAULT_DISPLAY_ELEMENT_NAMES = "never";
com.wiris.util.graphics.DisplaySettings.DEFAULT_DISPLAY_ELEMENT_VALUES = "focus";
com.wiris.util.graphics.DisplaySettings.DEFAULT_ASPECT_RATIO_LOCKED = false;
com.wiris.util.json.parser.JsonParse.ALLOW_SINGLE_QUOTES = true;
com.wiris.util.lang.Words.words = new Hash();
com.wiris.util.lang.Words.thisLock = { };
com.wiris.util.net.MimeTypes.JSON = "application/json";
com.wiris.util.net.MimeTypes.LATEX = "application/x-latex";
com.wiris.util.net.MimeTypes.XML = "application/xml";
com.wiris.util.net.MimeTypes.MTWEB_PARAMETERS = "application/vnd.wiris.mtweb-params+json";
com.wiris.util.net.MimeTypes.HAND_STROKES = "application/vnd.wiris.mtweb-strokes+json";
com.wiris.util.telemetry.Message.TOPIC_KEY = "topic";
com.wiris.util.telemetry.Message.TIMESTAMP_KEY = "timestamp";
com.wiris.util.telemetry.Sender.PRODUCT_VERSION_KEY = "product_version";
com.wiris.util.telemetry.Sender.PRODUCT_KEY_KEY = "product_key";
com.wiris.util.telemetry.Sender.ID_KEY = "id";
com.wiris.util.telemetry.Sender.DEPLOYMENT_KEY = "deployment";
com.wiris.util.telemetry.Sender.DOMAIN_KEY = "domain";
com.wiris.util.telemetry.Sender.USER_AGENT_KEY = "user_agent";
com.wiris.util.telemetry.Sender.OS_KEY = "os";
com.wiris.util.telemetry.Sender.IS_TRIAL_KEY = "is_trial";
com.wiris.util.telemetry.Sender.IP_KEY = "ip";
com.wiris.util.telemetry.Sender.MAC_ADDRESS_KEY = "mac_address";
com.wiris.util.telemetry.Sender.BACKEND_KEY = "backend";
com.wiris.util.telemetry.Sender.FRAMEWORK_KEY = "framework";
com.wiris.util.telemetry.Sender.PLATFORM_KEY = "platform";
com.wiris.util.telemetry.Sender.LANGUAGE_KEY = "language";
com.wiris.util.telemetry.Session.ID_KEY = "id";
com.wiris.util.telemetry.Session.PAGE_KEY = "page";
com.wiris.util.telemetry.TelemetryLoggerImpl.NONE = "NONE";
com.wiris.util.telemetry.TelemetryLoggerImpl.ERROR = "ERROR";
com.wiris.util.telemetry.TelemetryLoggerImpl.WARNING = "WARNING";
com.wiris.util.telemetry.TelemetryLoggerImpl.INFO = "INFO";
com.wiris.util.telemetry.TelemetryLoggerImpl.DEBUG = "DEBUG";
com.wiris.util.telemetry.TelemetryLoggerImpl.LEVELS = [com.wiris.util.telemetry.TelemetryLoggerImpl.NONE,com.wiris.util.telemetry.TelemetryLoggerImpl.ERROR,com.wiris.util.telemetry.TelemetryLoggerImpl.WARNING,com.wiris.util.telemetry.TelemetryLoggerImpl.INFO,com.wiris.util.telemetry.TelemetryLoggerImpl.DEBUG];
com.wiris.util.telemetry.TelemetryLoggerImpl.LOGGING_TOPIC = 0;
com.wiris.util.telemetry.TelemetryLoggerImpl.LEVEL_KEY = "level";
com.wiris.util.telemetry.TelemetryLoggerImpl.MESSAGE_KEY = "message";
com.wiris.util.telemetry.TelemetryServiceImpl.HEADER_API_KEY_KEY = "x-api-key";
com.wiris.util.telemetry.TelemetryServiceImpl.HEADER_ACCEPT_VERSION_KEY = "accept-version";
com.wiris.util.telemetry.TelemetryServiceImpl.HEADER_ACCEPT_VERSION_VALUE = "1.0.0";
com.wiris.util.telemetry.TelemetryServiceImpl.HEADER_CONTENT_TYPE_KEY = "Content-Type";
com.wiris.util.telemetry.TelemetryServiceImpl.HEADER_CONTENT_TYPE_VALUE = "application/json";
com.wiris.util.telemetry.TelemetryServiceImpl.BODY_MESSAGES_KEY = "messages";
com.wiris.util.telemetry.TelemetryServiceImpl.BODY_SENDER_KEY = "sender";
com.wiris.util.telemetry.TelemetryServiceImpl.BODY_SESSION_KEY = "session";
com.wiris.util.telemetry.TelemetryServiceImpl.BODY_TEST_KEY = "test";
com.wiris.util.telemetry.TelemetryServiceImpl.BODY_TEST_VALUE = "200";
com.wiris.util.telemetry.TelemetryServiceImpl.OPTIONS_KEY = "options";
com.wiris.util.telemetry.TelemetryServiceImpl.HEADERS_KEY = "headers";
com.wiris.util.telemetry.TelemetryServiceImpl.BODY_KEY = "body";
com.wiris.util.telemetry.TelemetryServiceImpl.STATUS_SERVER_ERROR = 500;
com.wiris.util.telemetry.TelemetryServiceImpl.STATUS_LIMIT_EXCEEDED = 429;
com.wiris.util.telemetry.TelemetryServiceImpl.STATUS_PAYLOAD_TOO_LARGE = 413;
com.wiris.util.telemetry.TelemetryServiceImpl.STATUS_CLIENT_ERROR = 400;
com.wiris.util.telemetry.TelemetryServiceImpl.STATUS_REDIRECTION = 300;
com.wiris.util.telemetry.TelemetryServiceImpl.STATUS_SUCCESS = 200;
com.wiris.util.telemetry.TelemetryServiceImpl.MESSAGE_UNKNOWN = "UNKNOWN ERROR";
com.wiris.util.telemetry.TelemetryServiceImpl.MESSAGE_SERVER_ERROR = "SERVER_ERROR";
com.wiris.util.telemetry.TelemetryServiceImpl.MESSAGE_LIMIT_EXCEEDED = "LIMIT EXCEEDED";
com.wiris.util.telemetry.TelemetryServiceImpl.MESSAGE_PAYLOAD_TOO_LARGE = "PAYLOAD TOO LARGE";
com.wiris.util.telemetry.TelemetryServiceImpl.MESSAGE_CLIENT_ERROR = "CLIENT ERROR";
com.wiris.util.telemetry.TelemetryServiceImpl.MESSAGE_REDIRECTION = "STATUS REDIRECTION";
com.wiris.util.telemetry.TelemetryServiceImpl.MESSAGE_SUCCESS = "SUCCESS";
com.wiris.util.telemetry.TelemetryServiceImpl.LOCAL_USER_ID = "localUserId";
com.wiris.util.telemetry.TelemetryServiceImpl.BATCH_MAX_SIZE = 1000000;
com.wiris.util.type.IconUtils.TYPE_IMAGE = "image";
com.wiris.util.type.IconUtils.TYPE_SVG = "svg";
com.wiris.util.type.IconUtils.TYPE_MATERIAL = "material";
com.wiris.util.ui.SVGIcon.filePath = "svg-defs.svg";
com.wiris.util.ui.Style.SIZE_AUTO = -1;
com.wiris.util.ui.Style.SIZE_FULL = -2;
com.wiris.util.ui.Style.SIZE_UNIT_PX = "px";
com.wiris.util.ui.Style.SIZE_UNIT_EM = "em";
com.wiris.util.ui.Style.SIZE_UNIT_PERCENT = "%";
com.wiris.util.ui.Style.SIZE_UNIT_VIEW_WIDTH = "vw";
com.wiris.util.ui.Style.SIZE_UNIT_VIEW_HEIGHT = "vh";
com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_LEFT = 0;
com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_CENTER = 1;
com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_RIGHT = 2;
com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_STRETCH = 3;
com.wiris.util.ui.Style.HORIZONTAL_ALIGNMENT_SPACED = 5;
com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_TOP = 0;
com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_MIDDLE = 1;
com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_BOTTOM = 2;
com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_STRETCH = 3;
com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_BASELINE = 4;
com.wiris.util.ui.Style.VERTICAL_ALIGNMENT_SPACED = 5;
com.wiris.util.ui.component.Chip.CLASS_CHIP = "chip";
com.wiris.util.ui.component.Chip.CLASS_CHIP_OUTLINED = "chipOutlined";
com.wiris.util.ui.component.ActionChip.CLASS_ACTION_CHIP = "actionChip";
com.wiris.util.ui.component.ActionLabel.CLASS_ACTION_LABEL = "actionLabel";
com.wiris.util.ui.component.ActivityContainer.CLASS_ACTIVITY_CONTAINER = "activityContainer";
com.wiris.util.ui.component.Button.CLASS_BUTTON = "button";
com.wiris.util.ui.component.Button.CLASS_BUTTON_OUTLINED = "buttonOutlined";
com.wiris.util.ui.component.Button.CLASS_BUTTON_CONTAINED = "buttonContained";
com.wiris.util.ui.component.Button.CLASS_BUTTON_TEXT = "buttonText";
com.wiris.util.ui.component.Button.CLASS_BUTTON_ICON = "buttonIcon";
com.wiris.util.ui.component.ButtonPanel.CLASS_BUTTON_PANEL = "buttonPanel";
com.wiris.util.ui.component.CheckBox.CLASS_CHECKBOX = "checkBox";
com.wiris.util.ui.component.CheckBox.CLASS_CHECKBOX_BUTTON_TEXT = "checkBoxText";
com.wiris.util.ui.component.CheckBox.CLASS_CHECKBOX_BUTTON_HELPER_TEXT = "checkBoxHelperText";
com.wiris.util.ui.component.ChoiceChip.CLASS_CHOICE_CHIP = "choiceChip";
com.wiris.util.ui.component.ContextPanelButton.CLASS_CONTEXT_PANEL_BUTTON = "contextPanelButton";
com.wiris.util.ui.component.ContextPanelButton.CLASS_CONTEXT_PANEL_BUTTON_DIALOG = "contextPanelButtonDialog";
com.wiris.util.ui.component.ContextPanelButton.CLASS_CONTEXT_MENU_BUTTON_PRESSED = "contextPanelButtonPressed";
com.wiris.util.ui.component.ColorPicker.CLASS_COLOR_PICKER = "colorPicker";
com.wiris.util.ui.component.ColorPicker.CLASS_COLOR_PICKER_DIALOG = "colorPickerDialog";
com.wiris.util.ui.component.ColorPicker.CLASS_COLOR_DISPLAY = "colorDisplay";
com.wiris.util.ui.component.ColorPicker.CSS_COLOR_VARIABLE_NAME = "--line-color";
com.wiris.util.ui.component.ColorPicker.ACTION_PICK_COLOR_ID = "pickColor";
com.wiris.util.ui.component.ColorPicker.CHECK_MARK = com.wiris.system.Utf8.uchr(10003);
com.wiris.util.ui.component.ColorPicker.COLOR_BUTTON_SIZE = 25;
com.wiris.util.ui.component.ColorPicker.RECOMMENDED_PALETTE = [12208200,13254252,9256092,5783702,4279439,3503543,2195891,1671823,1206367,4555080,6983752,10330176,14463564,14260263,13729317,13064761,7493968,4872544,6381921];
com.wiris.util.ui.component.ColorPicker.PALETTE = [[16772078,16764370,15702682,15037299,15684432,16007990,15022389,13840175,12986408,12000284],[16573676,16301008,16027569,15753874,15483002,15277667,14162784,12720219,11342935,8916559],[15984117,14794471,13538264,12216520,11225020,10233776,9315498,8069026,6953882,4854924],[15591414,13747433,11771355,9795021,8280002,6765239,6174129,5320104,4532128,3218322],[15264502,12962537,10463450,7964363,6056896,4149685,3754411,3162015,2635155,1713022],[14938877,12312315,9489145,6600182,4367861,2201331,2001125,1668818,1402304,870305],[14808574,11789820,8508666,5227511,2733814,240116,236517,166097,161725,87963],[14743546,11725810,8445674,5099745,2541274,48340,44225,38823,33679,24676],[14742257,11722715,8440772,5093036,2533018,38536,35195,31083,26972,19776],[15267305,13166281,10868391,8505220,6732650,5025616,4431943,3706428,3046706,1793568],[15857897,14478792,12968357,11457921,10275941,9159498,8172354,6856504,5606191,3369246],[16382951,15791299,15134364,14477173,13951319,13491257,12634675,11514923,10394916,8550167],[16776679,16775620,16774557,16773494,16772696,16771899,16635957,16498733,16361509,16088855],[16775393,16772275,16769154,16766287,16763432,16761095,16757504,16752640,16748288,16740096],[16774112,16769202,16764032,16758605,16754470,16750592,16485376,16088064,15690752,15094016],[16509415,16764092,16755601,16747109,16740419,16733986,16011550,15092249,14172949,12531212],[15723497,14142664,12364452,10586239,9268835,7951688,7162945,6111287,5125166,4073251],[15527921,13621468,11583173,9479342,7901340,6323595,5533306,4545124,3622735,2503224],[16777215,14869218,13027014,11184810,9276813,7434609,5592405,3684408,1842204,0]];
com.wiris.util.ui.component.ColorPicker.recentColors = new com.wiris.util.type.SortedHash();
com.wiris.util.ui.component.CompositeLabel.CLASS_COMPOSITE_LABEL = "compositeLabel";
com.wiris.util.ui.component.ContextPanel.CLASS_CONTEXT_PANEL = "contextPanel";
com.wiris.util.ui.component.ContextPanel.ANCHOR_CENTER = 0;
com.wiris.util.ui.component.ContextPanel.ANCHOR_TOP = 1;
com.wiris.util.ui.component.ContextPanel.ANCHOR_LEFT = 2;
com.wiris.util.ui.component.ContextPanel.ANCHOR_BOTTOM = 4;
com.wiris.util.ui.component.ContextPanel.ANCHOR_RIGHT = 8;
com.wiris.util.ui.component.ContextPanel.ANIMATION_MODE_NONE = 0;
com.wiris.util.ui.component.ContextPanel.ANIMATION_MODE_LEFT_TO_RIGHT = 1;
com.wiris.util.ui.component.ContextPanel.ANIMATION_MODE_TOP_TO_BOTTOM = 2;
com.wiris.util.ui.component.ContextPanel.ANIMATION_MODE_RIGHT_TO_LEFT = 4;
com.wiris.util.ui.component.ContextPanel.ANIMATION_MODE_BOTTOM_TO_TOP = 8;
com.wiris.util.ui.component.ContextMenu.CLASS_CONTEXT_MENU = "contextMenu";
com.wiris.util.ui.component.ContextMenuButton.CLASS_CONTEXT_MENU_BUTTON = "contextMenuButton";
com.wiris.util.ui.component.ContextMenuButton.CLASS_CONTEXT_MENU_BUTTON_DIALOG = "contextMenuButtonDialog";
com.wiris.util.ui.component.ContextMenuButton.CLASS_CONTEXT_MENU_BUTTON_DIALOG_ITEM = "contextMenuButtonDialogItem";
com.wiris.util.ui.component.ContextMenuButton.NONE = -99;
com.wiris.util.ui.component.DataCell.CLASS_DATA_TABLE_CELL = "dataTableCell";
com.wiris.util.ui.component.DataRow.CLASS_DATA_TABLE_ROW = "dataTableRow";
com.wiris.util.ui.component.DataTable.CLASS_DATA_TABLE = "dataTable";
com.wiris.util.ui.component.DataTable.CLASS_DATA_TABLE_HEADER = "dataTableHeader";
com.wiris.util.ui.component.DataTable.CLASS_DATA_TABLE_BODY = "dataTableBody";
com.wiris.util.ui.component.Dialog.CLASS_DIALOG = "dialog";
com.wiris.util.ui.component.Dialog.CLASS_DIALOG_MESSAGE = "dialogMessage";
com.wiris.util.ui.component.Dialog.CLASS_DIALOG_CONTROL = "dialogControl";
com.wiris.util.ui.component.Dialog.CLASS_DIALOG_PRIMARY_BUTTONS = "dialogPrimaryButtons";
com.wiris.util.ui.component.Dialog.CLASS_DIALOG_SECONDARY_BUTTONS = "dialogSecondaryButtons";
com.wiris.util.ui.component.Dialog.LONG_ACTION_TEXT_LENGTH_LIMIT = 11;
com.wiris.util.ui.component.Dialog.LONG_ACTION_TEXT_WORDS_LIMIT = 3;
com.wiris.util.ui.component.DialogForm.CLASS_DIALOG_FORM = "dialogForm";
com.wiris.util.ui.component.DialogStack.CLASS_DIALOG_STACK = "dialogStack";
com.wiris.util.ui.component.Divider.CLASS_DIVIDER = "divider";
com.wiris.util.ui.component.Divider.CLASS_DIVIDER_VERTICAL = "dividerVertical";
com.wiris.util.ui.component.DrawerPanel.CLASS_DRAWER_PANEL = "drawerPanel";
com.wiris.util.ui.component.DrawerPanel.CLASS_DRAWER_PANEL_RIGHT_DRAWER = "drawerPanelRightDrawer";
com.wiris.util.ui.component.DrawerPanel.CLASS_DRAWER_PANEL_BOTTOM_DRAWER = "drawerPanelBottomDrawer";
com.wiris.util.ui.component.DrawerPanel.CLASS_DRAWER_PANEL_PERSISTENT_DRAWER_PANEL = "drawerPanelPersistentDrawerPanel";
com.wiris.util.ui.component.DrawerPanel.Z_INDEX = 900;
com.wiris.util.ui.component.DrawingPanel.CLASS_DRAWING_PANEL = "drawingPanel";
com.wiris.util.ui.component.DrawingPanel.CLASS_DRAWING_PANEL_EMPTY = "drawingPanelEmpty";
com.wiris.util.ui.component.DrawingPanel.CLASS_DRAWING_PANEL_WITH_GRID = "drawingPanelWithGrid";
com.wiris.util.ui.component.DrawingPanel.DELETION_GESTURE_INTERSECTIONS = 5;
com.wiris.util.ui.component.DrawingPanel.DELETION_DIAGONAL_OFFSET = 0.15;
com.wiris.util.ui.component.DrawingPanel.DELETION_SAFE_MARGIN = 20;
com.wiris.util.ui.component.DrawingPanel.DELETION_RECTANGLE_THICKNESS = 10;
com.wiris.util.ui.component.DrawingPanel.UNDO_TYPE_ADD = 0;
com.wiris.util.ui.component.DrawingPanel.UNDO_TYPE_REMOVE = 1;
com.wiris.util.ui.component.DrawingPanel.UNDO_TYPE_CLEAR = 2;
com.wiris.util.ui.component.DrawingPanel.DEFAULT_LINE_WIDTH = 3;
com.wiris.util.ui.component.DrawingPanel.DEFAULT_DELETED_STROKE_COLOR = com.wiris.util.graphics.Color.fromInt(15538726);
com.wiris.util.ui.component.DrawingPanel.DEFAULT_DELETION_LINE_COLOR = com.wiris.util.graphics.Color.fromInt(15538726);
com.wiris.util.ui.component.DrawingPanel.DEFAULT_LINE_COLOR = com.wiris.util.graphics.Color.fromInt(2376323);
com.wiris.util.ui.component.Dropdown.CLASS_DROPDOWN = "dropdown";
com.wiris.util.ui.component.Dropdown.CLASS_DROPDOWN_DIALOG = "dropdownDialog";
com.wiris.util.ui.component.Dropdown.CLASS_DROPDOWN_TICKABLE = "dropdownTickable";
com.wiris.util.ui.component.Dropdown.CLASS_DROPDOWN_OUTLINED = "dropdownOutlined";
com.wiris.util.ui.component.Dropdown.CLASS_DROPDOWN_BUTTON_TICKED = "dropdownTicked";
com.wiris.util.ui.component.DropdownTextField.CLASS_DROPDOWN_TEXT_FIELD = "dropdownTextField";
com.wiris.util.ui.component.DropdownTextField.CLASS_DROPDOWN_TEXT_FIELD_PRESSED = "dropdownTextFieldPressed";
com.wiris.util.ui.component.DropdownTextField.CLASS_DROPDOWN_TEXT_FIELD_DIALOG = "dropdownTextFieldDialog";
com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL = "expansionPanel";
com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL_SUMMARY = "expansionPanelSummary";
com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL_PRIMARY_LABEL = "expansionPanelPrimaryLabel";
com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL_SECONDARY_LABEL = "expansionPanelSecondaryLabel";
com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL_CONTENT = "expansionPanelContent";
com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL_COLLAPSED = "expansionPanelCollapsed";
com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL_EXPANDED = "expansionPanelExpanded";
com.wiris.util.ui.component.ExpansionPanel.CLASS_EXPANSION_PANEL_HOVER_ICON = "expansionPanelHoverIcon";
com.wiris.util.ui.component.ExpansionCheckbox.ACTION_CHECKBOX = "treeSelectorActionCheckbox";
com.wiris.util.ui.component.ExpansionCheckbox.CHECKBOX_ID = "checkboxId";
com.wiris.util.ui.component.ExpansionCheckbox.CLASS_UNDETERMINED = "undetermined";
com.wiris.util.ui.component.ExpansionCheckbox.CLASS_CHECKBOX_EXPANSION_PANEL = "checkboxExpansionPanel";
com.wiris.util.ui.component.ExpansionCheckbox.CLASS_CHECKBOX_EXPANSION_PANEL_SUMMARY = "checkboxExpansionPanelSummary";
com.wiris.util.ui.component.ExpansionCheckbox.CLASS_EXPANSION_CHECKBOX_WRAPPER = "checkboxExpansionPanelWrapper";
com.wiris.util.ui.component.ExpansionCheckbox.CLASS_EXPANSION_PANEL_COLLAPSED = "expansionPanelCollapsed";
com.wiris.util.ui.component.ExpansionCheckbox.CLASS_EXPANSION_PANEL_EXPANDED = "expansionPanelExpanded";
com.wiris.util.ui.component.ExpansionCheckbox.ICON_EXPAND_MORE = "expand_more";
com.wiris.util.ui.component.ExpansionCheckbox.ICON_EXPAND_LESS = "chevron_right";
com.wiris.util.ui.component.FilterChip.CLASS_FILTER_CHIP = "filterChip";
com.wiris.util.ui.component.FloatingPanel.CLASS_FLOATING_PANEL = "floatingPanel";
com.wiris.util.ui.component.FloatingPanel.ANCHOR_VERTICAL_TOP = "anchorVerticalTop";
com.wiris.util.ui.component.FloatingPanel.ANCHOR_VERTICAL_CENTER = "anchorVerticalCenter";
com.wiris.util.ui.component.FloatingPanel.ANCHOR_VERTICAL_BOTTOM = "anchorVerticalBottom";
com.wiris.util.ui.component.FloatingPanel.ANCHOR_HORIZONTAL_LEFT = "anchorHorizontalLeft";
com.wiris.util.ui.component.FloatingPanel.ANCHOR_HORIZONTAL_CENTER = "anchorHorizontalCenter";
com.wiris.util.ui.component.FloatingPanel.ANCHOR_HORIZONTAL_RIGHT = "anchorHorizontalRight";
com.wiris.util.ui.component.FloatingPanel.defaultAnchor = [com.wiris.util.ui.component.FloatingPanel.ANCHOR_VERTICAL_TOP,com.wiris.util.ui.component.FloatingPanel.ANCHOR_HORIZONTAL_LEFT];
com.wiris.util.ui.component.Form.CLASS_FORM = "form";
com.wiris.util.ui.component.FormulaViewer.CLASS_FORMULA_VIEWER = "formulaViewer";
com.wiris.util.ui.component.HyperlinkLabel.CLASS_HYPERLINK_LABEL = "hyperlinkLabel";
com.wiris.util.ui.component.HyperlinkLabel.CLASS_HYPERLINK_LABEL_EXTERNAL = "hyperlinkLabelExternal";
com.wiris.util.ui.component.IconBox.CLASS_ICON_BOX = "iconBox";
com.wiris.util.ui.component.ImageContainer.CLASS_IMAGE_CONTAINER = "imageContainer";
com.wiris.util.ui.component.TabbedPanel.CLASS_TABBED_PANEL = "tabbedPanel";
com.wiris.util.ui.component.TabbedPanel.CLASS_TABBED_PANEL_TAB = "tabbedPanelTab";
com.wiris.util.ui.component.TabbedPanel.CLASS_TABBED_PANEL_SELECTED = "tabbedPanelSelected";
com.wiris.util.ui.component.TabbedPanel.CLASS_TABBED_PANEL_BEFORE_SELECTED = "tabbedPanelBeforeSelected";
com.wiris.util.ui.component.TabbedPanel.CLASS_TABBED_PANEL_AFTER_SELECTED = "tabbedPanelAfterSelected";
com.wiris.util.ui.component.NavigationBar.CLASS_NAVIGATION_BAR = "tabbedPanelNavigation";
com.wiris.util.ui.component.NavigationBar.CLASS_NAVIGATION_BAR_AT_LEFT = "tabbedPanelAtLeft";
com.wiris.util.ui.component.NavigationBar.CLASS_NAVIGATION_BAR_AT_RIGHT = "tabbedPanelAtRight";
com.wiris.util.ui.component.NumberDropdownTextField.CLASS_NUMBER_DROPDOWN_TEXT_FIELD = "numberDropdownTextField";
com.wiris.util.ui.component.NumberTextField.CLASS_NUMBER_TEXT_FIELD = "numberTextField";
com.wiris.util.ui.component.OpenFileDialog.CLASS_OPEN_FILE_DIALOG = "openFileDialog";
com.wiris.util.ui.component.OpenIdSignInPanel.CLASS_SIGN_IN_PANEL = "signInPanel";
com.wiris.util.ui.component.PasswordTextField.CLASS_PASSWORD_TEXT_FIELD = "passwordTextField";
com.wiris.util.ui.component.PlotterPanel.CLASS_PLOTTER_PANEL = "plotterPanel";
com.wiris.util.ui.component.PlotterPanel.THRESHOLD_DRAG = 8;
com.wiris.util.ui.component.ProgressBar.CLASS_PROGRESS_BAR = "progressBar";
com.wiris.util.ui.component.ProgressBar.CLASS_PROGRESS_BAR_INDETERMINATE = "progressBarIndeterminate";
com.wiris.util.ui.component.ProgressCircle.CLASS_PROGRESS_CIRCLE = "progressCircle";
com.wiris.util.ui.component.ProgressCircle.CLASS_PROGRESS_CIRCLE_INDETERMINATE = "progressCircleIndeterminate";
com.wiris.util.ui.component.RadioButton.CLASS_RADIO_BUTTON = "radioButton";
com.wiris.util.ui.component.RadioButton.CLASS_RADIO_BUTTON_TEXT = "radioButtonText";
com.wiris.util.ui.component.RadioButton.CLASS_RADIO_BUTTON_HELPER_TEXT = "radioButtonHelperText";
com.wiris.util.ui.component.RadioButton.CLASS_RADIO_BUTTON_INLINE = "radioButtonInline";
com.wiris.util.ui.component.ResponsiveToolbar.RESPONSIVE_SECTION_FIRST = 0;
com.wiris.util.ui.component.ResponsiveToolbar.RESPONSIVE_SECTION_LAST = 1;
com.wiris.util.ui.component.ResponsiveToolbar.TOOLTIP_RESPONSIVE_TOOLBAR_CONTEXT_PANEL = "More options";
com.wiris.util.ui.component.ResponsiveToolbar.CLASS_RESPONSIVE_TOOLBAR = "responsiveToolbar";
com.wiris.util.ui.component.ResponsiveToolbar.CLASS_RESPONSIVE_TOOLBAR_BLOCK = "responsiveToolbarBlock";
com.wiris.util.ui.component.ResponsiveToolbar.CLASS_RESPONSIVE_TOOLBAR_SECTION = "responsiveToolbarSection";
com.wiris.util.ui.component.ResponsiveToolbar.CLASS_RESPONSIVE_TOOLBAR_CONTEXT_PANEL = "responsiveToolbarContextPanel";
com.wiris.util.ui.component.ResponsiveToolbar.CLASS_RESPONSIVE_TOOLBAR_HORIZONTAL_CONTEXT_PANEL = "responsiveToolbarHorizontalContextPanel";
com.wiris.util.ui.component.ResponsiveToolbar.CLASS_RESPONSIVE_TOOLBAR_VERTICAL_CONTEXT_PANEL = "responsiveToolbarVerticalContextPanel";
com.wiris.util.ui.component.ResponsiveToolbar.CLASS_RESPONSIVE_TOOLBAR_CONTEXT_PANEL_WIDE = "responsiveToolbarContextPanelWide";
com.wiris.util.ui.component.SignInButton.CLASS_SIGNIN_BUTTON = "signInButton";
com.wiris.util.ui.component.Slider.CLASS_SLIDER = "slider";
com.wiris.util.ui.component.Slider.DEFAULT_STEPS = 100;
com.wiris.util.ui.component.Switch.CLASS_SWITCH = "switch";
com.wiris.util.ui.component.TextArea.CLASS_TEXT_AREA = "textArea";
com.wiris.util.ui.component.ToggleButton.CLASS_TOGGLE_BUTTON = "toggleButton";
com.wiris.util.ui.component.ToggleButtonsPanel.CLASS_TOGGLE_BUTTONS_PANEL = "toggleButtonsPanel";
com.wiris.util.ui.component.ToggleDropdown.CLASS_TOGGLE_DROPDOWN = "toggleDropdown";
com.wiris.util.ui.component.ToggleDropdown.CLASS_TOGGLE_DROPDOWN_DIALOG = "toggleDropdownDialog";
com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_UNSELECTED = 0;
com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_UNDETERMINED = 1;
com.wiris.util.ui.controller.ExpansionCheckboxController.STATE_SELECTED = 2;
com.wiris.util.ui.controller.SelectionController.CLASS_SELECTED = "selected";
com.wiris.util.ui.controller.ToolbarDefinition.PARSING_ERROR = "Error parsing graph config resources.";
com.wiris.util.ui.controller.ToolbarDefinition.DATA_ID = "id";
com.wiris.util.ui.controller.ToolbarDefinition.DATA_TITLE = "title";
com.wiris.util.ui.controller.ToolbarDefinition.DATA_ITEMS = "items";
com.wiris.util.ui.controller.ToolbarDefinition.DATA_ICON = "icon";
com.wiris.util.ui.controller.ToolbarDefinition.DATA_VALUE = "value";
com.wiris.util.ui.controller.ToolbarDefinition.DATA_ICON_NAME = "name";
com.wiris.util.ui.controller.ToolbarDefinition.DATA_ICON_TYPE = "type";
com.wiris.util.ui.controller.ToolbarDefinition.DATA_TITLE_HTML = "titleHtml";
com.wiris.util.ui.interaction.EventType.ACTION_EVENT = "action";
com.wiris.util.ui.interaction.EventType.CHANGE_EVENT = "change";
com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT = "component";
com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT = "componentTree";
com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT = "dragAndDrop";
com.wiris.util.ui.interaction.EventType.FOCUS_EVENT = "focus";
com.wiris.util.ui.interaction.EventType.KEY_EVENT = "key";
com.wiris.util.ui.interaction.EventType.MOUSE_EVENT = "mouse";
com.wiris.util.ui.interaction.EventType.MOUSE_MOTION_EVENT = "mouseMotion";
com.wiris.util.ui.interaction.EventType.TOUCH_EVENT = "touch";
com.wiris.util.ui.interaction.EventType.ACTION_EVENT_ACTION_PERFORMED = "actionPerformed";
com.wiris.util.ui.interaction.EventType.CHANGE_EVENT_STATE_CHANGED = "stateChanged";
com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT_VISIBILITY_CHANGED = "visibilityChanged";
com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT_ENABLED_CHANGED = "enabledChanged";
com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT_DRAGGABLE_CHANGED = "draggableChanged";
com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT_FOCUS_REQUESTED = "focusRequested";
com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT_BLUR_REQUESTED = "blurRequested";
com.wiris.util.ui.interaction.EventType.COMPONENT_EVENT_STYLE_CHANGED = "styleChanged";
com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT_CHILD_REMOVED = "childRemoved";
com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT_CHILD_MOVED = "childMoved";
com.wiris.util.ui.interaction.EventType.COMPONENT_TREE_EVENT_CHILD_ADDED = "childAdded";
com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT_DRAG = "dragDrag";
com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT_START = "dragStart";
com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT_OVER = "dragOver";
com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT_ENTER = "dragEnter";
com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT_DROP = "dragDrop";
com.wiris.util.ui.interaction.EventType.DRAG_AND_DROP_EVENT_END = "dragEnd";
com.wiris.util.ui.interaction.EventType.FOCUS_EVENT_FOCUS_GAINED = "focusGained";
com.wiris.util.ui.interaction.EventType.FOCUS_EVENT_FOCUS_LOST = "focusLosed";
com.wiris.util.ui.interaction.EventType.KEY_EVENT_KEY_PRESS = "keyPress";
com.wiris.util.ui.interaction.EventType.KEY_EVENT_KEY_RELEASE = "keyRelease";
com.wiris.util.ui.interaction.EventType.KEY_EVENT_KEY_TYPE = "keyType";
com.wiris.util.ui.interaction.EventType.MOUSE_EVENT_CLICK = "click";
com.wiris.util.ui.interaction.EventType.MOUSE_EVENT_DOUBLE_CLICK = "doubleClick";
com.wiris.util.ui.interaction.EventType.MOUSE_EVENT_PRESS = "press";
com.wiris.util.ui.interaction.EventType.MOUSE_EVENT_RELEASE = "release";
com.wiris.util.ui.interaction.EventType.MOUSE_EVENT_ENTER = "enter";
com.wiris.util.ui.interaction.EventType.MOUSE_EVENT_EXIT = "exit";
com.wiris.util.ui.interaction.EventType.MOUSE_MOTION_EVENT_MOVE = "move";
com.wiris.util.ui.interaction.EventType.TOUCH_EVENT_PRESS = "press";
com.wiris.util.ui.interaction.EventType.TOUCH_EVENT_RELEASE = "release";
com.wiris.util.ui.interaction.EventType.TOUCH_EVENT_MOVE = "move";
com.wiris.util.ui.interaction.KeyCode.ENTER = 10;
com.wiris.util.ui.interaction.KeyCode.BACK_SPACE = 8;
com.wiris.util.ui.interaction.KeyCode.TAB = 9;
com.wiris.util.ui.interaction.KeyCode.CANCEL = 3;
com.wiris.util.ui.interaction.KeyCode.CLEAR = 12;
com.wiris.util.ui.interaction.KeyCode.SHIFT = 16;
com.wiris.util.ui.interaction.KeyCode.CONTROL = 17;
com.wiris.util.ui.interaction.KeyCode.ALT = 18;
com.wiris.util.ui.interaction.KeyCode.PAUSE = 19;
com.wiris.util.ui.interaction.KeyCode.CAPS_LOCK = 20;
com.wiris.util.ui.interaction.KeyCode.ESCAPE = 27;
com.wiris.util.ui.interaction.KeyCode.SPACE = 32;
com.wiris.util.ui.interaction.KeyCode.PAGE_UP = 33;
com.wiris.util.ui.interaction.KeyCode.PAGE_DOWN = 34;
com.wiris.util.ui.interaction.KeyCode.END = 35;
com.wiris.util.ui.interaction.KeyCode.HOME = 36;
com.wiris.util.ui.interaction.KeyCode.LEFT = 37;
com.wiris.util.ui.interaction.KeyCode.UP = 38;
com.wiris.util.ui.interaction.KeyCode.RIGHT = 39;
com.wiris.util.ui.interaction.KeyCode.DOWN = 40;
com.wiris.util.ui.interaction.KeyCode.DELETE = 127;
com.wiris.util.ui.interaction.KeyCode.A = 65;
com.wiris.util.ui.interaction.KeyCode.B = 66;
com.wiris.util.ui.interaction.KeyCode.C = 67;
com.wiris.util.ui.interaction.KeyCode.D = 68;
com.wiris.util.ui.interaction.KeyCode.E = 69;
com.wiris.util.ui.interaction.KeyCode.F = 70;
com.wiris.util.ui.interaction.KeyCode.G = 71;
com.wiris.util.ui.interaction.KeyCode.H = 72;
com.wiris.util.ui.interaction.KeyCode.I = 73;
com.wiris.util.ui.interaction.KeyCode.J = 74;
com.wiris.util.ui.interaction.KeyCode.K = 75;
com.wiris.util.ui.interaction.KeyCode.L = 76;
com.wiris.util.ui.interaction.KeyCode.M = 77;
com.wiris.util.ui.interaction.KeyCode.N = 78;
com.wiris.util.ui.interaction.KeyCode.O = 79;
com.wiris.util.ui.interaction.KeyCode.P = 80;
com.wiris.util.ui.interaction.KeyCode.Q = 81;
com.wiris.util.ui.interaction.KeyCode.R = 82;
com.wiris.util.ui.interaction.KeyCode.S = 83;
com.wiris.util.ui.interaction.KeyCode.T = 84;
com.wiris.util.ui.interaction.KeyCode.U = 85;
com.wiris.util.ui.interaction.KeyCode.V = 86;
com.wiris.util.ui.interaction.KeyCode.W = 87;
com.wiris.util.ui.interaction.KeyCode.X = 88;
com.wiris.util.ui.interaction.KeyCode.Y = 89;
com.wiris.util.ui.interaction.KeyCode.Z = 90;
com.wiris.util.ui.interaction.KeyCode.DIVIDE = 111;
com.wiris.util.ui.interaction.KeyCode.MULTIPLY = 106;
com.wiris.util.ui.interaction.MouseButtonCode.NO_BUTTON = 0;
com.wiris.util.ui.interaction.MouseButtonCode.LEFT_BUTTON = 1;
com.wiris.util.ui.interaction.MouseButtonCode.MIDDLE_BUTTON = 2;
com.wiris.util.ui.interaction.MouseButtonCode.RIGHT_BUTTON = 3;
com.wiris.util.xml.MathMLUtils.contentTagsString = "ci@cn@apply@integers@reals@rationals@naturalnumbers@complexes@primes@exponentiale@imaginaryi@notanumber@true@false@emptyset@pi@eulergamma@infinity";
com.wiris.util.xml.MathMLUtils.presentationTagsString = "mrow@mn@mi@mo@mfrac@mfenced@mroot@maction@mphantom@msqrt@mstyle@msub@msup@msubsup@munder@mover@munderover@menclose@mspace@mtext@ms";
com.wiris.util.xml.MathMLUtils.MROWS = "@math@mrow@msqrt@mstyle@merror@mpadded@mphantom@mtd@menclose@mscarry@msrow@";
com.wiris.util.xml.MathMLUtils.strokesAnnotationEncondings = [com.wiris.util.net.MimeTypes.JSON,com.wiris.util.net.MimeTypes.HAND_STROKES];
com.wiris.util.xml.WCharacterBase.NEGATIVE_THIN_SPACE = 57344;
com.wiris.util.xml.WCharacterBase.LINE = 57345;
com.wiris.util.xml.WCharacterBase.SEGMENT = 57346;
com.wiris.util.xml.WCharacterBase.ALIGNMENT_MARK = 57358;
com.wiris.util.xml.WCharacterBase.ROOT = 61696;
com.wiris.util.xml.WCharacterBase.ROOT_VERTICAL = 61727;
com.wiris.util.xml.WCharacterBase.ROOT_NO_TAIL = 61728;
com.wiris.util.xml.WCharacterBase.ROOT_NO_TAIL_VERTICAL = 61759;
com.wiris.util.xml.WCharacterBase.ROOT_LEFT_TAIL = 61760;
com.wiris.util.xml.WCharacterBase.ROOT_VERTICAL_LINE = 61761;
com.wiris.util.xml.WCharacterBase.HORIZONTAL_TAB = 9;
com.wiris.util.xml.WCharacterBase.LINE_FEED = 10;
com.wiris.util.xml.WCharacterBase.CARRIAGE_RETURN = 13;
com.wiris.util.xml.WCharacterBase.SPACE = 32;
com.wiris.util.xml.WCharacterBase.NUMBER_SIGN = 35;
com.wiris.util.xml.WCharacterBase.ROUND_BRACKET_LEFT = 40;
com.wiris.util.xml.WCharacterBase.ROUND_BRACKET_RIGHT = 41;
com.wiris.util.xml.WCharacterBase.COMMA = 44;
com.wiris.util.xml.WCharacterBase.FULL_STOP = 46;
com.wiris.util.xml.WCharacterBase.SQUARE_BRACKET_LEFT = 91;
com.wiris.util.xml.WCharacterBase.BACKSLASH = 92;
com.wiris.util.xml.WCharacterBase.SQUARE_BRACKET_RIGHT = 93;
com.wiris.util.xml.WCharacterBase.CIRCUMFLEX_ACCENT = 94;
com.wiris.util.xml.WCharacterBase.LOW_LINE = 95;
com.wiris.util.xml.WCharacterBase.CURLY_BRACKET_LEFT = 123;
com.wiris.util.xml.WCharacterBase.VERTICAL_BAR = 124;
com.wiris.util.xml.WCharacterBase.CURLY_BRACKET_RIGHT = 125;
com.wiris.util.xml.WCharacterBase.TILDE = 126;
com.wiris.util.xml.WCharacterBase.MACRON = 175;
com.wiris.util.xml.WCharacterBase.COMBINING_LOW_LINE = 818;
com.wiris.util.xml.WCharacterBase.MODIFIER_LETTER_CIRCUMFLEX_ACCENT = 710;
com.wiris.util.xml.WCharacterBase.CARON = 711;
com.wiris.util.xml.WCharacterBase.NO_BREAK_SPACE = 160;
com.wiris.util.xml.WCharacterBase.EN_QUAD = 8192;
com.wiris.util.xml.WCharacterBase.EM_QUAD = 8193;
com.wiris.util.xml.WCharacterBase.EN_SPACE = 8194;
com.wiris.util.xml.WCharacterBase.EM_SPACE = 8195;
com.wiris.util.xml.WCharacterBase.THICK_SPACE = 8196;
com.wiris.util.xml.WCharacterBase.MID_SPACE = 8197;
com.wiris.util.xml.WCharacterBase.SIX_PER_EM_SPACE = 8198;
com.wiris.util.xml.WCharacterBase.FIGIRE_SPACE = 8199;
com.wiris.util.xml.WCharacterBase.PUNCTUATION_SPACE = 8200;
com.wiris.util.xml.WCharacterBase.THIN_SPACE = 8201;
com.wiris.util.xml.WCharacterBase.HAIR_SPACE = 8202;
com.wiris.util.xml.WCharacterBase.ZERO_WIDTH_SPACE = 8203;
com.wiris.util.xml.WCharacterBase.ZERO_WIDTH_NON_JOINER = 8204;
com.wiris.util.xml.WCharacterBase.ZERO_WIDTH_JOINER = 8205;
com.wiris.util.xml.WCharacterBase.DOUBLE_VERTICAL_BAR = 8214;
com.wiris.util.xml.WCharacterBase.DOUBLE_HORIZONTAL_BAR = 9552;
com.wiris.util.xml.WCharacterBase.NARROW_NO_BREAK_SPACE = 8239;
com.wiris.util.xml.WCharacterBase.MEDIUM_MATHEMATICAL_SPACE = 8287;
com.wiris.util.xml.WCharacterBase.WORD_JOINER = 8288;
com.wiris.util.xml.WCharacterBase.PLANCKOVER2PI = 8463;
com.wiris.util.xml.WCharacterBase.LEFTWARDS_ARROW = 8592;
com.wiris.util.xml.WCharacterBase.UPWARDS_ARROW = 8593;
com.wiris.util.xml.WCharacterBase.RIGHTWARDS_ARROW = 8594;
com.wiris.util.xml.WCharacterBase.DOWNWARDS_ARROW = 8595;
com.wiris.util.xml.WCharacterBase.LEFTRIGHT_ARROW = 8596;
com.wiris.util.xml.WCharacterBase.UP_DOWN_ARROW = 8597;
com.wiris.util.xml.WCharacterBase.LEFTWARDS_ARROW_FROM_BAR = 8612;
com.wiris.util.xml.WCharacterBase.RIGHTWARDS_ARROW_FROM_BAR = 8614;
com.wiris.util.xml.WCharacterBase.LEFTWARDS_ARROW_WITH_HOOK = 8617;
com.wiris.util.xml.WCharacterBase.RIGHTWARDS_ARROW_WITH_HOOK = 8618;
com.wiris.util.xml.WCharacterBase.LEFTWARDS_HARPOON_WITH_BARB_UPWARDS = 8636;
com.wiris.util.xml.WCharacterBase.RIGHTWARDS_HARPOON_WITH_BARB_UPWARDS = 8640;
com.wiris.util.xml.WCharacterBase.LEFTWARDS_DOUBLE_ARROW = 8656;
com.wiris.util.xml.WCharacterBase.RIGHTWARDS_DOUBLE_ARROW = 8658;
com.wiris.util.xml.WCharacterBase.LEFT_RIGHT_DOUBLE_ARROW = 8660;
com.wiris.util.xml.WCharacterBase.LEFTWARDS_ARROW_OVER_RIGHTWARDS_ARROW = 8646;
com.wiris.util.xml.WCharacterBase.RIGHTWARDS_ARROW_OVER_LEFTWARDS_ARROW = 8644;
com.wiris.util.xml.WCharacterBase.LEFTWARDS_HARPOON_OVER_RIGHTWARDS_HARPOON = 8651;
com.wiris.util.xml.WCharacterBase.RIGHTWARDS_HARPOON_OVER_LEFTWARDS_HARPOON = 8652;
com.wiris.util.xml.WCharacterBase.RIGHTWARDS_ARROW_ABOVE_SHORT_LEFTWARDS_ARROW = 10562;
com.wiris.util.xml.WCharacterBase.SHORT_RIGHTWARDS_ARROW_ABOVE_LEFTWARDS_ARROW = 10564;
com.wiris.util.xml.WCharacterBase.LONG_RIGHTWARDS_ARROW = 10230;
com.wiris.util.xml.WCharacterBase.LONG_LEFTWARDS_ARROW = 10229;
com.wiris.util.xml.WCharacterBase.LONG_LEFT_RIGHT_ARROW = 10231;
com.wiris.util.xml.WCharacterBase.LONG_LEFTWARDS_DOUBLE_ARROW = 10232;
com.wiris.util.xml.WCharacterBase.LONG_RIGHTWARDS_DOUBLE_ARROW = 10233;
com.wiris.util.xml.WCharacterBase.LONG_LEFT_RIGHT_DOUBLE_ARROW = 10234;
com.wiris.util.xml.WCharacterBase.INTEGRAL = 8747;
com.wiris.util.xml.WCharacterBase.TOP_HALF_INTEGRAL = 8992;
com.wiris.util.xml.WCharacterBase.BOTTOM_HALF_INTEGRAL = 8993;
com.wiris.util.xml.WCharacterBase.INTEGRAL_EXTENSION = 9134;
com.wiris.util.xml.WCharacterBase.VERTICAL_LINE_EXTENSION = 9168;
com.wiris.util.xml.WCharacterBase.TILDE_OPERATOR = 8764;
com.wiris.util.xml.WCharacterBase.LEFT_CEILING = 8968;
com.wiris.util.xml.WCharacterBase.RIGHT_CEILING = 8969;
com.wiris.util.xml.WCharacterBase.LEFT_FLOOR = 8970;
com.wiris.util.xml.WCharacterBase.RIGHT_FLOOR = 8971;
com.wiris.util.xml.WCharacterBase.TOP_PARENTHESIS = 9180;
com.wiris.util.xml.WCharacterBase.BOTTOM_PARENTHESIS = 9181;
com.wiris.util.xml.WCharacterBase.TOP_SQUARE_BRACKET = 9140;
com.wiris.util.xml.WCharacterBase.BOTTOM_SQUARE_BRACKET = 9141;
com.wiris.util.xml.WCharacterBase.TOP_CURLY_BRACKET = 9182;
com.wiris.util.xml.WCharacterBase.BOTTOM_CURLY_BRACKET = 9183;
com.wiris.util.xml.WCharacterBase.MATHEMATICAL_LEFT_ANGLE_BRACKET = 10216;
com.wiris.util.xml.WCharacterBase.MATHEMATICAL_RIGHT_ANGLE_BRACKET = 10217;
com.wiris.util.xml.WCharacterBase.DOUBLE_STRUCK_ITALIC_CAPITAL_D = 8517;
com.wiris.util.xml.WCharacterBase.DOUBLE_STRUCK_ITALIC_SMALL_D = 8518;
com.wiris.util.xml.WCharacterBase.DOUBLE_STRUCK_ITALIC_SMALL_E = 8519;
com.wiris.util.xml.WCharacterBase.DOUBLE_STRUCK_ITALIC_SMALL_I = 8520;
com.wiris.util.xml.WCharacterBase.EPSILON = 949;
com.wiris.util.xml.WCharacterBase.VAREPSILON = 1013;
com.wiris.util.xml.WCharacterBase.DIGIT_ZERO = 48;
com.wiris.util.xml.WCharacterBase.DIGIT_NINE = 57;
com.wiris.util.xml.WCharacterBase.LATIN_CAPITAL_LETTER_A = 65;
com.wiris.util.xml.WCharacterBase.LATIN_CAPITAL_LETTER_Z = 90;
com.wiris.util.xml.WCharacterBase.LATIN_SMALL_LETTER_A = 97;
com.wiris.util.xml.WCharacterBase.LATIN_SMALL_LETTER_Z = 122;
com.wiris.util.xml.WCharacterBase.MATHEMATICAL_SCRIPT_CAPITAL_A = 119964;
com.wiris.util.xml.WCharacterBase.MATHEMATICAL_SCRIPT_SMALL_A = 119990;
com.wiris.util.xml.WCharacterBase.MATHEMATICAL_FRAKTUR_CAPITAL_A = 120068;
com.wiris.util.xml.WCharacterBase.MATHEMATICAL_FRAKTUR_SMALL_A = 120094;
com.wiris.util.xml.WCharacterBase.MATHEMATICAL_DOUBLE_STRUCK_CAPITAL_A = 120120;
com.wiris.util.xml.WCharacterBase.MATHEMATICAL_DOUBLE_STRUCK_SMALL_A = 120146;
com.wiris.util.xml.WCharacterBase.MATHEMATICAL_DOUBLE_STRUCK_DIGIT_ZERO = 120792;
com.wiris.util.xml.WCharacterBase.MATHEMATICAL_MONOSPACE_CAPITAL_A = 120432;
com.wiris.util.xml.WCharacterBase.MATHEMATICAL_MONOSPACE_CAPITAL_Z = 120457;
com.wiris.util.xml.WCharacterBase.MATHEMATICAL_MONOSPACE_SMALL_A = 120458;
com.wiris.util.xml.WCharacterBase.MATHEMATICAL_MONOSPACE_SMALL_Z = 120483;
com.wiris.util.xml.WCharacterBase.MATHEMATICAL_MONOSPACE_DIGIT_ZERO = 120822;
com.wiris.util.xml.WCharacterBase.MATHEMATICAL_MONOSPACE_DIGIT_NINE = 120831;
com.wiris.util.xml.WCharacterBase.MIDDLE_DOT = 183;
com.wiris.util.xml.WCharacterBase.DOT_ABOVE = 729;
com.wiris.util.xml.WCharacterBase.ARABIC_DECIMAL_SEPARATOR = 1643;
com.wiris.util.xml.WCharacterBase.ARABIC_THOUSANDS_SEPARATOR = 1644;
com.wiris.util.xml.WCharacterBase.ALIGNMENT_RELATION_OPERATORS = [61,8801,8764,8776,8771,8773,8800,8802,8769,62,60,8805,8804,10878,10877,10887,10888,8810,8811,8733,8826,8827,8882,8883];
com.wiris.util.xml.WCharacterBase.binaryOps = [43,45,47,177,183,215,247,8226,8722,8723,8724,8726,8727,8728,8743,8744,8745,8746,8760,8768,8846,8851,8852,8853,8854,8855,8856,8857,8858,8859,8861,8862,8863,8864,8865,8890,8891,8900,8901,8902,8903,8905,8906,8907,8908,8910,8911,8914,8915,8966,9021,9675,10678,10789,10794,10797,10798,10799,10804,10805,10812,10815,10835,10836,10837,10838,10846,10847,10851];
com.wiris.util.xml.WCharacterBase.relations = [60,61,62,8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8608,8610,8611,8614,8617,8618,8619,8620,8621,8622,8624,8625,8627,8630,8631,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8666,8667,8669,8693,8712,8713,8715,8716,8733,8739,8740,8741,8742,8764,8765,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8781,8782,8783,8784,8785,8786,8787,8788,8789,8790,8791,8793,8794,8795,8796,8799,8800,8801,8802,8804,8805,8806,8807,8808,8809,8810,8811,8812,8814,8815,8816,8817,8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8847,8848,8849,8850,8866,8867,8869,8871,8872,8873,8874,8875,8876,8877,8878,8879,8882,8883,8884,8885,8886,8887,8888,8904,8909,8912,8913,8918,8919,8920,8921,8922,8923,8926,8927,8930,8931,8934,8935,8936,8937,8938,8939,8940,8941,8994,8995,9123,10229,10230,10231,10232,10233,10234,10236,10239,10501,10514,10515,10531,10532,10533,10534,10535,10536,10537,10538,10547,10550,10551,10560,10561,10562,10564,10567,10574,10575,10576,10577,10578,10579,10580,10581,10582,10583,10584,10585,10586,10587,10588,10589,10590,10591,10592,10593,10606,10607,10608,10620,10621,10869,10877,10878,10885,10886,10887,10888,10889,10890,10891,10892,10901,10902,10909,10910,10913,10914,10927,10928,10933,10934,10935,10936,10937,10938,10949,10950,10955,10956,10987,11005];
com.wiris.util.xml.WCharacterBase.largeOps = [8719,8720,8721,8896,8897,8898,8899,10756,10757,10758,10759,10760];
com.wiris.util.xml.WCharacterBase.veryLargeOps = [8747,8748,8749,8750,8751,8752,8753,8754,8755,10763,10764,10765,10766,10767,10768,10774,10775,10776,10777,10778,10779,10780];
com.wiris.util.xml.WCharacterBase.tallLetters = [98,100,102,104,105,106,107,108,116,946,948,950,952,955,958];
com.wiris.util.xml.WCharacterBase.longLetters = [103,106,112,113,121,946,947,950,951,956,958,961,962,966,967,968];
com.wiris.util.xml.WCharacterBase.negations = [61,8800,8801,8802,8764,8769,8712,8713,8715,8716,8834,8836,8835,8837,8838,8840,8839,8841,62,8815,60,8814,8805,8817,8804,8816,10878,8817,10877,8816,8776,8777,8771,8772,8773,8775,8849,8930,8850,8931,8707,8708,8741,8742];
com.wiris.util.xml.WCharacterBase.mirrorDictionary = [40,41,41,40,60,62,62,60,91,93,93,91,123,125,125,123,171,187,187,171,3898,3899,3899,3898,3900,3901,3901,3900,5787,5788,5788,5787,8249,8250,8250,8249,8261,8262,8262,8261,8317,8318,8318,8317,8333,8334,8334,8333,8712,8715,8713,8716,8714,8717,8715,8712,8716,8713,8717,8714,8725,10741,8764,8765,8765,8764,8771,8909,8786,8787,8787,8786,8788,8789,8789,8788,8804,8805,8805,8804,8806,8807,8807,8806,8808,8809,8809,8808,8810,8811,8811,8810,8814,8815,8815,8814,8816,8817,8817,8816,8818,8819,8819,8818,8820,8821,8821,8820,8822,8823,8823,8822,8824,8825,8825,8824,8826,8827,8827,8826,8828,8829,8829,8828,8830,8831,8831,8830,8832,8833,8833,8832,8834,8835,8835,8834,8836,8837,8837,8836,8838,8839,8839,8838,8840,8841,8841,8840,8842,8843,8843,8842,8847,8848,8848,8847,8849,8850,8850,8849,8856,10680,8866,8867,8867,8866,8870,10974,8872,10980,8873,10979,8875,10981,8880,8881,8881,8880,8882,8883,8883,8882,8884,8885,8885,8884,8886,8887,8887,8886,8905,8906,8906,8905,8907,8908,8908,8907,8909,8771,8912,8913,8913,8912,8918,8919,8919,8918,8920,8921,8921,8920,8922,8923,8923,8922,8924,8925,8925,8924,8926,8927,8927,8926,8928,8929,8929,8928,8930,8931,8931,8930,8932,8933,8933,8932,8934,8935,8935,8934,8936,8937,8937,8936,8938,8939,8939,8938,8940,8941,8941,8940,8944,8945,8945,8944,8946,8954,8947,8955,8948,8956,8950,8957,8951,8958,8954,8946,8955,8947,8956,8948,8957,8950,8958,8951,8968,8969,8969,8968,8970,8971,8971,8970,9001,9002,9002,9001,10088,10089,10089,10088,10090,10091,10091,10090,10092,10093,10093,10092,10094,10095,10095,10094,10096,10097,10097,10096,10098,10099,10099,10098,10100,10101,10101,10100,10179,10180,10180,10179,10181,10182,10182,10181,10184,10185,10185,10184,10187,10189,10189,10187,10197,10198,10198,10197,10205,10206,10206,10205,10210,10211,10211,10210,10212,10213,10213,10212,10214,10215,10215,10214,10216,10217,10217,10216,10218,10219,10219,10218,10220,10221,10221,10220,10222,10223,10223,10222,10627,10628,10628,10627,10629,10630,10630,10629,10631,10632,10632,10631,10633,10634,10634,10633,10635,10636,10636,10635,10637,10640,10638,10639,10639,10638,10640,10637,10641,10642,10642,10641,10643,10644,10644,10643,10645,10646,10646,10645,10647,10648,10648,10647,10680,8856,10688,10689,10689,10688,10692,10693,10693,10692,10703,10704,10704,10703,10705,10706,10706,10705,10708,10709,10709,10708,10712,10713,10713,10712,10714,10715,10715,10714,10741,8725,10744,10745,10745,10744,10748,10749,10749,10748,10795,10796,10796,10795,10797,10798,10798,10797,10804,10805,10805,10804,10812,10813,10813,10812,10852,10853,10853,10852,10873,10874,10874,10873,10877,10878,10878,10877,10879,10880,10880,10879,10881,10882,10882,10881,10883,10884,10884,10883,10891,10892,10892,10891,10897,10898,10898,10897,10899,10900,10900,10899,10901,10902,10902,10901,10903,10904,10904,10903,10905,10906,10906,10905,10907,10908,10908,10907,10913,10914,10914,10913,10918,10919,10919,10918,10920,10921,10921,10920,10922,10923,10923,10922,10924,10925,10925,10924,10927,10928,10928,10927,10931,10932,10932,10931,10939,10940,10940,10939,10941,10942,10942,10941,10943,10944,10944,10943,10945,10946,10946,10945,10947,10948,10948,10947,10949,10950,10950,10949,10957,10958,10958,10957,10959,10960,10960,10959,10961,10962,10962,10961,10963,10964,10964,10963,10965,10966,10966,10965,10974,8870,10979,8873,10980,8872,10981,8875,10988,10989,10989,10988,10999,11000,11000,10999,11001,11002,11002,11001,11778,11779,11779,11778,11780,11781,11781,11780,11785,11786,11786,11785,11788,11789,11789,11788,11804,11805,11805,11804,11808,11809,11809,11808,11810,11811,11811,11810,11812,11813,11813,11812,11814,11815,11815,11814,11816,11817,11817,11816,12296,12297,12297,12296,12298,12299,12299,12298,12300,12301,12301,12300,12302,12303,12303,12302,12304,12305,12305,12304,12308,12309,12309,12308,12310,12311,12311,12310,12312,12313,12313,12312,12314,12315,12315,12314,65113,65114,65114,65113,65115,65116,65116,65115,65117,65118,65118,65117,65124,65125,65125,65124,65288,65289,65289,65288,65308,65310,65310,65308,65339,65341,65341,65339,65371,65373,65373,65371,65375,65376,65376,65375,65378,65379,65379,65378,9115,9118,9116,9119,9117,9120,9118,9115,9119,9116,9120,9117,9121,9124,9122,9125,9123,9126,9124,9121,9125,9122,9126,9123,9127,9131,9130,9134,9129,9133,9131,9127,9134,9130,9133,9129,9128,9132,9132,9128];
com.wiris.util.xml.WCharacterBase.subSuperScriptDictionary = [178,50,179,51,185,49,8304,48,8305,105,8308,52,8309,53,8310,54,8311,55,8312,56,8313,57,8314,43,8315,45,8316,61,8317,40,8318,41,8319,110,8320,48,8321,49,8322,50,8323,51,8324,52,8325,53,8326,54,8327,55,8328,56,8329,57,8330,43,8331,45,8332,61,8333,40,8334,41,8336,97,8337,101,8338,111,8339,120,8340,601,8341,104,8342,107,8343,108,8344,109,8345,110,8346,112,8347,115,8348,116];
com.wiris.util.xml.WCharacterBase.accentsDictionary = null;
com.wiris.util.xml.WCharacterBase.horizontalLTRStretchyChars = [com.wiris.util.xml.WCharacterBase.LEFTWARDS_ARROW,com.wiris.util.xml.WCharacterBase.RIGHTWARDS_ARROW,com.wiris.util.xml.WCharacterBase.LEFTRIGHT_ARROW,com.wiris.util.xml.WCharacterBase.LEFTWARDS_ARROW_FROM_BAR,com.wiris.util.xml.WCharacterBase.RIGHTWARDS_ARROW_FROM_BAR,com.wiris.util.xml.WCharacterBase.LEFTWARDS_ARROW_WITH_HOOK,com.wiris.util.xml.WCharacterBase.RIGHTWARDS_ARROW_WITH_HOOK,com.wiris.util.xml.WCharacterBase.LEFTWARDS_HARPOON_WITH_BARB_UPWARDS,com.wiris.util.xml.WCharacterBase.RIGHTWARDS_HARPOON_WITH_BARB_UPWARDS,com.wiris.util.xml.WCharacterBase.LEFTWARDS_DOUBLE_ARROW,com.wiris.util.xml.WCharacterBase.RIGHTWARDS_DOUBLE_ARROW,com.wiris.util.xml.WCharacterBase.TOP_CURLY_BRACKET,com.wiris.util.xml.WCharacterBase.BOTTOM_CURLY_BRACKET,com.wiris.util.xml.WCharacterBase.TOP_PARENTHESIS,com.wiris.util.xml.WCharacterBase.BOTTOM_PARENTHESIS,com.wiris.util.xml.WCharacterBase.TOP_SQUARE_BRACKET,com.wiris.util.xml.WCharacterBase.BOTTOM_SQUARE_BRACKET,com.wiris.util.xml.WCharacterBase.LEFTWARDS_ARROW_OVER_RIGHTWARDS_ARROW,com.wiris.util.xml.WCharacterBase.RIGHTWARDS_ARROW_OVER_LEFTWARDS_ARROW,com.wiris.util.xml.WCharacterBase.LEFTWARDS_HARPOON_OVER_RIGHTWARDS_HARPOON,com.wiris.util.xml.WCharacterBase.RIGHTWARDS_HARPOON_OVER_LEFTWARDS_HARPOON,com.wiris.util.xml.WCharacterBase.SEGMENT];
com.wiris.util.xml.WCharacterBase.tallAccents = [com.wiris.util.xml.WCharacterBase.LEFTWARDS_ARROW_OVER_RIGHTWARDS_ARROW,com.wiris.util.xml.WCharacterBase.RIGHTWARDS_ARROW_OVER_LEFTWARDS_ARROW,com.wiris.util.xml.WCharacterBase.LEFTWARDS_HARPOON_OVER_RIGHTWARDS_HARPOON,com.wiris.util.xml.WCharacterBase.RIGHTWARDS_HARPOON_OVER_LEFTWARDS_HARPOON];
com.wiris.util.xml.WCharacterBase.PUNCTUATION_CATEGORY = "P";
com.wiris.util.xml.WCharacterBase.OTHER_CATEGORY = "C";
com.wiris.util.xml.WCharacterBase.LETTER_CATEGORY = "L";
com.wiris.util.xml.WCharacterBase.MARK_CATEGORY = "M";
com.wiris.util.xml.WCharacterBase.NUMBER_CATEGORY = "N";
com.wiris.util.xml.WCharacterBase.SYMBOL_CATEGORY = "S";
com.wiris.util.xml.WCharacterBase.PHONETICAL_CATEGORY = "F";
com.wiris.util.xml.WCharacterBase.UNICODES_WITH_CATEGORIES = "@P:21-23,25-2A,2C-2F,3A-3B,3F-40,5B-5D,5F,7B,7D,A1,A7,AB,B6-B7,BB,BF,37E,387,55A-55F,589-58A,5BE,5C0,5C3,5C6,5F3-5F4,609-60A,60C-60D,61B,61E-61F,66A-66D,6D4,E4F,E5A-E5B,2010-2022,2025-2026,2030-203E,2040,2043,2047,204E-2051,2057,205E,2308-230B,2329-232A,2772-2773,27C5-27C6,27E6-27EF,2983-2998,29D8-29DB,29FC-29FD,2E17,3030,FD3E-FD3F@C:AD,600-603,6DD,200B-200F,202A-202E,206A-206F@L:41-5A,61-7A,AA,B5,BA,C0-D6,D8-F6,F8-2C1,2C6-2D1,2E0-2E4,2EC,2EE,370-374,376-377,37A-37D,386,388-38A,38C,38E-3A1,3A3-3F5,3F7-481,48A-527,531-556,559,561-587,5D0-5EA,5F0-5F2,620-64A,66E-66F,671-6D3,6D5,6E5-6E6,6EE-6EF,6FA-6FC,6FF,750-77F,E01-E30,E32-E33,E40-E46,1D00-1DBF,1E00-1F15,1F18-1F1D,1F20-1F45,1F48-1F4D,1F50-1F57,1F59,1F5B,1F5D,1F5F-1F7D,1F80-1FB4,1FB6-1FBC,1FBE,1FC2-1FC4,1FC6-1FCC,1FD0-1FD3,1FD6-1FDB,1FE0-1FEC,1FF2-1FF4,1FF6-1FFC,207F,2090-2094,2102,2107,210A-2113,2115,2119-211D,2124,2126,2128,212B-212D,212F-2138,213C-213F,2145-2149,214E,2184,2C60-2C7F,306E,A717-A71F,A727,A788,A78B-A78C,A792,FB00-FB04,FB13-FB17,FB1D,FB1F-FB28,FB2A-FB36,FB38-FB3C,FB3E,FB40-FB41,FB43-FB44,FB46-FBB1,FBD3-FBE9,FBFC-FBFF,FC5E-FC63,FC6A,FC6D,FC70,FC73,FC91,FC94,FDF2,FE70-FE74,FE76-FEFC,1D400-1D454,1D456-1D49C,1D49E-1D49F,1D4A2,1D4A5-1D4A6,1D4A9-1D4AC,1D4AE-1D4B9,1D4BB,1D4BD-1D4C3,1D4C5-1D505,1D507-1D50A,1D50D-1D514,1D516-1D51C,1D51E-1D539,1D53B-1D53E,1D540-1D544,1D546,1D54A-1D550,1D552-1D6A5,1D6A8-1D6C0,1D6C2-1D6DA,1D6DC-1D6FA,1D6FC-1D714,1D716-1D734,1D736-1D74E,1D750-1D76E,1D770-1D788,1D78A-1D7A8,1D7AA-1D7C2,1D7C4-1D7C9@M:300-36F,483-489,591-5BD,5BF,5C1-5C2,5C4-5C5,5C7,610-61A,64B-65F,670,6D6-6DC,6DF-6E4,6E7-6E8,6EA-6ED,E31,E34-E3A,E47-E4E,1DC0-1DC1,1DC3,1DCA,1DFE-1DFF,20D0-20D2,20D6-20D7,20DB-20DF,20E1,20E4-20F0,FB1E,FE20-FE23@N:30-39,B2-B3,B9,BC-BE,660-669,6F0-6F9,E50-E59,2070,2074-2079,2080-2089,2153-215E,2460-2468,24EA,2780-2793,1D7CE-1D7FF@S:24,2B,3C-3E,5E,60,7C,7E,A2-A6,A8-A9,AC,AE-B1,B4,B8,D7,F7,2C2-2C5,2D2-2DF,2E5-2EB,2ED,2EF-2FF,375,384-385,3F6,482,58F,606-608,60B,60E-60F,6DE,6E9,6FD-6FE,E3F,1FBD,1FBF-1FC1,1FCD-1FCF,1FDD-1FDF,1FED-1FEF,1FFD-1FFE,2044,2052,20A0-20BA,2105,2116-2118,211E,2120,2122,2125,2127,2129,212E,2140-2144,214A-214B,214D,2190-21EA,21F4-2300,2302,2305-2306,230C-2313,2315-231A,231C-2323,232C-232E,2332,2336,233D,233F-2340,2353,2370,237C,2393-2394,23AF,23B4-23B6,23CE,23D0,23DC-23E7,2423,24B6-24E9,2500,2502,2506,2508,250A,250C,2510,2514,2518,251C,2524,252C,2534,253C,2550-256C,2571-2572,2580,2584,2588,258C,2590-2593,25A0-25FF,2605-2606,2609,260C,260E,2612,2621,2639-2644,2646-2649,2660-2667,2669-266B,266D-266F,267E,2680-2689,26A0,26A5,26AA-26AC,26B2,26E2,2702,2709,2713,2720,272A,2736,273D,279B,27C0-27C4,27C7-27C9,27CB-27CD,27D0-27E5,27F0-27FF,2900-2982,2999-29D7,29DC-29FB,29FE-2AFF,2B12-2B4C,2B50-2B54,3012,A720-A721,A789-A78A,FB29,FBB2-FBC1,FDFC,FFFC-FFFD,1D6C1,1D6DB,1D6FB,1D715,1D735,1D74F,1D76F,1D789,1D7A9,1D7C3@F:70,62,74,64,288,256,63,25F,6B,261,71,262,294,6D,271,6E,273,272,14B,274,72,280,27E,27D,278,3B2,66,76,3B8,F0,73,7A,283,292,282,290,E7,29D,78,263,3C7,281,127,295,68,266,26C,26E,28B,279,27B,6A,270,6C,26D,28E,29F,1A5,253,1AD,257,188,284,199,260,2A0,29B,28D,77,265,29C,2A1-2A2,267,298,1C0,1C3,1C2,1C1,27A,255,291,2C71,287,297,296,286,293,27C,2E2,1AB,26B,67,2A6,2A3,2A7,2A4,2A8,2A5,1DBF,1D4A,1D91,1BB,29E,2E3,19E,19B,3BB,17E,161,1F0,10D,69,65,25B,61,251,254,6F,75,79,F8,153,276,252,28C,264,26F,268,289,26A,28F,28A,259,275,250,E6,25C,25A,131,25E,29A,258,277,269,2BC,325,30A,32C,2B0,324,330,33C,32A,33A-33B,339,31C,31F-320,308,33D,318-319,2DE,2B7,2B2,2E0,2E4,303,207F,2E1,31A,334,31D,2D4,31E,2D5,329,32F,361,35C,322,2F9,2C,2BB,307,2D7,2D6,2B8,323,321,32B,2C8,2CC,2D0-2D1,306,2E,7C,2016,203F,2197-2198,30B,301,304,300,30F,A71B-A71C,2E5-2E9,30C,302,1DC4-1DC5,1DC8,311,2C7,2C6,316,2CE,317,2CF,2AD,2A9-2AB,274D,2A,56,46,57,43,4C,4A,152,398,1D191,1D18F,31-33,346,34D,34A-34C,348-349,5C,34E,2193,2191,2EC,1DB9,362,347,2B6,2ED,2F1-2F2,2F7,41-42,44-45,47-49,4B,4D-55,58-5B,5D,2F,28-29,7B,7D@";
com.wiris.util.xml.WCharacterBase.invisible = [8289,8290,8291];
com.wiris.util.xml.WCharacterBase.horizontalOperators = [175,818,8592,8594,8596,8612,8614,8617,8618,8636,8637,8640,8641,8644,8646,8651,8652,8656,8658,8660,8764,9140,9141,9180,9181,9182,9183,9552,10562,10564,10602,10605,57345,57346];
com.wiris.util.xml.WCharacterBase.latinLetters = "@0065@0066@0067@0068@0069@0070@0071@0072@0073@0074@0075@0076@0077@0078@0079@0080@0081@0082@0083@0084@0085@0086@0087@0088@0089@0090" + "@0097@0098@0099@0100@0101@0102@0103@0104@0105@0106@0107@0108@0109@0110@0111@0112@0113@0114@0115@0116@0117@0118@0119@0120@0121@0122@";
com.wiris.util.xml.WCharacterBase.greekLetters = "@0913@0914@0935@0916@0917@0934@0915@0919@0921@0977@0922@0923@0924@0925@0927@0928@0920@0929@0931@0932@0933@0962@0937@0926@0936@0918" + "@0945@0946@0967@0948@0949@0966@0947@0951@0953@0966@0954@0955@0956@0957@0959@0960@0952@0961@0963@0964@0965@0982@0969@0958@0968@0950@";
com.wiris.util.xml.WEntities.s1 = "boxDL@02557@boxDl@02556@boxdL@02555@boxdl@02510@boxDR@02554@boxDr@02553@boxdR@02552@boxdr@0250C@boxH@02550@boxh@02500@boxHD@02566@boxHd@02564@boxhD@02565@boxhd@0252C@boxHU@02569@boxHu@02567@boxhU@02568@boxhu@02534@boxUL@0255D@boxUl@0255C@boxuL@0255B@boxul@02518@boxUR@0255A@boxUr@02559@boxuR@02558@boxur@02514@boxV@02551@boxv@02502@boxVH@0256C@boxVh@0256B@boxvH@0256A@boxvh@0253C@boxVL@02563@boxVl@02562@boxvL@02561@boxvl@02524@boxVR@02560@boxVr@0255F@boxvR@0255E@boxvr@0251C@Acy@00410@acy@00430@Bcy@00411@bcy@00431@CHcy@00427@chcy@00447@Dcy@00414@dcy@00434@Ecy@0042D@ecy@0044D@Fcy@00424@fcy@00444@Gcy@00413@gcy@00433@HARDcy@0042A@hardcy@0044A@Icy@00418@icy@00438@IEcy@00415@iecy@00435@IOcy@00401@iocy@00451@Jcy@00419@jcy@00439@Kcy@0041A@kcy@0043A@KHcy@00425@khcy@00445@Lcy@0041B@lcy@0043B@Mcy@0041C@mcy@0043C@Ncy@0041D@ncy@0043D@numero@02116@Ocy@0041E@ocy@0043E@Pcy@0041F@pcy@0043F@Rcy@00420@rcy@00440@Scy@00421@scy@00441@SHCHcy@00429@shchcy@00449@SHcy@00428@shcy@00448@SOFTcy@0042C@softcy@0044C@Tcy@00422@tcy@00442@TScy@00426@tscy@00446@Ucy@00423@ucy@00443@Vcy@00412@vcy@00432@YAcy@0042F@yacy@0044F@Ycy@0042B@ycy@0044B@YUcy@0042E@yucy@0044E@Zcy@00417@zcy@00437@ZHcy@00416@zhcy@00436@DJcy@00402@djcy@00452@DScy@00405@dscy@00455@DZcy@0040F@dzcy@0045F@GJcy@00403@gjcy@00453@Iukcy@00406@iukcy@00456@Jsercy@00408@jsercy@00458@Jukcy@00404@jukcy@00454@KJcy@0040C@kjcy@0045C@LJcy@00409@ljcy@00459@NJcy@0040A@njcy@0045A@TSHcy@0040B@tshcy@0045B@Ubrcy@0040E@ubrcy@0045E@YIcy@00407@yicy@00457@acute@000B4@breve@002D8@caron@002C7@cedil@000B8@circ@002C6@dblac@002DD@die@000A8@dot@002D9@grave@00060@macr@000AF@ogon@002DB@ring@002DA@tilde@002DC@uml@000A8@Aacute@000C1@aacute@000E1@Acirc@000C2@acirc@000E2@AElig@000C6@aelig@000E6@Agrave@000C0@agrave@000E0@Aring@000C5@aring@000E5@Atilde@000C3@atilde@000E3@Auml@000C4@auml@000E4@Ccedil@000C7@ccedil@000E7@Eacute@000C9@eacute@000E9@Ecirc@000CA@ecirc@000EA@Egrave@000C8@egrave@000E8@ETH@000D0@eth@000F0@Euml@000CB@euml@000EB@Iacute@000CD@iacute@000ED@Icirc@000CE@icirc@000EE@Igrave@000CC@igrave@000EC@Iuml@000CF@iuml@000EF@Ntilde@000D1@ntilde@000F1@Oacute@000D3@oacute@000F3@Ocirc@000D4@ocirc@000F4@Ograve@000D2@ograve@000F2@Oslash@000D8@oslash@000F8@Otilde@000D5@otilde@000F5@Ouml@000D6@ouml@000F6@szlig@000DF@THORN@000DE@thorn@000FE@Uacute@000DA@uacute@000FA@Ucirc@000DB@ucirc@000FB@Ugrave@000D9@ugrave@000F9@Uuml@000DC@uuml@000FC@Yacute@000DD@yacute@000FD@yuml@000FF@Abreve@00102@abreve@00103@Amacr@00100@amacr@00101@Aogon@00104@aogon@00105@Cacute@00106@cacute@00107@Ccaron@0010C@ccaron@0010D@Ccirc@00108@ccirc@00109@Cdot@0010A@cdot@0010B@Dcaron@0010E@dcaron@0010F@Dstrok@00110@dstrok@00111@Ecaron@0011A@ecaron@0011B@Edot@00116@edot@00117@Emacr@00112@emacr@00113@ENG@0014A@eng@0014B@Eogon@00118@eogon@00119@gacute@001F5@Gbreve@0011E@gbreve@0011F@Gcedil@00122@Gcirc@0011C@gcirc@0011D@Gdot@00120@gdot@00121@Hcirc@00124@hcirc@00125@Hstrok@00126@hstrok@00127@Idot@00130@IJlig@00132@ijlig@00133@Imacr@0012A@imacr@0012B@inodot@00131@Iogon@0012E@iogon@0012F@Itilde@00128@itilde@00129@Jcirc@00134@jcirc@00135@Kcedil@00136@kcedil@00137@kgreen@00138@Lacute@00139@lacute@0013A@Lcaron@0013D@lcaron@0013E@Lcedil@0013B@lcedil@0013C@Lmidot@0013F@lmidot@00140@Lstrok@00141@lstrok@00142@Nacute@00143@nacute@00144@napos@00149@Ncaron@00147@ncaron@00148@Ncedil@00145@ncedil@00146@Odblac@00150@odblac@00151@OElig@00152@oelig@00153@Omacr@0014C@omacr@0014D@Racute@00154@racute@00155@Rcaron@00158@rcaron@00159@Rcedil@00156@rcedil@00157@Sacute@0015A@sacute@0015B@Scaron@00160@scaron@00161@Scedil@0015E@scedil@0015F@Scirc@0015C@scirc@0015D@Tcaron@00164@tcaron@00165@Tcedil@00162@tcedil@00163@Tstrok@00166@tstrok@00167@Ubreve@0016C@ubreve@0016D@Udblac@00170@udblac@00171@Umacr@0016A@umacr@0016B@Uogon@00172@uogon@00173@Uring@0016E@uring@0016F@Utilde@00168@utilde@00169@Wcirc@00174@wcirc@00175@Ycirc@00176@ycirc@00177@Yuml@00178@Zacute@00179@zacute@0017A@Zcaron@0017D@zcaron@0017E@Zdot@0017B@zdot@0017C@apos@00027@ast@0002A@brvbar@000A6@bsol@0005C@cent@000A2@colon@0003A@comma@0002C@commat@00040@copy@000A9@curren@000A4@darr@02193@deg@000B0@divide@000F7@dollar@00024@equals@0003D@excl@00021@frac12@000BD@frac14@000BC@frac18@0215B@frac34@000BE@frac38@0215C@frac58@0215D@frac78@0215E@gt@0003E@half@000BD@horbar@02015@hyphen@02010@iexcl@000A1@iquest@000BF@laquo@000AB@larr@02190@lcub@0007B@ldquo@0201C@lowbar@0005F@lpar@00028@lsqb@0005B@lsquo@02018@micro@000B5@middot@000B7@nbsp@000A0@not@000AC@num@00023@ohm@02126@ordf@000AA@ordm@000BA@para@000B6@percnt@00025@period@0002E@plus@0002B@plusmn@000B1@pound@000A3@quest@0003F@quot@00022@raquo@000BB@rarr@02192@rcub@0007D@rdquo@0201D@reg@000AE@rpar@00029@rsqb@0005D@rsquo@02019@sect@000A7@semi@0003B@shy@000AD@sol@0002F@sung@0266A@sup1@000B9@sup2@000B2@sup3@000B3@times@000D7@trade@02122@uarr@02191@verbar@0007C@yen@000A5@blank@02423@blk12@02592@blk14@02591@blk34@02593@block@02588@bull@02022@caret@02041@check@02713@cir@025CB@clubs@02663@copysr@02117@cross@02717@Dagger@02021@dagger@02020@dash@02010@diams@02666@dlcrop@0230D@drcrop@0230C@dtri@025BF@dtrif@025BE@emsp@02003@emsp13@02004@emsp14@02005@ensp@02002@female@02640@ffilig@0FB03@fflig@0FB00@ffllig@0FB04@filig@0FB01@flat@0266D@fllig@0FB02@frac13@02153@frac15@02155@frac16@02159@frac23@02154@frac25@02156@frac35@02157@frac45@02158@frac56@0215A@hairsp@0200A@hearts@02665@hellip@02026@hybull@02043@incare@02105@ldquor@0201E@lhblk@02584@loz@025CA@lozf@029EB@lsquor@0201A@ltri@025C3@ltrif@025C2@male@02642@malt@02720@marker@025AE@mdash@02014@mldr@02026@natur@0266E@ndash@02013@nldr@02025@numsp@02007@phone@0260E@puncsp@02008@rdquor@0201D@rect@025AD@rsquor@02019@rtri@025B9@rtrif@025B8@rx@0211E@sext@02736@sharp@0266F@spades@02660@squ@025A1@squf@025AA@star@02606@starf@02605@target@02316@telrec@02315@thinsp@02009@uhblk@02580@ulcrop@0230F@urcrop@0230E@utri@025B5@utrif@025B4@vellip@022EE@angzarr@0237C@cirmid@02AEF@cudarrl@02938@cudarrr@02935@cularr@021B6@cularrp@0293D@curarr@021B7@curarrm@0293C@Darr@021A1@dArr@021D3@ddarr@021CA@DDotrahd@02911@dfisht@0297F@dHar@02965@dharl@021C3@dharr@021C2@duarr@021F5@duhar@0296F@dzigrarr@027FF@erarr@02971@hArr@021D4@harr@02194@harrcir@02948@harrw@021AD@hoarr@021FF@imof@022B7@lAarr@021DA@Larr@0219E@larrbfs@0291F@larrfs@0291D@larrhk@021A9@larrlp@021AB@larrpl@02939@larrsim@02973@larrtl@021A2@lAtail@0291B@latail@02919@lBarr@0290E@lbarr@0290C@ldca@02936@ldrdhar@02967@ldrushar@0294B@ldsh@021B2@lfisht@0297C@lHar@02962@lhard@021BD@lharu@021BC@lharul@0296A@llarr@021C7@llhard@0296B@loarr@021FD@lrarr@021C6@lrhar@021CB@lrhard@0296D@lsh@021B0@lurdshar@0294A@luruhar@02966@Map@02905@map@021A6@midcir@02AF0@mumap@022B8@nearhk@02924@neArr@021D7@nearr@02197@nesear@02928@nhArr@021CE@nharr@021AE@nlArr@021CD@nlarr@0219A@nrArr@021CF@nrarr@0219B@nvHarr@02904@nvlArr@02902@nvrArr@02903@nwarhk@02923@nwArr@021D6@nwarr@02196@nwnear@02927@olarr@021BA@orarr@021BB@origof@022B6@rAarr@021DB@Rarr@021A0@rarrap@02975@rarrbfs@02920@rarrc@02933@rarrfs@0291E@rarrhk@021AA@rarrlp@021AC@rarrpl@02945@rarrsim@02974@Rarrtl@02916@rarrtl@021A3@rarrw@0219D@rAtail@0291C@ratail@0291A@RBarr@02910@rBarr@0290F@rbarr@0290D@rdca@02937@rdldhar@02969@rdsh@021B3@rfisht@0297D@rHar@02964@rhard@021C1@rharu@021C0@rharul@0296C@rlarr@021C4@rlhar@021CC@roarr@021FE@rrarr@021C9@rsh@021B1@ruluhar@02968@searhk@02925@seArr@021D8@searr@02198@seswar@02929@simrarr@02972@slarr@02190@srarr@02192@swarhk@02926@swArr@021D9@swarr@02199@swnwar@0292A@Uarr@0219F@uArr@021D1@Uarrocir@02949@udarr@021C5@udhar@0296E@ufisht@0297E@uHar@02963@uharl@021BF@uharr@021BE@uuarr@021C8@vArr@021D5@varr@02195@xhArr@027FA@xharr@027F7@xlArr@027F8@xlarr@027F5@xmap@027FC@xrArr@027F9@xrarr@027F6@zigrarr@021DD@ac@0223E@amalg@02A3F@barvee@022BD@Barwed@02306@barwed@02305@bsolb@029C5@Cap@022D2@capand@02A44@capbrcup@02A49@capcap@02A4B@capcup@02A47@capdot@02A40@ccaps@02A4D@ccups@02A4C@ccupssm@02A50@coprod@02210@Cup@022D3@cupbrcap@02A48@cupcap@02A46@cupcup@02A4A@cupdot@0228D@cupor@02A45@cuvee@022CE@cuwed@022CF@Dagger@02021@dagger@02020@diam@022C4@divonx@022C7@eplus@02A71@hercon@022B9@intcal@022BA@iprod@02A3C@loplus@02A2D@lotimes@02A34@lthree@022CB@ltimes@022C9@midast@0002A@minusb@0229F@minusd@02238@minusdu@02A2A@ncap@02A43@ncup@02A42@oast@0229B@ocir@0229A@odash@0229D@odiv@02A38@odot@02299@odsold@029BC@ofcir@029BF@ogt@029C1@ohbar@029B5@olcir@029BE@olt@029C0@omid@029B6@ominus@02296@opar@029B7@operp@029B9@oplus@02295@osol@02298@Otimes@02A37@otimes@02297@otimesas@02A36@ovbar@0233D@plusacir@02A23@plusb@0229E@pluscir@02A22@plusdo@02214@plusdu@02A25@pluse@02A72@plussim@02A26@plustwo@02A27@prod@0220F@race@029DA@roplus@02A2E@rotimes@02A35@rthree@022CC@rtimes@022CA@sdot@022C5@sdotb@022A1@setmn@02216@simplus@02A24@smashp@02A33@solb@029C4@sqcap@02293@sqcup@02294@ssetmn@02216@sstarf@022C6@subdot@02ABD@sum@02211@supdot@02ABE@timesb@022A0@timesbar@02A31@timesd@02A30@tridot@025EC@triminus@02A3A@triplus@02A39@trisb@029CD@tritime@02A3B@uplus@0228E@veebar@022BB@wedbar@02A5F@wreath@02240@xcap@022C2@xcirc@025EF@xcup@022C3@xdtri@025BD@xodot@02A00@xoplus@02A01@xotime@02A02@xsqcup@02A06@xuplus@02A04@xutri@025B3@xvee@022C1@xwedge@022C0@dlcorn@0231E@drcorn@0231F@gtlPar@02995@langd@02991@lbrke@0298B@lbrksld@0298F@lbrkslu@0298D@lceil@02308@lfloor@0230A@lmoust@023B0@lparlt@02993@ltrPar@02996@rangd@02992@rbrke@0298C@rbrksld@0298E@rbrkslu@02990@rceil@02309@rfloor@0230B@rmoust@023B1@rpargt@02994@ulcorn@0231C@urcorn@0231D@gnap@02A8A@gnE@02269@gne@02A88@gnsim@022E7@lnap@02A89@lnE@02268@lne@02A87@lnsim@022E6@nap@02249@ncong@02247@nequiv@02262@nge@02271@ngsim@02275@ngt@0226F@nle@02270@nlsim@02274@nlt@0226E@nltri@022EA@nltrie@022EC@nmid@02224@npar@02226@npr@02280@nprcue@022E0@nrtri@022EB@nrtrie@022ED@nsc@02281@nsccue@022E1@nsim@02241@nsime@02244@nsmid@02224@nspar@02226@nsqsube@022E2@nsqsupe@022E3@nsub@02284@nsube@02288@nsup@02285@nsupe@02289@ntgl@02279@ntlg@02278@nVDash@022AF@nVdash@022AE@nvDash@022AD@nvdash@022AC@parsim@02AF3@prnap@02AB9@prnE@02AB5@prnsim@022E8@rnmid@02AEE@scnap@02ABA@scnE@02AB6@scnsim@022E9@simne@02246@solbar@0233F@subnE@02ACB@subne@0228A@supnE@02ACC@supne@0228B@ang@02220@ange@029A4@angmsd@02221@angmsdaa@029A8@angmsdab@029A9@angmsdac@029AA@angmsdad@029AB@angmsdae@029AC@angmsdaf@029AD@angmsdag@029AE@angmsdah@029AF@angrtvb@022BE@angrtvbd@0299D@bbrk@023B5@bbrktbrk@023B6@bemptyv@029B0@beth@02136@boxbox@029C9@";
com.wiris.util.xml.WEntities.s2 = "bprime@02035@bsemi@0204F@cemptyv@029B2@cirE@029C3@cirscir@029C2@comp@02201@daleth@02138@demptyv@029B1@ell@02113@empty@02205@emptyv@02205@gimel@02137@iiota@02129@image@02111@imath@00131@jmath@0006A@laemptyv@029B4@lltri@025FA@lrtri@022BF@mho@02127@nexist@02204@oS@024C8@planck@0210F@plankv@0210F@raemptyv@029B3@range@029A5@real@0211C@tbrk@023B4@trpezium@0FFFD@ultri@025F8@urtri@025F9@vzigzag@0299A@weierp@02118@apE@02A70@ape@0224A@apid@0224B@asymp@02248@Barv@02AE7@bcong@0224C@bepsi@003F6@bowtie@022C8@bsim@0223D@bsime@022CD@bump@0224E@bumpE@02AAE@bumpe@0224F@cire@02257@Colon@02237@Colone@02A74@colone@02254@congdot@02A6D@csub@02ACF@csube@02AD1@csup@02AD0@csupe@02AD2@cuepr@022DE@cuesc@022DF@Dashv@02AE4@dashv@022A3@easter@02A6E@ecir@02256@ecolon@02255@eDDot@02A77@eDot@02251@efDot@02252@eg@02A9A@egs@02A96@egsdot@02A98@el@02A99@els@02A95@elsdot@02A97@equest@0225F@equivDD@02A78@erDot@02253@esdot@02250@Esim@02A73@esim@02242@fork@022D4@forkv@02AD9@frown@02322@gap@02A86@gE@02267@gEl@02A8C@gel@022DB@ges@02A7E@gescc@02AA9@gesdot@02A80@gesdoto@02A82@gesdotol@02A84@gesles@02A94@Gg@022D9@gl@02277@gla@02AA5@glE@02A92@glj@02AA4@gsim@02273@gsime@02A8E@gsiml@02A90@Gt@0226B@gtcc@02AA7@gtcir@02A7A@gtdot@022D7@gtquest@02A7C@gtrarr@02978@homtht@0223B@lap@02A85@lat@02AAB@late@02AAD@lE@02266@lEg@02A8B@leg@022DA@les@02A7D@lescc@02AA8@lesdot@02A7F@lesdoto@02A81@lesdotor@02A83@lesges@02A93@lg@02276@lgE@02A91@Ll@022D8@lsim@02272@lsime@02A8D@lsimg@02A8F@Lt@0226A@ltcc@02AA6@ltcir@02A79@ltdot@022D6@ltlarr@02976@ltquest@02A7B@ltrie@022B4@mcomma@02A29@mDDot@0223A@mid@02223@mlcp@02ADB@models@022A7@mstpos@0223E@Pr@02ABB@pr@0227A@prap@02AB7@prcue@0227C@prE@02AB3@pre@02AAF@prsim@0227E@prurel@022B0@ratio@02236@rtrie@022B5@rtriltri@029CE@Sc@02ABC@sc@0227B@scap@02AB8@sccue@0227D@scE@02AB4@sce@02AB0@scsim@0227F@sdote@02A66@sfrown@02322@simg@02A9E@simgE@02AA0@siml@02A9D@simlE@02A9F@smid@02223@smile@02323@smt@02AAA@smte@02AAC@spar@02225@sqsub@0228F@sqsube@02291@sqsup@02290@sqsupe@02292@ssmile@02323@Sub@022D0@subE@02AC5@subedot@02AC3@submult@02AC1@subplus@02ABF@subrarr@02979@subsim@02AC7@subsub@02AD5@subsup@02AD3@Sup@022D1@supdsub@02AD8@supE@02AC6@supedot@02AC4@suphsub@02AD7@suplarr@0297B@supmult@02AC2@supplus@02AC0@supsim@02AC8@supsub@02AD4@supsup@02AD6@thkap@02248@thksim@0223C@topfork@02ADA@trie@0225C@twixt@0226C@Vbar@02AEB@vBar@02AE8@vBarv@02AE9@VDash@022AB@Vdash@022A9@vDash@022A8@vdash@022A2@Vdashl@02AE6@vltri@022B2@vprop@0221D@vrtri@022B3@Vvdash@022AA@alpha@003B1@beta@003B2@chi@003C7@Delta@00394@delta@003B4@epsi@003B5@epsiv@003F5@eta@003B7@Gamma@00393@gamma@003B3@Gammad@003DC@gammad@003DD@iota@003B9@kappa@003BA@kappav@003F0@Lambda@0039B@lambda@003BB@mu@003BC@nu@003BD@Omega@003A9@omega@003C9@Phi@003A6@phi@003C6@phiv@003D5@Pi@003A0@pi@003C0@piv@003D6@Psi@003A8@psi@003C8@rho@003C1@rhov@003F1@Sigma@003A3@sigma@003C3@sigmav@003C2@tau@003C4@Theta@00398@theta@003B8@thetav@003D1@Upsi@003D2@upsi@003C5@Xi@0039E@xi@003BE@zeta@003B6@Cfr@0212D@Hfr@0210C@Ifr@02111@Rfr@0211C@Zfr@02128@Copf@02102@Hopf@0210D@Nopf@02115@Popf@02119@Qopf@0211A@Ropf@0211D@Zopf@02124@acd@0223F@aleph@02135@And@02A53@and@02227@andand@02A55@andd@02A5C@andslope@02A58@andv@02A5A@angrt@0221F@angsph@02222@angst@0212B@ap@02248@apacir@02A6F@awconint@02233@awint@02A11@becaus@02235@bernou@0212C@bNot@02AED@bnot@02310@bottom@022A5@cap@02229@Cconint@02230@cirfnint@02A10@compfn@02218@cong@02245@Conint@0222F@conint@0222E@ctdot@022EF@cup@0222A@cwconint@02232@cwint@02231@cylcty@0232D@disin@022F2@Dot@000A8@DotDot@020DC@dsol@029F6@dtdot@022F1@dwangle@029A6@elinters@0FFFD@epar@022D5@eparsl@029E3@equiv@02261@eqvparsl@029E5@exist@02203@fltns@025B1@fnof@00192@forall@02200@fpartint@02A0D@ge@02265@hamilt@0210B@iff@021D4@iinfin@029DC@imped@001B5@infin@0221E@infintie@029DD@Int@0222C@int@0222B@intlarhk@02A17@isin@02208@isindot@022F5@isinE@022F9@isins@022F4@isinsv@022F3@isinv@02208@lagran@02112@Lang@0300A@lang@027e8@lArr@021D0@lbbrk@03014@le@02264@loang@03018@lobrk@0301A@lopar@02985@lowast@02217@minus@02212@mnplus@02213@nabla@02207@ne@02260@nhpar@02AF2@ni@0220B@nis@022FC@nisd@022FA@niv@0220B@Not@02AEC@notin@02209@notinva@02209@notinvb@022F7@notinvc@022F6@notni@0220C@notniva@0220C@notnivb@022FE@notnivc@022FD@npolint@02A14@nvinfin@029DE@olcross@029BB@Or@02A54@or@02228@ord@02A5D@order@02134@oror@02A56@orslope@02A57@orv@02A5B@par@02225@parsl@02AFD@part@02202@permil@02030@perp@022A5@pertenk@02031@phmmat@02133@pointint@02A15@Prime@02033@prime@02032@profalar@0232E@profline@02312@profsurf@02313@prop@0221D@qint@02A0C@qprime@02057@quatint@02A16@radic@0221A@Rang@0300B@rang@027e9@rArr@021D2@rbbrk@03015@roang@03019@robrk@0301B@ropar@02986@rppolint@02A12@scpolint@02A13@sim@0223C@simdot@02A6A@sime@02243@smeparsl@029E4@square@025A1@squarf@025AA@strns@000AF@sub@02282@sube@02286@sup@02283@supe@02287@tdot@020DB@there4@02234@tint@0222D@top@022A4@topbot@02336@topcir@02AF1@tprime@02034@utdot@022F0@uwangle@029A7@vangrt@0299C@veeeq@0225A@Verbar@02016@wedgeq@02259@xnis@022FB@angle@02220@ApplyFunction@02061@approx@02248@approxeq@0224A@Assign@02254@backcong@0224C@backepsilon@003F6@backprime@02035@backsim@0223D@backsimeq@022CD@Backslash@02216@barwedge@02305@Because@02235@because@02235@Bernoullis@0212C@between@0226C@bigcap@022C2@bigcirc@025EF@bigcup@022C3@bigodot@02A00@bigoplus@02A01@bigotimes@02A02@bigsqcup@02A06@bigstar@02605@bigtriangledown@025BD@bigtriangleup@025B3@biguplus@02A04@bigvee@022C1@bigwedge@022C0@bkarow@0290D@blacklozenge@029EB@blacksquare@025AA@blacktriangle@025B4@blacktriangledown@025BE@blacktriangleleft@025C2@blacktriangleright@025B8@bot@022A5@boxminus@0229F@boxplus@0229E@boxtimes@022A0@Breve@002D8@bullet@02022@Bumpeq@0224E@bumpeq@0224F@CapitalDifferentialD@02145@Cayleys@0212D@Cedilla@000B8@CenterDot@000B7@centerdot@000B7@checkmark@02713@circeq@02257@circlearrowleft@021BA@circlearrowright@021BB@circledast@0229B@circledcirc@0229A@circleddash@0229D@CircleDot@02299@circledR@000AE@circledS@024C8@CircleMinus@02296@CirclePlus@02295@CircleTimes@02297@ClockwiseContourIntegral@02232@CloseCurlyDoubleQuote@0201D@CloseCurlyQuote@02019@clubsuit@02663@coloneq@02254@complement@02201@complexes@02102@Congruent@02261@ContourIntegral@0222E@Coproduct@02210@CounterClockwiseContourIntegral@02233@CupCap@0224D@curlyeqprec@022DE@curlyeqsucc@022DF@curlyvee@022CE@curlywedge@022CF@curvearrowleft@021B6@curvearrowright@021B7@dbkarow@0290F@ddagger@02021@ddotseq@02A77@Del@02207@DiacriticalAcute@000B4@DiacriticalDot@002D9@DiacriticalDoubleAcute@002DD@DiacriticalGrave@00060@DiacriticalTilde@002DC@Diamond@022C4@diamond@022C4@diamondsuit@02666@DifferentialD@02146@digamma@003DD@div@000F7@divideontimes@022C7@doteq@02250@doteqdot@02251@DotEqual@02250@dotminus@02238@dotplus@02214@dotsquare@022A1@doublebarwedge@02306@DoubleContourIntegral@0222F@DoubleDot@000A8@DoubleDownArrow@021D3@DoubleLeftArrow@021D0@DoubleLeftRightArrow@021D4@DoubleLeftTee@02AE4@DoubleLongLeftArrow@027F8@DoubleLongLeftRightArrow@027FA@DoubleLongRightArrow@027F9@DoubleRightArrow@021D2@DoubleRightTee@022A8@DoubleUpArrow@021D1@DoubleUpDownArrow@021D5@DoubleVerticalBar@02225@DownArrow@02193@Downarrow@021D3@downarrow@02193@DownArrowUpArrow@021F5@downdownarrows@021CA@downharpoonleft@021C3@downharpoonright@021C2@DownLeftVector@021BD@DownRightVector@021C1@DownTee@022A4@DownTeeArrow@021A7@drbkarow@02910@Element@02208@emptyset@02205@eqcirc@02256@eqcolon@02255@eqsim@02242@eqslantgtr@02A96@eqslantless@02A95@EqualTilde@02242@Equilibrium@021CC@Exists@02203@expectation@02130@ExponentialE@02147@exponentiale@02147@fallingdotseq@02252@ForAll@02200@Fouriertrf@02131@geq@02265@geqq@02267@geqslant@02A7E@gg@0226B@ggg@022D9@gnapprox@02A8A@gneq@02A88@gneqq@02269@GreaterEqual@02265@GreaterEqualLess@022DB@GreaterFullEqual@02267@GreaterLess@02277@GreaterSlantEqual@02A7E@GreaterTilde@02273@gtrapprox@02A86@gtrdot@022D7@gtreqless@022DB@gtreqqless@02A8C@gtrless@02277@gtrsim@02273@Hacek@002C7@hbar@0210F@heartsuit@02665@HilbertSpace@0210B@hksearow@02925@hkswarow@02926@hookleftarrow@021A9@hookrightarrow@021AA@hslash@0210F@HumpDownHump@0224E@HumpEqual@0224F@iiiint@02A0C@iiint@0222D@Im@02111@ImaginaryI@02148@imagline@02110@imagpart@02111@Implies@021D2@in@02208@integers@02124@Integral@0222B@intercal@022BA@Intersection@022C2@intprod@02A3C@InvisibleComma@02063@InvisibleTimes@02062@langle@027e8@Laplacetrf@02112@lbrace@0007B@lbrack@0005B@LeftAngleBracket@027e8@LeftArrow@02190@Leftarrow@021D0@leftarrow@02190@LeftArrowBar@021E4@LeftArrowRightArrow@021C6@leftarrowtail@021A2@LeftCeiling@02308@LeftDoubleBracket@0301A@LeftDownVector@021C3@LeftFloor@0230A@leftharpoondown@021BD@leftharpoonup@021BC@leftleftarrows@021C7@LeftRightArrow@02194@Leftrightarrow@021D4@leftrightarrow@02194@leftrightarrows@021C6@leftrightharpoons@021CB@leftrightsquigarrow@021AD@LeftTee@022A3@LeftTeeArrow@021A4@leftthreetimes@022CB@LeftTriangle@022B2@LeftTriangleEqual@022B4@LeftUpVector@021BF@LeftVector@021BC@leq@02264@leqq@02266@leqslant@02A7D@lessapprox@02A85@lessdot@022D6@lesseqgtr@022DA@lesseqqgtr@02A8B@LessEqualGreater@022DA@LessFullEqual@02266@LessGreater@02276@lessgtr@02276@lesssim@02272@LessSlantEqual@02A7D@LessTilde@02272@ll@0226A@llcorner@0231E@Lleftarrow@021DA@lmoustache@023B0@lnapprox@02A89@lneq@02A87@lneqq@02268@LongLeftArrow@027F5@Longleftarrow@027F8@longleftarrow@027F5@LongLeftRightArrow@027F7@Longleftrightarrow@027FA@longleftrightarrow@027F7@longmapsto@027FC@LongRightArrow@027F6@Longrightarrow@027F9@longrightarrow@027F6@looparrowleft@021AB@looparrowright@021AC@LowerLeftArrow@02199@LowerRightArrow@02198@lozenge@025CA@lrcorner@0231F@Lsh@021B0@maltese@02720@mapsto@021A6@measuredangle@02221@Mellintrf@02133@MinusPlus@02213@mp@02213@multimap@022B8@napprox@02249@natural@0266E@naturals@02115@nearrow@02197@NegativeMediumSpace@0200B@NegativeThickSpace@0200B@NegativeThinSpace@0200B@NegativeVeryThinSpace@0200B@NestedGreaterGreater@0226B@NestedLessLess@0226A@nexists@02204@ngeq@02271@ngtr@0226F@nLeftarrow@021CD@nleftarrow@0219A@nLeftrightarrow@021CE@nleftrightarrow@021AE@nleq@02270@nless@0226E@NonBreakingSpace@000A0@NotCongruent@02262@NotDoubleVerticalBar@02226@NotElement@02209@NotEqual@02260@NotExists@02204@NotGreater@0226F@NotGreaterEqual@02271@NotGreaterLess@02279@NotGreaterTilde@02275@NotLeftTriangle@022EA@NotLeftTriangleEqual@022EC@NotLess@0226E@NotLessEqual@02270@NotLessGreater@02278@NotLessTilde@02274@NotPrecedes@02280@NotPrecedesSlantEqual@022E0@NotReverseElement@0220C@NotRightTriangle@022EB@NotRightTriangleEqual@022ED@NotSquareSubsetEqual@022E2@NotSquareSupersetEqual@022E3@NotSubsetEqual@02288@NotSucceeds@02281@NotSucceedsSlantEqual@022E1@NotSupersetEqual@02289@NotTilde@02241@NotTildeEqual@02244@NotTildeFullEqual@02247@NotTildeTilde@02249@NotVerticalBar@02224@nparallel@02226@nprec@02280@nRightarrow@021CF@nrightarrow@0219B@nshortmid@02224@nshortparallel@02226@nsimeq@02244@nsubseteq@02288@nsucc@02281@nsupseteq@02289@ntriangleleft@022EA@ntrianglelefteq@022EC@ntriangleright@022EB@ntrianglerighteq@022ED@nwarrow@02196@oint@0222E@OpenCurlyDoubleQuote@0201C@OpenCurlyQuote@02018@orderof@02134@parallel@02225@PartialD@02202@pitchfork@022D4@PlusMinus@000B1@pm@000B1@Poincareplane@0210C@prec@0227A@precapprox@02AB7@preccurlyeq@0227C@Precedes@0227A@PrecedesEqual@02AAF@PrecedesSlantEqual@0227C@PrecedesTilde@0227E@preceq@02AAF@precnapprox@02AB9@precneqq@02AB5@precnsim@022E8@precsim@0227E@primes@02119@Proportion@02237@Proportional@0221D@propto@0221D@quaternions@0210D@questeq@0225F@rangle@027e9@rationals@0211A@rbrace@0007D@rbrack@0005D@Re@0211C@realine@0211B@realpart@0211C@reals@0211D@ReverseElement@0220B@ReverseEquilibrium@021CB@ReverseUpEquilibrium@0296F@RightAngleBracket@027e9@RightArrow@02192@Rightarrow@021D2@rightarrow@02192@RightArrowBar@021E5@RightArrowLeftArrow@021C4@rightarrowtail@021A3@RightCeiling@02309@RightDoubleBracket@0301B@RightDownVector@021C2@RightFloor@0230B@rightharpoondown@021C1@rightharpoonup@021C0@rightleftarrows@021C4@rightleftharpoons@021CC@rightrightarrows@021C9@rightsquigarrow@0219D@RightTee@022A2@RightTeeArrow@021A6@rightthreetimes@022CC@RightTriangle@022B3@RightTriangleEqual@022B5@RightUpVector@021BE@RightVector@021C0@risingdotseq@02253@rmoustache@023B1@Rrightarrow@021DB@Rsh@021B1@searrow@02198@setminus@02216@ShortDownArrow@02193@ShortLeftArrow@02190@shortmid@02223@shortparallel@02225@ShortRightArrow@02192@ShortUpArrow@02191@simeq@02243@SmallCircle@02218@smallsetminus@02216@spadesuit@02660@Sqrt@0221A@sqsubset@0228F@sqsubseteq@02291@sqsupset@02290@sqsupseteq@02292@Square@025A1@SquareIntersection@02293@SquareSubset@0228F@SquareSubsetEqual@02291@SquareSuperset@02290@SquareSupersetEqual@02292@SquareUnion@02294@Star@022C6@straightepsilon@003F5@straightphi@003D5@Subset@022D0@subset@02282@subseteq@02286@subseteqq@02AC5@SubsetEqual@02286@subsetneq@0228A@subsetneqq@02ACB@succ@0227B@succapprox@02AB8@succcurlyeq@0227D@Succeeds@0227B@SucceedsEqual@02AB0@SucceedsSlantEqual@0227D@SucceedsTilde@0227F@succeq@02AB0@succnapprox@02ABA@succneqq@02AB6@succnsim@022E9@succsim@0227F@SuchThat@0220B@Sum@02211@Superset@02283@SupersetEqual@02287@Supset@022D1@supset@02283@supseteq@02287@supseteqq@02AC6@supsetneq@0228B@supsetneqq@02ACC@swarrow@02199@Therefore@02234@therefore@02234@thickapprox@02248@thicksim@0223C@ThinSpace@02009@Tilde@0223C@TildeEqual@02243@TildeFullEqual@02245@TildeTilde@02248@toea@02928@tosa@02929@triangle@025B5@triangledown@025BF@triangleleft@025C3@trianglelefteq@022B4@triangleq@0225C@triangleright@025B9@trianglerighteq@022B5@TripleDot@020DB@twoheadleftarrow@0219E@twoheadrightarrow@021A0@ulcorner@0231C@Union@022C3@UnionPlus@0228E@UpArrow@02191@Uparrow@021D1@uparrow@02191@UpArrowDownArrow@021C5@UpDownArrow@02195@Updownarrow@021D5@updownarrow@02195@UpEquilibrium@0296E@upharpoonleft@021BF@upharpoonright@021BE@UpperLeftArrow@02196@UpperRightArrow@02197@upsilon@003C5@UpTee@022A5@UpTeeArrow@021A5@upuparrows@021C8@urcorner@0231D@varepsilon@003F5@varkappa@003F0@varnothing@02205@varphi@003C6@varpi@003D6@varpropto@0221D@varrho@003F1@varsigma@003C2@vartheta@003D1@vartriangleleft@022B2@vartriangleright@022B3@Vee@022C1@vee@02228@Vert@02016@vert@0007C@VerticalBar@02223@VerticalTilde@02240@VeryThinSpace@0200A@Wedge@022C0@wedge@02227@wp@02118@wr@02240@zeetrf@02128@af@02061@asympeq@0224D@Cross@02A2F@DD@02145@dd@02146@DownArrowBar@02913@DownBreve@00311@DownLeftRightVector@02950@DownLeftTeeVector@0295E@DownLeftVectorBar@02956@DownRightTeeVector@0295F@DownRightVectorBar@02957@ee@02147@EmptySmallSquare@025FB@EmptyVerySmallSquare@025AB@Equal@02A75@FilledSmallSquare@025FC@FilledVerySmallSquare@025AA@GreaterGreater@02AA2@Hat@0005E@HorizontalLine@02500@ic@02063@ii@02148@it@02062@larrb@021E4@LeftDownTeeVector@02961@LeftDownVectorBar@02959@LeftRightVector@0294E@LeftTeeVector@0295A@LeftTriangleBar@029CF@LeftUpDownVector@02951@LeftUpTeeVector@02960@LeftUpVectorBar@02958@LeftVectorBar@02952@LessLess@02AA1@mapstodown@021A7@mapstoleft@021A4@mapstoup@021A5@MediumSpace@0205F@NewLine@0000A@NoBreak@02060@NotCupCap@0226D@OverBar@000AF@OverBrace@023DE@OverBracket@023B4@OverParenthesis@023DC@planckh@0210E@Product@0220F@rarrb@021E5@RightDownTeeVector@0295D@RightDownVectorBar@02955@RightTeeVector@0295B@RightTriangleBar@029D0@RightUpDownVector@0294F@RightUpTeeVector@0295C@RightUpVectorBar@02954@RightVectorBar@02953@RoundImplies@02970@RuleDelayed@029F4@Tab@00009@UnderBar@00332@UnderBrace@023DF@UnderBracket@023B5@UnderParenthesis@023DD@UpArrowBar@02912@Upsilon@003A5@VerticalLine@0007C@VerticalSeparator@02758@ZeroWidthSpace@0200B@omicron@003BF@amalg@02210@NegativeThinSpace@0E000@Iopf@1d540@";
com.wiris.util.xml.WEntities.s3 = "Alpha@00391@Beta@00392@Epsilon@00395@Zeta@00396@Eta@00397@Iota@00399@Kappa@0039A@Mu@0039C@Nu@0039D@Omicron@0039F@Rho@003A1@Tau@003A4@Chi@003A7@gamma@003B3@epsilon@003B5@eta@003B7@sigmaf@003C2@thetasym@003D1@upsih@003D2@zwnj@0200C@zwj@0200D@lrm@0200E@rlm@0200F@sbquo@0201A@bdquo@0201E@lsaquo@02039@rsaquo@0203A@oline@0203E@euro@020AC@crarr@021B5@";
com.wiris.util.xml.WEntities.oldWebeq = "infty@221e@partial@2202@iint@222c@neq@2260@nsubset@2284@nsupset@2285@exists@2203@ldots@2026@vdots@22ee@cdots@22ef@ddots@22f1@bar@00af@hat@005e@vec@21c0@ddot@00A8@";
com.wiris.util.xml.WEntities.MATHML_ENTITIES = com.wiris.util.xml.WEntities.s1 + com.wiris.util.xml.WEntities.s2 + com.wiris.util.xml.WEntities.s3 + com.wiris.util.xml.WEntities.oldWebeq;
com.wiris.util.xml.WXmlUtils.WHITESPACE_COLLAPSE_REGEX = new EReg("[ \\t\\n\\r]{2,}","g");
com.wiris.util.xml.WXmlUtils.entities = null;
com.wiris.util.xml.XmlSerializer.MODE_READ = 0;
com.wiris.util.xml.XmlSerializer.MODE_WRITE = 1;
com.wiris.util.xml.XmlSerializer.MODE_REGISTER = 2;
com.wiris.util.xml.XmlSerializer.MODE_CACHE = 3;
haxe.SHA1.hex_chr = "0123456789abcdef";
haxe.Serializer.USE_CACHE = false;
haxe.Serializer.USE_ENUM_INDEX = false;
haxe.Serializer.BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%:";
haxe.Unserializer.DEFAULT_RESOLVER = Type;
haxe.Unserializer.BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%:";
haxe.Unserializer.CODES = null;
haxe.io.Output.LN2 = Math.log(2);
js.Lib.onerror = null;
