// begin

/*
* a
*/
function a ( pa, pb )
{
	sdfdgh;
}

/*
* b
*/
function b (/*******/)
{



	isMember? "yes": "no";	

	if ( debug )
	{
		return 1000;
	}

	if //dfghfgjhgjgh
		( a /* 22222 */ > /*3456546*/ b/*345345345*/ )// e5657

	{
		//fgjhkljkljk
		return -1; // 4678979

	} else
		/* sdvfghfh */{
		if ( a == b )
			return 0;
		else
			return 1;
	}


	if ( true )
	{

	} else
		if ( false )
		{
			// asdgfjhg 
		}


	sdfghfjghj;
}

function c ()
{
}

function MyObject ( name, message )
{
	this.name = String(name);
	this.message = String(message);
}

MyObject.prototype.getName = function ()
{
	return this.name;
};

MyObject.prototype.getMessage = function ()
{
	return this.message;
};


/*
function GetCatalogs(catalogContext:CatalogContext)
{
var getCatalogs = catalogContext.GetCatalogs().Catalogs

}

// BUt as soon as I add another variable declaration I get a NoViableAlt exception:

function GetCatalogs(catalogContext:CatalogContext)
{
var getCatalogs = catalogContext.GetCatalogs().Catalogs
var catalogResponseType = new CatalogDataSet()

}*/ 

a = 500;

// dfghfhgf

// 34567890

// 5467567868

/* 4678798  */





