function SearchAPI()
{
    //dicts_file = search_dictionaries_file;

    //Declaring the property variables.
    var searchresultswindowname;
    var searchxpathelements="//body";
    var searchxpathtitle="//title";
    var searchhideresults;
    var searchcount;
    var resultswin;

    var c_timer_speeds_ms = 80;
    var c_timer_load_ms = 400;
    var ST_BOOLEAN = 0;
    var ST_ALL_WORDS = 1;
    var ST_ANY_WORDS = 2;
    var ST_EXACT = 3;
    var CS_STATE_UNINITIALIZED = 0;
    var CS_STATE_IDLE = 1;
    var CS_STATE_ACTIVE = 2;
    var idsearchresultsdiv = "idresultsarea";
    var casesensitive = new Boolean( false );
    var inputform = null;
    var resultsdiv = null;
    var typeselect = null;
    var nwaitnsearch = null;
    var nwinparenttimer = null;
    var nshowtimer = null;
    var bail = false;
    var xmlswap = null;
    var g_searchingfile = false;
    var oLMSAPI_ref = null;
    var stokenized = null;
    
    searchstate = CS_STATE_UNINITIALIZED;
    resultswin = null;
    max_results_a_page = 10;
    maxresults = 300;
    rfc_1766_lang = "en-US";
    
    var m_SearchObj = this;
    
    //!!Initialize
    SearchAPI.prototype.init_Search=function(){
    number_of_viewed_indexes = 0;
    gate_results_last_index = 0;
    searchtype = ST_ALL_WORDS;
    
//this is being called at the time of onload of result.
    reset_1766_lang();
    if(window.ActiveXObject)
        setlatestknownxmlparser();
    if ( !searchhideresults ) searchhideresults = "no";
    if (( searchhideresults.toLowerCase() != "yes" ) && ( searchhideresults.toLowerCase() != "no" )) hideresults = "no";
    if ( searchhideresults.toLowerCase() == "yes" ) searchhideresults = "yes";
    if ( searchhideresults.toLowerCase() == "no" ) searchhideresults = "no";
    searchstate = CS_STATE_IDLE;	    
    oLMSAPI_ref = FindLMSAPI();
    }

    function reset_1766_lang() {
	    var s = GetItemFromURL('Lang');
	    if (s!="")	rfc_1766_lang = s;
	    rfc_1766_lang = rfc_1766_lang.toLowerCase();
	    switch( rfc_1766_lang ){
		    case 'zh-hk':
		    case 'zh-sg':
		    case 'zh-tw':
			    rfc_1766_lang =   'zh-cht';
			    break;
		    case 'zh-mo':
		    case 'zh-cn':
			    rfc_1766_lang =   'zh-chs';
			    break;
		    case 'ja-jp':
			    rfc_1766_lang =   'ja';
			    break;
		    case 'de-de':
			    rfc_1766_lang = 'de';
			    break;
		    case 'ko-kr':
			    rfc_1766_lang =   'ko';
			    break;
	    }

	    wb_rfc_1766_lang = dicts_rfc_1766_lang = rfc_1766_lang;

    }

    function cancelsearch(){
    bail = true;
    }
    

    //!!Validation
    function verifyresultswindow() {
    //debugger;
    try{
	    resultswin = null;
	    var wtfs = window.frames;
	    if ( window.frames.length > 0 ) {
		    if ( document.readyState != "complete" ) {
			    if ( nwinparenttimer != null ) window.clearInterval( nwinparenttimer );
			    //var cb = uniqueID + ".waitforwinparent()";
			    var cb = "waitforwinparent()";
			    nwinparenttimer = window.setInterval( waitforwinparent, c_timer_load_ms );
		    }
		    for ( i = 0; i< wtfs.length; i++ ) {
			    if ( wtfs[i].name == searchresultswindowname ) {
				    resultswin = wtfs[i];
				    break;
			    }
		    }
	    }	
	    if ( resultswin == null ) return false;
	    return true;
	    }
	    catch(e)
	    {
	    }
    }

    function waitforwinparent(){
	    if ( window.parent.document ){
		    if ( window.parent.document.readyState == "complete" ){
			    if ( nwinparenttimer != null ){
				    window.clearInterval( nwinparenttimer );
				    nwinparenttimer = null;
			    }
			    verifyresultswindow();
		    }
	    }
    }

    function verifyresultarea(){    
	    if ( resultswin == null ) return false;
	    if ( resultswin != window ) searchresultsareaidref = idsearchresultsdiv;
	    if ( setresultsarea( searchresultsareaidref ) ) {
		    if ( resultsdiv != null ) return true;
	    }	    
	    return false;
    }

    function waitforresultsdocumentcomplete( cb ){
	    if ( cb == null ){
		    if ( bdebug == true ) alert( "waitforresultsdocumentcomplete - null callback sent to timeout" );
		    return;
	    }
	    if ( !resultswin.document.readyState )
		    alert( "Error - no document readystate obj - need know exists before calling" );
	    else {
		if ( resultswin.document.readyState != "complete" ) {
			    var cb2 = "waitforresultsdocumentcomplete(" + cb + ")";
			    window.setTimeout( cb2, 200 );
		    } else window.setTimeout( cb, 100 );
	    }
    }

    //!!Form methods
    function settypeselect( in_win, idin ) {
	    if ( !in_win ) return false;
	    var validform = in_win.document.all.item( idin );
	    if ( validform ) {
		    if ( validform.tagName.toLowerCase() == "select" ) {
			    typeselect = validform;
			    return true;
		    }
	    }
	    return false;
    }

    function setinput( in_win, idin ) {
	    if ( !in_win ) return false;	
	    var validform = in_win.document.all.item( idin );
	    if ( validform ) {
		    if ( validform.tagName.toLowerCase() == "input" ) {
			    inputform = validform;
			    return true;
		    }
	    }
	    return false;
	}
	SearchAPI.prototype.navigatetoadvancedsearch = function(in_win_name) {

	    searchresultswindowname = in_win_name;
	    if (verifyresultswindow()) {
	        resultswin.location.href = searchadvancedpageurl;
                if(resultswin.show_advanced())  resultswin.location.reload();
	        }
	}

    SearchAPI.prototype.setform=function( win_results_name, id_results_area, in_win, id_input, id_type, surls ){
	    if ( in_win == null ) return false;
	    if ( setinput( in_win, id_input ) == false ) return false;
	    if ( id_type != null ){
		    if ( settypeselect( in_win, id_type ) == false ) return false;
	    }	    
	    if ( surls.length < 1 ) return false;	    
	   
	    ft_indexes = surls;
	    searchresultswindowname = win_results_name;
	    searchresultsareaidref = id_results_area;	
	    if ( !verifyresultswindow() ) return false;
	    if ( !verifyresultarea() ) return false;	    
	    return true;
    }

    function setresultsarea( idin ) {
	    var bok = new Boolean( false );
	    var validdiv = resultswin.document.getElementById( idin );
	    if ( validdiv ) {
		    if ( validdiv.tagName.toLowerCase() == "div" ) {
			    resultsdiv = validdiv;
			    bok = true;
		    }
	    }
	    if ( bok == false ) {
		    var rdiv = resultswin.document.createElement("div");
		    if ( rdiv ) {
			    searchresultsareaidref = idsearchresultsdiv;
			    rdiv.id = searchresultsareaidref;
			    rdiv = resultswin.document.body.appendChild(rdiv);
			    resultsdiv = rdiv;
			    bok = true;
		    }
	    }
	    return bok;
    }

    
    //!! Procedural entry point
    SearchAPI.prototype.ftsearch=function( do_results_page_load ){
    //debugger;
    try{    
	    if ( searchstate == CS_STATE_UNINITIALIZED ) { m_SearchObj.init_Search(); }
	    if ( resultswin != null ) {
		    searchstate = CS_STATE_ACTIVE;
		    if ( nwaitnsearch != null ) window.clearInterval( nwaitnsearch );
		    if ( do_results_page_load == true ) resultswin.location.href = searchresultspageurl;
//		    if(window.ActiveXObject)
//	            var cb = uniqueID + ".waitandsearch()";		  		
//	        else
//                var cb = "waitandsearch()";
		    nwaitnsearch = window.setInterval( waitandsearch, c_timer_speeds_ms );
//            waitandsearch();
	    }
	    }
	    catch(e)
	    {
	        alert('Error in ftsearch' + e);
	    }
    }
    
    
    function isLcdsContent() {
	    if (typeof(courseIsLcdsContent) == "undefined") {
		    var absolutePlatformManifestUri = gate_results[0].url_base + RELATIVE_PLATFORM_MANIFEST_URI;
		    try {
			    var platformManifestXmlDom = xml_load( absolutePlatformManifestUri, bdebug );
			    if (platformManifestXmlDom != null) {
				    courseIsLcdsContent = true;
			    } else {
				    courseIsLcdsContent = false;
			    }
		    } catch (e) {
			    courseIsLcdsContent = false;
		    }
	    }
	    return courseIsLcdsContent;
    }

    function waitandsearch() {
        try{
	        if ( verifyresultswindow() ) {
		    if ( resultswin.document.readyState == "complete" ) {
			        if ( verifyresultarea() ) {
				        if ( typeof resultswin.search_begin == "function" ) {
					        if ( nwaitnsearch != null ) {
						        window.clearInterval( nwaitnsearch );
						        nwaitnsearch = null;
					        }	
					        dosearch();
				        }
			        }
		        }
	        }
        }
        catch(e)
        {
            alert('Exception in waitandsearch '+e.description);
        }
    }
function trim(strToTrim)
{
    return strToTrim.replace(/^\s*([\S\s]*)\b\s*$/, '$1');
}
    function dosearch() {
//	    debugger;
	    bail = false;
	    resultsdiv.innerHTML = "";
	    containing = "";
	    searchcount = 0;
	    searchtype = ST_ALL_WORDS;
	    last_results_page_items = "";
	    number_of_viewed_indexes = 0;
	    left_number_search_results = 0;
	    gate_results_last_index  = 0;
	    total_number_or_results = 0;
	    gate_results = null;
	    gate_query = null;
	    if(window.ActiveXObject)
	    {
	        resultswin.detachEvent("onunload", cancelsearch);
	        resultswin.attachEvent("onunload", cancelsearch);
	    }
	    else
	    {
	        resultswin.removeEventListener("beforeunload", cancelsearch,false);
	        resultswin.addEventListener("beforeunload", cancelsearch,false);
	    }	   
	    containing = normalspace( trim( inputform.value ));
	    
	    try {
		    if ( typeselect ) searchtype = parseInt( typeselect.value );
	    } catch (e) {
		    //if access error don't change it - we're changing views anyway.
	    }
	    
	    if (( searchtype != ST_BOOLEAN ) && ( searchtype != ST_ALL_WORDS ) && ( searchtype != ST_ANY_WORDS ) && ( searchtype != ST_EXACT )) searchtype = ST_ALL_WORDS;
	    if ( ft_indexes != null ) {
		    if (( containing != "" ) && ( ft_indexes.length > 0 )) {
			    var search = new searchobj( rfc_1766_lang );			    
			    if ( search != null ) {	    
				    gate_results = search.gatedsearch( containing, ft_indexes, searchtype, maxresults );
				    if (( search.lastgate != null ) && ( gate_results != null )){
					    filterforliveurls();
					    if ( gate_results.length > 0 ){
						    var search_id = newUID();
						    gate_query = new gate_query_obj( containing, search_id, searchtype, casesensitive, search.lastgate );
						    if ( gate_query.valid ) {
							    resultswin.search_begin();
							    search_gate_results_next();
							    return;
						    }
					    }
				    }
			    }
		    }
	    }
	    send_state_complete();
	    return;
    }

    function filterforliveurls(){

	    if ( oLMSAPI_ref == null ) return;
	    if ( gate_results == null ) return;

	    try {
		    for( var i = 0; i < gate_results.length; i++ ){
			    var url = make_full_url( gate_results[i].url_base + "/" + gate_results[i].url )
			    var sItemID = oLMSAPI_ref.LRNResolveUrlToItemID( url );
			    if (sItemID == "" || oLMSAPI_ref.LRNIsItemAvailable( sItemID ) == false ){
				    remove_gate_result( i )
				    i--;
			    }
		    }
	    } catch ( e ) {}

    }

    //!!Viewer support
    function getviewerhref(){
	    var sURL = viewerwindow.location.href;
	    var loc_hash = viewerwindow.location.hash;
	    var loc_search = viewerwindow.location.search;
	    var nPos = -1;

	    if (loc_search){
		    nPos = sURL.indexOf(loc_search);
		    if (nPos != -1)	sURL = sURL.substring(0,nPos);
	    }

	    if (loc_hash){
		    nPos = sURL.indexOf(loc_hash);
		    if (nPos != -1)	sURL = sURL.substring(0,nPos);
	    }

	    return sURL;
    }

    //!!Searching
    function wait_and_search_gate_results( search_id ) {
	    if ( bail == true ) return;
	    if ( gate_results == null ) return;
	    if ( total_number_or_results < 1 ) this.total_number_or_results = gate_results.length;
	    if (( number_of_viewed_indexes < max_results_a_page ) && ( gate_results_last_index < gate_results.length )) {
		    if (( resultswin.document.readyState != "complete" ) || ( g_searchingfile == true )) {
			    var cb = "wait_and_search_gate_results('" + search_id + "')";
			    window.setTimeout( cb, c_timer_speeds_ms );
		    } else {
			    searchcount++;
			    var prev_len = gate_results.length;

			    var url = gate_results[gate_results_last_index].url_base + "/" + gate_results[gate_results_last_index].url;
			    var collection_title = gate_results[gate_results_last_index].coll_title;
			    if ( gate_results[gate_results_last_index].doctype == 1 ) {	//html docs
				    var fullurl = make_full_url( url );
				    stokenized = escape(makematchedtokenstring( gate_query ));
				    var smatchcase = gate_query.casesensitive.toString();
				    this.number_of_viewed_indexes++;
				    writeresult( collection_title, gate_results[this.gate_results_last_index].title, "", fullurl, stokenized, smatchcase );
			    } else {
				    searchresultnode( url, gate_results_last_index, search_id );
			    }

			    if ( gate_results.length == prev_len ) gate_results_last_index++;
			    this.left_number_search_results = this.total_number_or_results - this.gate_results_last_index;
//			    var cb = "wait_and_search_gate_results(\'" + search_id + "\')";
//			    window.setTimeout( cb, c_timer_speeds_ms );
                wait_and_search_gate_results(search_id);

		    }
	    } else {
		    if (  resultswin != null ) {
			    send_state_complete();
			    last_results_page_items = resultsdiv.innerHTML;
		    }
	    }
    }

    function send_state_complete(){
	    resultswin.update_page_controls();
	    searchstate = CS_STATE_IDLE;
    }

    function remove_gate_result( index ){
	    gate_results = array_remove_item( index, gate_results );
	    this.total_number_or_results = gate_results.length;
    }

    function prep_search_prev_next( stype, in_index ){

	    if ( verifyresultarea() == false ) return false;
	    if ( gate_results == null ) return false;
	    if ( gate_results.length < 1 ) return false;
	    if ( gate_query == null ) return false;
	    if ( stype == "prev" ) {
		    if ( gate_results_last_index - ( max_results_a_page + number_of_viewed_indexes ) < 0 ) return false;
	    } else {
		    if ( stype == "next" ){
			    if ( gate_results_last_index >= gate_results.length ) return false;
		    } else {
			    if ( in_index == null ) return false;
			    if ( in_index >= gate_results.length ) return false;
			    if ( in_index < 0 ) return false;
		    }
	    }
	    resultsdiv.innerHTML = "";
	    gate_query.search_id = newUID();
	    bail = false;
	    return true;
    }
    SearchAPI.prototype.API_search_gate_results_previous=function(){
        search_gate_results_previous();
    }
    function search_gate_results_previous(){
	    if ( prep_search_prev_next( "prev" ) == false ) {
		    send_state_complete(); return;
	    }
	    gate_results_last_index = gate_results_last_index - ( max_results_a_page + number_of_viewed_indexes );
	    number_of_viewed_indexes = 0;
	    wait_and_search_gate_results( gate_query.search_id );
    }

    SearchAPI.prototype.API_search_gate_results_next=function(){
        search_gate_results_next();
    }
    function search_gate_results_next(){
	    if ( prep_search_prev_next( "next" ) == false ) {
		    send_state_complete(); return;
	    }
	    gate_query.reset_matches();
	    number_of_viewed_indexes = 0;
	    wait_and_search_gate_results( gate_query.search_id );
    }
    SearchAPI.prototype.API_search_gate_results_indexof=function( in_index ){
        return search_gate_results_indexof(in_index);
    }
    function search_gate_results_indexof( in_index ){
	    if ( prep_search_prev_next( "index", in_index ) == false ) {
		    send_state_complete(); return;
	    }
	    gate_results_last_index = in_index;
	    return search_gate_results_next();
    }
    SearchAPI.prototype.API_get_page_indexes=function(){
        return get_page_indexes();
    }
    function get_page_indexes(){
	    var ret_array = new Array();
	    var num_pages = parseInt( total_number_or_results / max_results_a_page );
	    if (( total_number_or_results % max_results_a_page ) != 0 ) num_pages++;
	    for( var i = 0; i < num_pages; i++ )
		    ret_array[ret_array.length] = i * max_results_a_page;
	    return ret_array;
    }
    SearchAPI.prototype.API_highlightcontentdhtml=function(tokens,smatchcase){
        if(verifyresultswindow())
            highlightcontentdhtml(tokens,smatchcase);
        else return;
    }
    function searchresultnode( url, gate_index, quid ) {
	    g_searchingfile = true;
	    var bqready = true;
	    if ( bail == true ) return;
	    if ( gate_query == null ) bqready = false;
	    if ( !gate_query.search_id ) bqready = false;
	    if (  gate_query.search_id != quid ) bqready = false;
	    if ( bqready == true ) {
		    if ( url ) {
			    url = make_full_url( url );
			    if ( loaddoc( url ) ) searchcontext( xmlswap, url, gate_index );
			    else remove_gate_result( gate_index );
		    }
	    }
	    g_searchingfile = false;
    }

    function make_full_url( in_rel_url ){

	    var url = unescape( in_rel_url );
	    if ( isrelativepath( url ) ) {
		    var root = getbasepath( getviewerhref() );
		    if ( root != "" ) {
			    var b = "";
			    b = url.substr(0, 1 );
			    if (( b == "\\" ) || ( b == "/" ) ) url = root + url;
			    else url = root + "/" + url;
		    }
	    }
	    return url;
    }

    function searchcontext( doc, url, gate_index ) {
	    if ( bail == true ) return;
	    var mp = loadmetatpaths( doc, url, this.searchxpathtitle, this.searchxpathelements );
	    if ( mp.searchcontexts.length > 0 ) {
		    var res = -1;
		    gate_query.reset_matches();
		    for ( var j = 0; j < mp.searchcontexts.length; j++ ) {
			    res = searchswap( doc, gate_index, mp.searchcontexts[j], mp.searchcontexttitles, mp.searchkeywords, mp.searchfilter, mp.idattribute );
			    if ( res != -1 ) break;
		    }
		    if ( res == -1 ) remove_gate_result( gate_index );
	    }
    }

    function searchkeywords( nodelist ) {
	    var blast = null;
	    if ( nodelist.length < 1 ) return false;
	    for( var i = 0; i < nodelist.length; i++ ){
		    var keywords =  new keywordsobj( nodelist[i] );
		    if ( keywords != null ) {
			    var btemp = gate_query.update_with_keywords( keywords );
			    if ( btemp != false ) blast = nodelist[i];
		    }
	    }
	    return blast;
    }

    function searchswap( doc, gate_index, xpat, xpathtitle, xpathkeywords, xpathsfilters, id_att ){
	    var r = -1;
	    var lastmatchnode = null;
	    var b = new Boolean( false );
    //keyword search
	    if ( xpathkeywords != "" ) {
		    var knodes = null;
		    knodes = getkeywords( doc, xpathkeywords );
		    if ( knodes != null ) {
			    if ( knodes.length > 0 ) {
				    lastmatchnode = searchkeywords( knodes );
				    b = gate_query.ismatched();
				    for( var k=0; k < knodes.length; k++ )
					    knodes[k].text = "";
			    }
		    }
	    }
    //prefilter search
	    if ( xpathsfilters != "" ){
		    var g_nodes = doc.selectNodes( xpathsfilters );
		    if ( g_nodes != null ){
			    if ( g_nodes.length > 0 ){
				    for( var g=0; g < g_nodes.length; g++ )
				    {
				        try{g_nodes[g].text = "";}catch(ex){}
					}
			    }
		    }
	    }
    //full-text search
        var txt = "";
	    var konly = new Boolean( false );
	    if (( b != true ) && ( xpat != "" )) {
		    var ns = doc.selectNodes( xpat );
		    if ( ns ) {
			    for ( var y = 0; y < ns.length; y++ ){
			        var allTags = ns[y].getElementsByTagName("*");
                    for(var tagCount = 0; tagCount < allTags.length; tagCount++){
                        if(allTags[tagCount].childNodes.length == 1)
                            txt = txt + allTags[tagCount].text + " " ;
                    }
				    gate_query.update_match_locations( txt );
				    b = gate_query.ismatched();
				    if ( b == true ) {
					    number_of_viewed_indexes++;
					    lastmatchnode = ns[y];
					    break;
				    }
			    }
		    }
	    } else konly = true;
    //verify and return results
	    if ( lastmatchnode != null ){
		    var chunk;
		    var titlehost = null;
		    var display = getdisplaytext( lastmatchnode, xpathtitle, titlehost );
		    if (( konly == true ) && ( titlehost != null )) chunk = grabchunk( titlehost.text, gate_query );
		    else chunk = grabchunk( txt, gate_query );
		    var shash = getidhash( lastmatchnode, id_att );
		    if ( shash == "" ) {
			    if ( gate_query.lasthash != null ){
				    if( gate_query.lasthash != "" ) shash = "#" + gate_query.lasthash;
			    }
		    }
		    var stokenized = escape(makematchedtokenstring( gate_query, false ));
		    var url = doc.url + shash;
		    var smatchcase = gate_query.casesensitive.toString();
		    writeresult( gate_results[gate_index].coll_title, display, chunk, url, stokenized, smatchcase );
		    r = 1;
	    }
	    return r;
    }

    function makematchedtokenstring( q, boverride ){
	    var str = "";
	    var bfirst = false;

	    for( var i = 0; i < q.gatetoks.length; i++ ){
		    var badd = true;
		    if (( q.matches[i] == false ) && ( boverride == false ))	badd = false;
		    if ( trim( q.gatetoks[i] ) == "" ) badd = false;
		    if ( badd == true ) {
			    if ( bfirst == false ) {
				    str += q.gatetoks[i];
				    bfirst = true;
			    } else str += String.fromCharCode( systemtokenizerid ) + q.gatetoks[i];
			    var other1 = buildvoicehalfwidthkana( q.gatetoks[i] );
			    var comp = vbCompareString( other1, q.gatetoks[i], true );
			    if ( comp != 0 ) str += String.fromCharCode( systemtokenizerid ) + other1;
		    }
	    }
	    return str;
    }

    function writeresult( collection_title, display, chunk, url, tokens, smatchcase ){
		    if ( bail == true ) return;
		if ( resultswin.document.readyState != "complete" ){
			    var cb ="writeresult(" + collection_title + "," + display + "," + chunk + "," + url + "," + stokenized + "," + smatchcase + " )";
			    waitforresultsdocumentcomplete( cb );
		    }
		    setresultsarea( this.searchresultsareaidref );
		    var sresultindexstr = getlocalintegerstring(this.gate_results_last_index+1, this.rfc_1766_lang );
		    var oresult = resultswin.document.createElement("div");
		    if ( !oresult ) return;
		    oresult.className = "searchresult";
		    if( searchhideresults != "no" ) oresult.style.display = "none";
		    var oresultspanindex = resultswin.document.createElement("span");
		    if ( !oresultspanindex ) return;
		    oresultspanindex.className = "searchresultsindex";
		    oresultspanindex.innerText = sresultindexstr + c_results_numeric_delim;
		    var oresultanchor = resultswin.document.createElement("a");
		    if ( !oresultanchor ) return;
		    oresultanchor.className = "searchresultanchor";
		    oresultanchor.matchcase = smatchcase;
		    oresultanchor.searchtokens = tokens;
		    oresultanchor.setAttribute("urn", url + "#expandreadmore");
		    oresultanchor.innerHTML = display;
		    oresultanchor.tabIndex = (0).toString();
		    var oresultcollectioninfo = resultswin.document.createElement("div");
		    oresult.appendChild( oresultspanindex );
		    oresult.appendChild( oresultanchor );
		    if (typeof  isLcdsContent != "undefined") {
			    if (isLcdsContent() == true) {
                    oresultanchor.removeAttribute("href");
                    oresultanchor.style.cursor = "pointer";
                    oresultanchor.name = absoluteUriToLcdsLaunchableUri(url);
//                    oresultanchor.setAttribute("current_TopicNode_URI", absoluteUriToLcdsLaunchableUri(url));//custom attribute is not supported by Firefox
			    }
		    }

		    var oresultchunk = null;
		    if ( chunk != "" ) {
			    var oresultchunk = resultswin.document.createElement("div");
			    if ( !oresultchunk ) return;
			    oresultchunk.className = "searchcontextchunk";
			    oresultchunk.innerHTML = chunk;
			    oresult.appendChild( oresultchunk );
		    }


		    if ( collection_title != null ){
			    collection_title = normalspace( trim( collection_title ) );
			    if (( collection_title != "" ) || ( oresultcollectioninfo != null ) ){
				    oresultcollectioninfo.className = "resultcollectioninfo";
				    oresultcollectioninfo.innerHTML = "<table class='resultsourcetable' cellpadding='2' cellspacing='2' ><tr><td>" + c_results_collection_link_delim + "</td><td>" + collection_title + "</tr></td></table>";

				    oresult.appendChild( oresultcollectioninfo );
			    }
		    }

		    try {
			    if ( !resultsdiv ) return;
			    var res = resultsdiv.appendChild( oresult );
			    res.style.display = "block";
			    resultswin.handleresultchange('search');
		        if ( oresultanchor != null )	dhtmlhighlight( resultswin, tokens, smatchcase, oresultanchor );
		        if ( oresultchunk != null )	dhtmlhighlight( resultswin, tokens, smatchcase, oresultchunk );
		    } catch (e) {
			    if ( bdebug == true ) alert("un-handled error ( client search - writeresult )");
			    bail = true;
			    return;
		    }
    }

    function getidhash( curelm, id_att ){
	    var shash = curelm.getAttribute( id_att );
	    if ( shash == null ) 	{ return ""; }
	    if ( shash == "" ) 	{ return ""; }
	    return "#" + shash;
    }

    function getdisplaytext( curelm, xpath, titlehost ){
	    var elm = curelm;
	    var display = "";
	    if ( !elm ) return "???";
	    var title = elm.getAttribute("title");
	    if ( title != null ) {display = normalspace(trim( title ));return display;}
	    title = elm.selectSingleNode( xpath );
	    if ( title != null ) display = normalspace(trim( title.text ));
	    if ( display == "" ) {
		    var node = elm.parentNode;
		    while( node != null ) {
			    if ( node.nodeType == 1 ) {
				    title = node.selectSingleNode( xpath );
				    if ( title != null ) display = normalspace(trim( title.text ));
			    }
			    if ( display != "" ) {
				    titlehost = node;
				    node = null;
			    } else node = node.parentNode;
		    }
	    }
	    if ( display == "" ){
		    var d = elm.ownerDocument;
		    if ( d != null ) {
			    title = elm.selectSingleNode( searchxpathtitle );
			    if ( title != null ) {
				    display = normalspace(trim( title.text ));
				    titlehost = null;
			    }
		    }
	    }
	    if ( display == "" ) {
		    var txt = elm.text;
		    var l = txt.length;
		    if ( txt.length < c_max_result_text_size  ) display = txt.substr( 0, txt.length - 1);
		    else display = txt.substr( 0, c_max_result_text_size);
		    display = normalspace(trim( display ));
		    titlehost = null;
	    }
	    if ( display == "" ) return "???";
	    return display;
    }

    function grabchunk( txt, gq ){
	    var r = gq.matchlocs[0];
	    if (!r) return "";
	    if (!txt) return "";
	    if (txt == "") return "";
	    var sdelim = ""; var edelim = "";
	    var sb = 0; var se = 0;
	    var tlen = 0; var dif = 0;
	    var chunk = "";
	    var maxsize = c_context_size / 2;
	    tlen = txt.length;
	    if ( tlen < 1 ) return "???";
	    if ( tlen <= c_context_size ) return txt;
	    if ( r < 2 ) return  txt.substr( 0, maxsize * 2 );
	    sb = r - maxsize;
	    if ( sb < 0 ) sb = 0;
	    se = maxsize * 2;
	    sdelim = edelim = c_result_partial_context;
	    var l_amt, r_amt, l_dif, r_dif;
	    var l_amt = r;
	    var r_amt = tlen - r;
	    l_dif = 0;
	    r_dif = 0;
	    if ( l_amt < maxsize )	l_dif = maxsize - l_amt;
	    if ( r_amt < maxsize )	r_dif = maxsize - r_amt;
	    if (( r_dif != 0 ) && ( l_dif != 0 )) return sdelim + txt + edelim;
	    if (( r_dif != 0 ) || ( l_dif != 0 )) {
		    if ( r_dif == 0 ) {
			    if ( r_amt >= l_dif + maxsize ) se = se + l_dif;
		    } else {
			    if ( l_amt >= r_dif + maxsize ) sb = sb - r_dif;
		    }
	    }
	    chunk = sdelim + txt.substr( sb, se ) + edelim;
	    var new_r = 0;
	    new_r = r - sb + sdelim.length;
	    return chunk;
    }

    //!!Keywords
    function keywordsobj( node ){
	    this.data = node.text;
	    this.delim = node.getAttribute( "kdelim" );
	    this.lang = node.getAttribute( "lang" );
	    this.id = node.getAttribute( "id" );
	    if ( this.delim == null ) { this == null; return; } if ( this.delim == "" ) { this == null; return; }
	    if ( this.lang == null ) this.lang = this.rfc_1766_lang; if ( this.lang == "" ) this.lang = this.rfc_1766_lang;
	    if ( this.id == null ) this.id = "";
	    var ins = this.data.split(this.delim);
	    if ( ins.length < 1 ) { this == null; return; }
	    this.kinputs = new Array();
	    for( var i = 0; i < ins.length; i++ ) {
		    var inp = normalspace( trim( ins[i] ));
		    if ( inp != "" ){
			    var kwio = new kinputobj( inp );
			    if ( kwio.tokens != null ) this.kinputs[this.kinputs.length] = kwio;
		    }
	    }
    }

    function kinputobj( data ) {
	    var out_scids = new Array();
	    var out_mixed_case = new Array();
	    var out_tok_exp_ops = new Array();
	    var toks = create_tokens( data, out_scids, out_mixed_case, out_tok_exp_ops );
	    if ( toks.length > 0  ) this.tokens = toks;
	    else this.tokens = null;
    }

    function gate_query_obj( input_string, in_search_id, in_searchtype, in_casesensitive, in_gate ){
	    this.valid = false;
	    this.input = input_string;
	    this.srchtype = in_searchtype;
	    this.search_id = in_search_id;
	    this.gate = in_gate;
	    this.gatetoks = new Array();
	    this.gateexps = new Array();
	    this.matches = new Array();
	    this.matchlocs = new Array();
	    this.lasthash = "";
	    this.ver = (window.ActiveXObject)?Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion()):5.6;
	    this.casesensitive = in_casesensitive;
	    this.globals = "";
	    if ( this.srchtype == ST_EXACT ) this.casesensitive = true;
	    if ( this.casesensitive == false ) this.globals = "i" + this.globals;
	    if ( this.ver >= 5.5 ) this.globals = this.globals + "m";

	    this.reset_matches = function(){
		    for( var i = 0; i < this.matches.length; i++ ){
			    this.matches[i] = false;
			    this.matchlocs[i] = -1;
		    }
		    this.lasthash = "";
	    }

	    this.populate_tokens = function(){
		    if( this.gate == null ) return;
		    this.gatetoks.length = 0;
		    this.gateexps.length = 0;
		    this.matches.length = 0;
		    this.matchlocs.length = 0;
		    if ( this.srchtype == ST_EXACT ) {
			    if ( this.input != "" ) {
				    this.gatetoks[0] = this.input;
				    this.gateexps[0] = risswwe( grep_escape( this.input ) );
				    var i_b = get_grep_bounds( this.input, rfc_1766_lang );
				    switch( i_b ){
					    case _BOUNDS_:	this.gateexps[0] = "\\b" + this.gateexps[0] + "\\b"; break;
					    case _JOIN_L:	this.gateexps[0] = this.gateexps[0] + "\\b"; break;
					    case _JOIN_R:	this.gateexps[0] = "\\b" + this.gateexps[0]; break;
				    }
				    this.matches[0] = new Boolean( false );
				    this.matchlocs[0] = -1;
			    }
		    } else this.get_child_toks( this.gate );
		    if ( this.gatetoks.length > 0 ) this.valid = true;
	    }

	    this.get_child_toks = function( in_parent_gate ){
		    if ( in_parent_gate.terminator == true ){
			    for( var i = 0; i < in_parent_gate.expressions.length; i++ ) {
				    this.gatetoks[this.gatetoks.length] = in_parent_gate.exp_toks[i];
				    this.gateexps[this.gateexps.length] = in_parent_gate.expressions[i];
				    this.matches[this.matches.length] = new Boolean( false );
				    this.matchlocs[this.matchlocs.length] = -1;
			    }
		    } else {
			    if ( in_parent_gate.gate_l != null ) this.get_child_toks( in_parent_gate.gate_l );
			    if (( in_parent_gate.gate_r != null ) && ( in_parent_gate.type != Verbage.search_gate_type._NOT )) this.get_child_toks( in_parent_gate.gate_r );
		    }
	    }

	    this.populate_tokens();
	    this.update_match_locations = function( txt ){
		    var chunks = new Array();
		    var linefeed = String.fromCharCode(10);
		    chunks[0] = txt;
		    if ( this.ver < 5.5 ) chunks = txt.split(linefeed);
		    var totaltxtlen = txt.length;
		    var offset = 0;
		    for ( var z = 0; z < chunks.length; z++ ) {
			    for( var a = 0; a < this.gateexps.length; a++ ){
				    if ( this.matches[a] == true ) continue;
				    var exp = new RegExp(this.gateexps[a],this.globals);
				    if ( this.ver >= 5.5 ) exp.compile(this.gateexps[a],this.globals);
				    var r = chunks[z].match(exp);
				    if ( r == null ) continue;
				    if ( r.length < 1 ) continue;
				    this.matches[a] = true;
				    this.matchlocs[a] = r.index + offset;
			    }
			    if ( z != chunks.length-1) offset += chunks[z].length + 1;
			    else offset += chunks[z].length;
		    }
	    }

	    this.update_with_keywords = function( keywords ){
		    var bret = new Boolean( false );
		    if ( this.srchtype == ST_EXACT ) return bret;
		    if ( keywords == null ) return bret;
		    if ( keywords.kinputs == null ) return bret;
		    for( var j = 0; j < keywords.kinputs.length; j++ ){
			    var keyword = keywords.kinputs[j];
			    var initind = -1;
			    var bmatched = new Boolean ( false );
			    var inc = -1;
			    for ( var k = 0; k < keyword.tokens.length; k++ ) {
				    if ( bmatched == true ) break;
				    var tok = keyword.tokens[k];
				    for ( var l = 0; l < this.gatetoks.length; l++ ) {
					    if ( this.gatetoks[l] == c_fold_c( tok ) ){
						    bmatched = true;
						    initind = l;
						    break;
					    }
				    }
				    if ( initind != -1 ) {
					    inc = k + 1;
					    if ( inc < keyword.tokens.length ) {
						    if ( ( initind + 1 ) < this.gatetoks.length ) {
							    for ( var l = initind + 1; l < this.gatetoks.length; l++ ) {
								    tok = keyword.tokens[inc];
								    if ( this.gatetoks[l] != c_fold_c( tok ) ) {
									    bmatched = false;
									    break;
								    }
								    if ( inc >= keyword.tokens.length ) break;
								    inc++;
							    }
						    }
					    }
				    }
			    }
			    if ( bmatched == true ) {
				    for ( m = initind; m < inc + 1; m++ ) {
					    if ( this.matches[m] ) {
						    this.matches[m] = true;
						    if (( keywords.id != null ) || ( keywords.id != "" )) {
							    this.lasthash = keywords.id;
							    this.matchlocs[m] = 0;
						    }
					    }
				    }
				    bret = true;
				    lastmatchindex = 0;
				    break;
			    }
		    }
		    return bret;
	    }

	    this.ismatched = function(){
		    var nmatch = 1;
		    var allbad = new Boolean( true );
		    for ( var i = 0; i < this.matches.length; i++ ){
			    if ( this.matches[i] == false ) nmatch = 0;
			    else allbad = false;
		    }
		    if ( allbad == true ) nmatch = -1;
		    var bret = new Boolean( false );
		    switch( this.srchtype ) {
			    case ST_ALL_WORDS:
				    if ( nmatch == 1 ) bret = true;
				    break;
			    case ST_BOOLEAN:
			    case ST_ANY_WORDS:
			    case ST_EXACT:
				    if ( nmatch > -1 ) bret = true;
				    break;
		    }
		    return bret;
	    }
    }

    //!!Utility functions
    function loaddoc( srcfile ){
	    if ( xmlswap != null ) delete xmlswap;
	    xmlswap = xml_load( srcfile, bdebug );

	    if (typeof isLcdsContent != "undefined") {
		    if (isLcdsContent() == true) {
			    applyXslToXml(xmlswap);
		    }
	    }

	    if ( xmlswap == null ) return false
	    return true;
    }

    //!!Localization functions
    function getlocalintegerstring( num, lang ){
	    switch( lang ) {
		    default: return num.toString();
	    }
    }
}
// SIG // Begin signature block
// SIG // MIIbDwYJKoZIhvcNAQcCoIIbADCCGvwCAQExCzAJBgUr
// SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
// SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB
// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFM5QmPrgclAv
// SIG // Io2TmZ5Bp2U6fhcuoIIV6jCCBIUwggNtoAMCAQICCmEF
// SIG // 9x4AAAAAADIwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UE
// SIG // BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
// SIG // BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
// SIG // b3Jwb3JhdGlvbjEjMCEGA1UEAxMaTWljcm9zb2Z0IENv
// SIG // ZGUgU2lnbmluZyBQQ0EwHhcNMDkwNzEzMjMwMDE4WhcN
// SIG // MTAxMDEzMjMxMDE4WjCBgzELMAkGA1UEBhMCVVMxEzAR
// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
// SIG // bjENMAsGA1UECxMETU9QUjEeMBwGA1UEAxMVTWljcm9z
// SIG // b2Z0IENvcnBvcmF0aW9uMIIBIjANBgkqhkiG9w0BAQEF
// SIG // AAOCAQ8AMIIBCgKCAQEAtYypnJSEYRrMLiLEoJNkCd6F
// SIG // obCQXfzJbGi18e/8jmv0+KBu11HeYKMnY9T237ZM0kUL
// SIG // pz3Yb/7tpxhj0x/GgdS/BzeXQCt/519aNdmTT6vzKpLw
// SIG // po2B7AUk3Nu4YWNTYQI1ONa49e57VKbJWDXp9BXv2gds
// SIG // BS1NpLa6mzu4MTB+RbypoSU5DEOkRzuXnCBEcjfPUKBN
// SIG // TfTDZdxE0Qg7ON0+xRdsRsetcyTAj4nB6uq6zWipEtZY
// SIG // DFMWDP45A9aB8j5cV/N622bhBxjZGQMU9uZFmSpRTJDX
// SIG // Wu+vtzsMKU1tIK4Ht5Iu6GnKnzBC58MyigsiSjLonAzG
// SIG // UQMmAW2ScwIDAQABo4IBAjCB/zATBgNVHSUEDDAKBggr
// SIG // BgEFBQcDAzAdBgNVHQ4EFgQUh4G33+76d/pZBWM3BArX
// SIG // 6dqg4OAwDgYDVR0PAQH/BAQDAgeAMB8GA1UdIwQYMBaA
// SIG // FFdFdBxdsPbIQwXgjFQtjzKn/kiWMEkGA1UdHwRCMEAw
// SIG // PqA8oDqGOGh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9w
// SIG // a2kvY3JsL3Byb2R1Y3RzL0NvZGVTaWdQQ0EuY3JsME0G
// SIG // CCsGAQUFBwEBBEEwPzA9BggrBgEFBQcwAoYxaHR0cDov
// SIG // L3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9Db2Rl
// SIG // U2lnUENBLmNydDANBgkqhkiG9w0BAQUFAAOCAQEANiGE
// SIG // 9Y+DIU2HqD+L58WkD0wwbll0mwuXdBapsfNwpK/CDDMk
// SIG // 86BK+sHkIca22epcW5Fh9yJt/zH8F07XzUDjndLltNL6
// SIG // jWwH2neayivuDVlHzwTCEGf66ulDO7fm0ZzZjiNgbhKb
// SIG // w9l+XFcy3ZQN333FSJJNSHa3osBTlT78OqOTfPKFBMfG
// SIG // hTiXNvgSkyIAmU55r5brWiCDrNBcWjCwAOJrOY8kido9
// SIG // DKRGeWI2U2rXyc2SCPuH5VT1fFnFxHd9sMEsmMeXbEOn
// SIG // +CD4g1RknmD44kqlZ9RJv1SIfVJE81HAJtHFfPCJ1hEJ
// SIG // KMJFRYAdkCK9jqIFPjyzT73XOeCIkzCCBM0wggO1oAMC
// SIG // AQICCmEWtSkAAAAAABAwDQYJKoZIhvcNAQEFBQAwdzEL
// SIG // MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
// SIG // EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
// SIG // c29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWljcm9z
// SIG // b2Z0IFRpbWUtU3RhbXAgUENBMB4XDTEwMDEwNDIxMTIw
// SIG // M1oXDTEzMDEwNDIxMjIwM1owgbYxCzAJBgNVBAYTAlVT
// SIG // MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
// SIG // ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
// SIG // YXRpb24xEDAOBgNVBAsTB25DaXBoZXIxJzAlBgNVBAsT
// SIG // Hm5DaXBoZXIgRFNFIEVTTjpBQ0QzLUFFNjYtRTBCNTEl
// SIG // MCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vy
// SIG // dmljZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
// SIG // ggEBAOMoqtk8Q0L4BhO64sf5wS9ZyzyV51SQbMNYlWKz
// SIG // D2y9g9stWIgIkgvbzXbHVsbg7irTiDtcyqlwowAjIixT
// SIG // OOhQx/EUCY0dy3yL9aYza6/IRl9Le17556bHL0KFZzaN
// SIG // YEryE2bcsDltzhDK3XIFWHKd8gA7ADntJlM+Hs3uUJLN
// SIG // hfQ6/YGhBV8L6UQO79VZQCYoy4JOTivIFCK7cB3kPdH9
// SIG // YHZUTDns73c4i4z+dK/nFvRwMbjLrdTdi7b6AK3tdBSw
// SIG // Rb78ZYjhrfxJ21/R1M50edSNhm+z9ZcHIS2aYcn8uhtM
// SIG // 0uiruVDk0yv0wdlN1kCsFKeIhXNeaD5jt0HUZr0CAwEA
// SIG // AaOCARkwggEVMB0GA1UdDgQWBBTh8K4PDQX8MvMcfRl/
// SIG // z8TFv5FVTTAfBgNVHSMEGDAWgBQjNPjZUkZwCu1A+3b7
// SIG // syuwwzWzDzBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8v
// SIG // Y3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0
// SIG // cy9NaWNyb3NvZnRUaW1lU3RhbXBQQ0EuY3JsMFgGCCsG
// SIG // AQUFBwEBBEwwSjBIBggrBgEFBQcwAoY8aHR0cDovL3d3
// SIG // dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNyb3Nv
// SIG // ZnRUaW1lU3RhbXBQQ0EuY3J0MBMGA1UdJQQMMAoGCCsG
// SIG // AQUFBwMIMA4GA1UdDwEB/wQEAwIGwDANBgkqhkiG9w0B
// SIG // AQUFAAOCAQEAjVtJKFSHyYqpk/6b+I1UcSCdwDiTJym5
// SIG // y5ZTios1tZQ3Fli9nj4XJ19ZL+Rdfh3iWdwH+2IY5WO/
// SIG // 9AvPTdpbMPbImv8mWb8ZwxCy8OMewQyZ2lWSxswS38BY
// SIG // TN2a1B0j+YYSROcmAuiAQWgWVDYdp2WzxDOh46SY2b5i
// SIG // kE+SN7apiBdUSB+dwiLYciq5wzCTPjfsKam5zgvVwskW
// SIG // pudeVQ3MgYRh6SwD25umG1MCOIsKWJEXyHFwFs4uxmP8
// SIG // eZ+DBIK0gecvV2mtuKUfIzZ29hWUhgoe6t0RO2ZE0hVa
// SIG // z6YrKB9OxQpzV0uVA2Ci6+kyfr09j6a9SSopwVcxwBDf
// SIG // UTCCBgcwggPvoAMCAQICCmEWaDQAAAAAABwwDQYJKoZI
// SIG // hvcNAQEFBQAwXzETMBEGCgmSJomT8ixkARkWA2NvbTEZ
// SIG // MBcGCgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UE
// SIG // AxMkTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0
// SIG // aG9yaXR5MB4XDTA3MDQwMzEyNTMwOVoXDTIxMDQwMzEz
// SIG // MDMwOVowdzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
// SIG // c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
// SIG // BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UE
// SIG // AxMYTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBMIIBIjAN
// SIG // BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn6Fssd/b
// SIG // SJIqfGsuGeG94uPFmVEjUK3O3RhOJA/u0afRTK10MCAR
// SIG // 6wfVVJUVSZQbQpKumFwwJtoAa+h7veyJBw/3DgSY8InM
// SIG // H8szJIed8vRnHCz8e+eIHernTqOhwSNTyo36Rc8J0F6v
// SIG // 0LBCBKL5pmyTZ9co3EZTsIbQ5ShGLieshk9VUgzkAyz7
// SIG // apCQMG6H81kwnfp+1pez6CGXfvjSE/MIt1NtUrRFkJ9I
// SIG // AEpHZhEnKWaol+TTBoFKovmEpxFHFAmCn4TtVXj+AZod
// SIG // UAiFABAwRu233iNGu8QtVJ+vHnhBMXfMm987g5OhYQK1
// SIG // HQ2x/PebsgHOIktU//kFw8IgCwIDAQABo4IBqzCCAacw
// SIG // DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUIzT42VJG
// SIG // cArtQPt2+7MrsMM1sw8wCwYDVR0PBAQDAgGGMBAGCSsG
// SIG // AQQBgjcVAQQDAgEAMIGYBgNVHSMEgZAwgY2AFA6sgmBA
// SIG // VieX5SUT/CrhClOVWeSkoWOkYTBfMRMwEQYKCZImiZPy
// SIG // LGQBGRYDY29tMRkwFwYKCZImiZPyLGQBGRYJbWljcm9z
// SIG // b2Z0MS0wKwYDVQQDEyRNaWNyb3NvZnQgUm9vdCBDZXJ0
// SIG // aWZpY2F0ZSBBdXRob3JpdHmCEHmtFqFKoKWtTHNY9AcT
// SIG // LmUwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC5t
// SIG // aWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvbWlj
// SIG // cm9zb2Z0cm9vdGNlcnQuY3JsMFQGCCsGAQUFBwEBBEgw
// SIG // RjBEBggrBgEFBQcwAoY4aHR0cDovL3d3dy5taWNyb3Nv
// SIG // ZnQuY29tL3BraS9jZXJ0cy9NaWNyb3NvZnRSb290Q2Vy
// SIG // dC5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZI
// SIG // hvcNAQEFBQADggIBABCXisNcA0Q23em0rXfbznlRTQGx
// SIG // LnRxW20ME6vOvnuPuC7UEqKMbWK4VwLLTiATUJndekDi
// SIG // V7uvWJoc4R0Bhqy7ePKL0Ow7Ae7ivo8KBciNSOLwUxXd
// SIG // T6uS5OeNatWAweaU8gYvhQPpkSokInD79vzkeJkuDfcH
// SIG // 4nC8GE6djmsKcpW4oTmcZy3FUQ7qYlw/FpiLID/iBxoy
// SIG // +cwxSnYxPStyC8jqcD3/hQoT38IKYY7w17gX606Lf8U1
// SIG // K16jv+u8fQtCe9RTciHuMMq7eGVcWwEXChQO0toUmPU8
// SIG // uWZYsy0v5/mFhsxRVuidcJRsrDlM1PZ5v6oYemIp76Kb
// SIG // KTQGdxpiyT0ebR+C8AvHLLvPQ7Pl+ex9teOkqHQ1uE7F
// SIG // cSMSJnYLPFKMcVpGQxS8s7OwTWfIn0L/gHkhgJ4VMGbo
// SIG // QhJeGsieIiHQQ+kr6bv0SMws1NgygEwmKkgkX1rqVu+m
// SIG // 3pmdyjpvvYEndAYR7nYhv5uCwSdUtrFqPYmhdmG0bqET
// SIG // pr+qR/ASb/2KMmyy/t9RyIwjyWa9nR2HEmQCPS2vWY+4
// SIG // 5CHltbDKY7R4VAXUQS5QrJSwpXirs6CWdRrZkocTdSIv
// SIG // MqgIbqBbjCW/oO+EyiHW6x5PyZruSeD3AWVviQt9yGnI
// SIG // 5m7qp5fOMSn/DsVbXNhNG6HY+i+ePy5VFmvJE6P9MIIG
// SIG // gTCCBGmgAwIBAgIKYRUIJwAAAAAADDANBgkqhkiG9w0B
// SIG // AQUFADBfMRMwEQYKCZImiZPyLGQBGRYDY29tMRkwFwYK
// SIG // CZImiZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQDEyRN
// SIG // aWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3Jp
// SIG // dHkwHhcNMDYwMTI1MjMyMjMyWhcNMTcwMTI1MjMzMjMy
// SIG // WjB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
// SIG // Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
// SIG // TWljcm9zb2Z0IENvcnBvcmF0aW9uMSMwIQYDVQQDExpN
// SIG // aWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQTCCASIwDQYJ
// SIG // KoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ+N34U3jLEG
// SIG // VmY2TtQK6zYjkR6vq41Y6cTPwZ86CiTExMResO4VFMX6
// SIG // PpkzaxlpcvR8BV/lmSVE1zUZipDcKI6QDO/VkGGt3twY
// SIG // cC2DyW+vhSz43bm5MP1xeByD/cipuYJnDXq4wQnCvBaX
// SIG // Vz8cmNNp1zCQkJCNMB/YJtSee4jZ4gntl0lF6wRSgXV7
// SIG // uLUiuC5Wu9fPqU48CoOiqDrFrbYBDmrPIrQjH2zVJ+e3
// SIG // fsG01TKteSUcQobinYX0V9obWS8tJpIpxbPXhaOeYFqU
// SIG // 5nuce16CNEtt/9TuJ9Ci3NGQDM59DhV8iKw0x8BsmIRK
// SIG // yUR5aCjfIoMNuIosSGHi/hECAwEAAaOCAiMwggIfMBAG
// SIG // CSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRXRXQcXbD2
// SIG // yEMF4IxULY8yp/5IljALBgNVHQ8EBAMCAcYwDwYDVR0T
// SIG // AQH/BAUwAwEB/zCBmAYDVR0jBIGQMIGNgBQOrIJgQFYn
// SIG // l+UlE/wq4QpTlVnkpKFjpGEwXzETMBEGCgmSJomT8ixk
// SIG // ARkWA2NvbTEZMBcGCgmSJomT8ixkARkWCW1pY3Jvc29m
// SIG // dDEtMCsGA1UEAxMkTWljcm9zb2Z0IFJvb3QgQ2VydGlm
// SIG // aWNhdGUgQXV0aG9yaXR5ghB5rRahSqClrUxzWPQHEy5l
// SIG // MFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwubWlj
// SIG // cm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL21pY3Jv
// SIG // c29mdHJvb3RjZXJ0LmNybDBUBggrBgEFBQcBAQRIMEYw
// SIG // RAYIKwYBBQUHMAKGOGh0dHA6Ly93d3cubWljcm9zb2Z0
// SIG // LmNvbS9wa2kvY2VydHMvTWljcm9zb2Z0Um9vdENlcnQu
// SIG // Y3J0MHYGA1UdIARvMG0wawYJKwYBBAGCNxUvMF4wXAYI
// SIG // KwYBBQUHAgIwUB5OAEMAbwBwAHkAcgBpAGcAaAB0ACAA
// SIG // qQAgADIAMAAwADYAIABNAGkAYwByAG8AcwBvAGYAdAAg
// SIG // AEMAbwByAHAAbwByAGEAdABpAG8AbgAuMBMGA1UdJQQM
// SIG // MAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4ICAQAw
// SIG // vLAgpGKgp+85JmE93KzGmdCGxC71gzJlXiI+m9aG+Oi2
// SIG // n8qL1jt1C6GRPkzdZHSMSfKIjBhnbP4VZka4OkZCl8iR
// SIG // N9Qksees0+pBFIN308lPBV+jFFK/lqQvPlZbEHXOU8PO
// SIG // BVRptGXJJKUP4SW4GrlN5QK5UB5Ps5gMHZUC7iJZrSLL
// SIG // BXQLBEV7BFng2A+z60z4YN3CeJ7Rup9r9/PufkQRQNK9
// SIG // uptLFghupL5V5KY4EqNI9BxVeoog0X3+kduUjy/Ce2um
// SIG // ZIVPo+UsNCldC7/1xzgvxCDEVjH2ac6F+AqR7NDWrro4
// SIG // BQzrbk9MnAMpqqL8GKApDA1cXFYjV9oclg3IJjbBRMvl
// SIG // 4eZvieeP6Zi1c9N44+2jATx05V68bPYhiWcF7JedtbH9
// SIG // r6bpcqXDNOEvn/n0ajniLQSCW/zQnK58nRH55rVTGXS6
// SIG // OUo5631Cs0o7Nz3CSnsnmOfiTpsbSlQ4aiM3vmq3SO7q
// SIG // Qg1JJJGOtwQul2/k50W7j039YNnXWcLYgNZgNHu3oZMg
// SIG // /oG4qqVcCemKDb4oTX7X6A/tZXjRMV+5ZtvfQucLzAIH
// SIG // jd//IAajRWW0szKNLpHiTbSpyfq8awQOsp/qn96kyQqW
// SIG // 9I332Jio8IUCCFmkIKYsCxryUgbtaeVkGBvgo6veynwU
// SIG // YUO4ZfU2o1UTK2csTRswTDGCBJEwggSNAgEBMIGHMHkx
// SIG // CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u
// SIG // MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
// SIG // b3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jv
// SIG // c29mdCBDb2RlIFNpZ25pbmcgUENBAgphBfceAAAAAAAy
// SIG // MAkGBSsOAwIaBQCggb4wGQYJKoZIhvcNAQkDMQwGCisG
// SIG // AQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQB
// SIG // gjcCARUwIwYJKoZIhvcNAQkEMRYEFH6t7wW67ax2Gp61
// SIG // eGMfoGd2g75WMF4GCisGAQQBgjcCAQwxUDBOoCaAJABN
// SIG // AGkAYwByAG8AcwBvAGYAdAAgAEwAZQBhAHIAbgBpAG4A
// SIG // Z6EkgCJodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vbGVh
// SIG // cm5pbmcgMA0GCSqGSIb3DQEBAQUABIIBAF5DaxOZc/x9
// SIG // cyMHfEo2XDx2H59LyfBU4sUz4RfXAhT0Y2SYAFwpcywe
// SIG // CEL1L4b8uGj4P3C4tD/mkWSf3PsVcuLdAdsHOlKjhzj0
// SIG // XiSgohC8PycsnZB+mlK7ADfYpt7giyXjZBFDkpF8lhv6
// SIG // ZthWm2h/2K7z4GKROBhxe6ldOdMfpS2SBZZncD3ySNtR
// SIG // WU+qPBNhyXvQ0/p5OXUMbUZCYS+LZZu1ZmhgXsARka/u
// SIG // rrF2mS2E43Y06X34Pt06C2NC91H4jlnl7FZYSOKN6Qjp
// SIG // ZXtePH9ILjSlGOgi943WXymsvdnFgHfTXYdfZJFtBv+K
// SIG // f0d88wgZRf+PAl1LcYyWGROhggIdMIICGQYJKoZIhvcN
// SIG // AQkGMYICCjCCAgYCAQEwgYUwdzELMAkGA1UEBhMCVVMx
// SIG // EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
// SIG // ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
// SIG // dGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFRpbWUtU3Rh
// SIG // bXAgUENBAgphFrUpAAAAAAAQMAcGBSsOAwIaoF0wGAYJ
// SIG // KoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0B
// SIG // CQUxDxcNMTAwMjE5MjIzNzMzWjAjBgkqhkiG9w0BCQQx
// SIG // FgQUHjp2sOOFVNmdXZvlRHwbCnLLRfEwDQYJKoZIhvcN
// SIG // AQEFBQAEggEAgewpelfv44dwwPL4BXl+7/ZnJZSNewJ0
// SIG // GpMMA08kii07gHgR13xQBG0egVY6fAiEYVGcogtcHfCF
// SIG // eVUirlw+0uJY8t+HASVDugnF2eYrmKwc5ik9VlTqz6AE
// SIG // XI+fqjKjH6+49BfGbvkQ8DLgYujODq7ICfYGBX1xxp0N
// SIG // rEwwzAvmael3xIKOjpnW3MaMSIAKU5wVh4XzEQxLVBBr
// SIG // s5tXf/rMg+XF10Syv4HKW17Y9YBKKSTtMX7NN003u5kz
// SIG // HV365MQf2CONVJ17OuJTpH3SgURi+Vep9NZUVjDpw4kI
// SIG // /05UW/RzvEdYmg7PB/x4fTy/w7ygCBePmvP8Z0uURFn5XA==
// SIG // End signature block
