var maps_file = "viewer/search/dicts.xml";
var map = null;
var nbs = null;

function load_mappings( in_breaker_id ){
	if ( map != null ) return;
	var doc = xml_load( maps_file );
	var n = doc.documentElement.selectSingleNode("//map[@lang='" + in_breaker_id + "']");
	if ( n == null ) return;
	map = new Array();
	var nbs_s = n.getAttribute( "nbs" );
	if ( nbs_s != "" ) nbs = nbs_s.split( " " ); 
	for( var i = 0; i < n.childNodes.length; i++ ){
		var r = n.childNodes[i];
		var m = new Array();
		for( var j = 0; j < r.childNodes.length; j++ )	m[m.length] = r.childNodes[j].text;
		map[map.length] = m;
	}
}

function get_grep_bounds( str, lang ){

	var lft = false;
	var rgt = false;

	var v = str.charCodeAt(0);
	if ((( v >= 0x0030 ) && ( v <= 0x0039 ))||(( v >= 0x0041 ) && ( v <= 0x005a ))||(( v >= 0x0061 ) && ( v <= 0x007a ))) lft = true; 
	v = str.charCodeAt(str.length-1);
	if ((( v >= 0x0030 ) && ( v <= 0x0039 ))||(( v >= 0x0041 ) && ( v <= 0x005a ))||(( v >= 0x0061 ) && ( v <= 0x007a ))) rgt = true; 
	if ((!lft ) && (!rgt )) return 4;

	if ( nbs != null ){
		for( var i = 0; i < nbs.length; i++ ){
			var c = nbs[i];
			if ( lft == true ){
				if ( str.indexOf( c ) == 0 ) { lft = false; continue; }
			}
			if ( rgt == true ){
				if (( str.lastIndexOf( c ) == str.length - c.length ) && ( str.length - c.length > -1 )) { rgt = false; continue; }
			}
			if (( lft == false ) && ( rgt == false )) return 4;
		}
	}

	if (( lft == true ) && ( rgt == true )) return 0;
//	if (( lft == false ) && ( rgt == true )) return 1;
//	if (( lft == true ) && ( rgt == false )) return 2;
	return 4;
}

function case_fold( in_string, in_breaker_id ){
	var out_string = new String();
	for( var i = 0; i < in_string.length; i++ ) {
		var c = in_string.substr(i,1);
		var n = in_string.charCodeAt(i);
		if (( n >= 0xFF01) && ( n <= 0xFFEE )) {
			var d = c_fold_c( c );				
			if ( d != "" )	c = d;
		}
		var s = c_fold_c( c );
		if ( s != "" )	out_string+=s;
		else	out_string+=c;
	}
	return comp_locale( out_string, in_breaker_id, false );
}

function comp_locale( in_string, in_breaker_id, grep ){
	if ( in_breaker_id.length < 2 ) return in_string;
	if ( map != null ){
		var tmp = "";
		for( var n = 0; n < in_string.length; n++ ){
			var same = true;
			var c = in_string.substr( n, 1);
			for( var i = 0; i < map.length; i++ ){
				var a_0 = map[i][0];
				var a_1 = map[i][1];
				var a_2 = map[i][2];
				if (( n + a_0.length ) <= in_string.length )	c = in_string.substr( n, a_0.length );
				if ( a_0.length < 2 ){
					var v = c.charCodeAt(0);
					if((( v >= 0x0030 ) && ( v <= 0x0039 ))||(( v >= 0x0041 ) && ( v <= 0x005a ))||(( v >= 0x0061 ) && ( v <= 0x007a ))) c = c.toLowerCase(); 
				}
				if ( grep ){
					if(( c == a_0)||( c == a_1)){
						tmp+=a_2;
						same = false;
						n += c.length-1;
						break;
					}
				} else {
					if( c == a_0 ){
						tmp+=a_1;
						same = false;
						n += c.length-1;
						break;
					}
				}	
			}
			if ( same )	 tmp+=in_string.substr( n, 1);
		}
		in_string = tmp;
	}
	return in_string;
}

function y( n1, n2, n3 ){
	var r = String.fromCharCode(n1);
	if ( n2 != null ) r+=String.fromCharCode(n2);
	if ( n3 != null ) r+=String.fromCharCode(n3);
	return r;
}

function c_fold_c( in_value ){
	var v = in_value.charCodeAt(0);
switch( v ){
case 0x0001: return y(0x0002,0x0003);
case 0x0041: return y(0x0061);
case 0x0042: return y(0x0062);
case 0x0043: return y(0x0063);
case 0x0044: return y(0x0064);
case 0x0045: return y(0x0065);
case 0x0046: return y(0x0066);
case 0x0047: return y(0x0067);
case 0x0048: return y(0x0068);
case 0x0049: return y(0x0069);
case 0x004A: return y(0x006A);
case 0x004B: return y(0x006B);
case 0x004C: return y(0x006C);
case 0x004D: return y(0x006D);
case 0x004E: return y(0x006E);
case 0x004F: return y(0x006F);
case 0x0050: return y(0x0070);
case 0x0051: return y(0x0071);
case 0x0052: return y(0x0072);
case 0x0053: return y(0x0073);
case 0x0054: return y(0x0074);
case 0x0055: return y(0x0075);
case 0x0056: return y(0x0076);
case 0x0057: return y(0x0077);
case 0x0058: return y(0x0078);
case 0x0059: return y(0x0079);
case 0x005A: return y(0x007A);
case 0x00B5: return y(0x03BC);
case 0x00C0: return y(0x00E0);
case 0x00C1: return y(0x00E1);
case 0x00C2: return y(0x00E2);
case 0x00C3: return y(0x00E3);
case 0x00C4: return y(0x00E4);
case 0x00C5: return y(0x00E5);
case 0x00C6: return y(0x00E6);
case 0x00C7: return y(0x00E7);
case 0x00C8: return y(0x00E8);
case 0x00C9: return y(0x00E9);
case 0x00CA: return y(0x00EA);
case 0x00CB: return y(0x00EB);
case 0x00CC: return y(0x00EC);
case 0x00CD: return y(0x00ED);
case 0x00CE: return y(0x00EE);
case 0x00CF: return y(0x00EF);
case 0x00D0: return y(0x00F0);
case 0x00D1: return y(0x00F1);
case 0x00D2: return y(0x00F2);
case 0x00D3: return y(0x00F3);
case 0x00D4: return y(0x00F4);
case 0x00D5: return y(0x00F5);
case 0x00D6: return y(0x00F6);
case 0x00D8: return y(0x00F8);
case 0x00D9: return y(0x00F9);
case 0x00DA: return y(0x00FA);
case 0x00DB: return y(0x00FB);
case 0x00DC: return y(0x00FC);
case 0x00DD: return y(0x00FD);
case 0x00DE: return y(0x00FE);
case 0x00DF: return y(0x0073,0x0073);
case 0x0100: return y(0x0101);
case 0x0102: return y(0x0103);
case 0x0104: return y(0x0105);
case 0x0106: return y(0x0107);
case 0x0108: return y(0x0109);
case 0x010A: return y(0x010B);
case 0x010C: return y(0x010D);
case 0x010E: return y(0x010F);
case 0x0110: return y(0x0111);
case 0x0112: return y(0x0113);
case 0x0114: return y(0x0115);
case 0x0116: return y(0x0117);
case 0x0118: return y(0x0119);
case 0x011A: return y(0x011B);
case 0x011C: return y(0x011D);
case 0x011E: return y(0x011F);
case 0x0120: return y(0x0121);
case 0x0122: return y(0x0123);
case 0x0124: return y(0x0125);
case 0x0126: return y(0x0127);
case 0x0128: return y(0x0129);
case 0x012A: return y(0x012B);
case 0x012C: return y(0x012D);
case 0x012E: return y(0x012F);
case 0x0130: return y(0x0069);
case 0x0131: return y(0x0069);
case 0x0132: return y(0x0133);
case 0x0134: return y(0x0135);
case 0x0136: return y(0x0137);
case 0x0139: return y(0x013A);
case 0x013B: return y(0x013C);
case 0x013D: return y(0x013E);
case 0x013F: return y(0x0140);
case 0x0141: return y(0x0142);
case 0x0143: return y(0x0144);
case 0x0145: return y(0x0146);
case 0x0147: return y(0x0148);
case 0x0149: return y(0x02BC,0x006E);
case 0x014A: return y(0x014B);
case 0x014C: return y(0x014D);
case 0x014E: return y(0x014F);
case 0x0150: return y(0x0151);
case 0x0152: return y(0x0153);
case 0x0154: return y(0x0155);
case 0x0156: return y(0x0157);
case 0x0158: return y(0x0159);
case 0x015A: return y(0x015B);
case 0x015C: return y(0x015D);
case 0x015E: return y(0x015F);
case 0x0160: return y(0x0161);
case 0x0162: return y(0x0163);
case 0x0164: return y(0x0165);
case 0x0166: return y(0x0167);
case 0x0168: return y(0x0169);
case 0x016A: return y(0x016B);
case 0x016C: return y(0x016D);
case 0x016E: return y(0x016F);
case 0x0170: return y(0x0171);
case 0x0172: return y(0x0173);
case 0x0174: return y(0x0175);
case 0x0176: return y(0x0177);
case 0x0178: return y(0x00FF);
case 0x0179: return y(0x017A);
case 0x017B: return y(0x017C);
case 0x017D: return y(0x017E);
case 0x017F: return y(0x0073);
case 0x0181: return y(0x0253);
case 0x0182: return y(0x0183);
case 0x0184: return y(0x0185);
case 0x0186: return y(0x0254);
case 0x0187: return y(0x0188);
case 0x0189: return y(0x0256);
case 0x018A: return y(0x0257);
case 0x018B: return y(0x018C);
case 0x018E: return y(0x01DD);
case 0x018F: return y(0x0259);
case 0x0190: return y(0x025B);
case 0x0191: return y(0x0192);
case 0x0193: return y(0x0260);
case 0x0194: return y(0x0263);
case 0x0196: return y(0x0269);
case 0x0197: return y(0x0268);
case 0x0198: return y(0x0199);
case 0x019C: return y(0x026F);
case 0x019D: return y(0x0272);
case 0x019F: return y(0x0275);
case 0x01A0: return y(0x01A1);
case 0x01A2: return y(0x01A3);
case 0x01A4: return y(0x01A5);
case 0x01A6: return y(0x0280);
case 0x01A7: return y(0x01A8);
case 0x01A9: return y(0x0283);
case 0x01AC: return y(0x01AD);
case 0x01AE: return y(0x0288);
case 0x01AF: return y(0x01B0);
case 0x01B1: return y(0x028A);
case 0x01B2: return y(0x028B);
case 0x01B3: return y(0x01B4);
case 0x01B5: return y(0x01B6);
case 0x01B7: return y(0x0292);
case 0x01B8: return y(0x01B9);
case 0x01BC: return y(0x01BD);
case 0x01C4: return y(0x01C6);
case 0x01C5: return y(0x01C6);
case 0x01C7: return y(0x01C9);
case 0x01C8: return y(0x01C9);
case 0x01CA: return y(0x01CC);
case 0x01CB: return y(0x01CC);
case 0x01CD: return y(0x01CE);
case 0x01CF: return y(0x01D0);
case 0x01D1: return y(0x01D2);
case 0x01D3: return y(0x01D4);
case 0x01D5: return y(0x01D6);
case 0x01D7: return y(0x01D8);
case 0x01D9: return y(0x01DA);
case 0x01DB: return y(0x01DC);
case 0x01DE: return y(0x01DF);
case 0x01E0: return y(0x01E1);
case 0x01E2: return y(0x01E3);
case 0x01E4: return y(0x01E5);
case 0x01E6: return y(0x01E7);
case 0x01E8: return y(0x01E9);
case 0x01EA: return y(0x01EB);
case 0x01EC: return y(0x01ED);
case 0x01EE: return y(0x01EF);
case 0x01F0: return y(0x006A,0x030C);
case 0x01F1: return y(0x01F3);
case 0x01F2: return y(0x01F3);
case 0x01F4: return y(0x01F5);
case 0x01F6: return y(0x0195);
case 0x01F7: return y(0x01BF);
case 0x01F8: return y(0x01F9);
case 0x01FA: return y(0x01FB);
case 0x01FC: return y(0x01FD);
case 0x01FE: return y(0x01FF);
case 0x0200: return y(0x0201);
case 0x0202: return y(0x0203);
case 0x0204: return y(0x0205);
case 0x0206: return y(0x0207);
case 0x0208: return y(0x0209);
case 0x020A: return y(0x020B);
case 0x020C: return y(0x020D);
case 0x020E: return y(0x020F);
case 0x0210: return y(0x0211);
case 0x0212: return y(0x0213);
case 0x0214: return y(0x0215);
case 0x0216: return y(0x0217);
case 0x0218: return y(0x0219);
case 0x021A: return y(0x021B);
case 0x021C: return y(0x021D);
case 0x021E: return y(0x021F);
case 0x0222: return y(0x0223);
case 0x0224: return y(0x0225);
case 0x0226: return y(0x0227);
case 0x0228: return y(0x0229);
case 0x022A: return y(0x022B);
case 0x022C: return y(0x022D);
case 0x022E: return y(0x022F);
case 0x0230: return y(0x0231);
case 0x0232: return y(0x0233);
case 0x0345: return y(0x03B9);
case 0x0386: return y(0x03AC);
case 0x0388: return y(0x03AD);
case 0x0389: return y(0x03AE);
case 0x038A: return y(0x03AF);
case 0x038C: return y(0x03CC);
case 0x038E: return y(0x03CD);
case 0x038F: return y(0x03CE);
case 0x0390: return y(0x03B9,0x0308,0x0301);
case 0x0391: return y(0x03B1);
case 0x0392: return y(0x03B2);
case 0x0393: return y(0x03B3);
case 0x0394: return y(0x03B4);
case 0x0395: return y(0x03B5);
case 0x0396: return y(0x03B6);
case 0x0397: return y(0x03B7);
case 0x0398: return y(0x03B8);
case 0x0399: return y(0x03B9);
case 0x039A: return y(0x03BA);
case 0x039B: return y(0x03BB);
case 0x039C: return y(0x03BC);
case 0x039D: return y(0x03BD);
case 0x039E: return y(0x03BE);
case 0x039F: return y(0x03BF);
case 0x03A0: return y(0x03C0);
case 0x03A1: return y(0x03C1);
case 0x03A3: return y(0x03C3);
case 0x03A4: return y(0x03C4);
case 0x03A5: return y(0x03C5);
case 0x03A6: return y(0x03C6);
case 0x03A7: return y(0x03C7);
case 0x03A8: return y(0x03C8);
case 0x03A9: return y(0x03C9);
case 0x03AA: return y(0x03CA);
case 0x03AB: return y(0x03CB);
case 0x03B0: return y(0x03C5,0x0308,0x0301);
case 0x03C2: return y(0x03C3);
case 0x03D0: return y(0x03B2);
case 0x03D1: return y(0x03B8);
case 0x03D5: return y(0x03C6);
case 0x03D6: return y(0x03C0);
case 0x03DA: return y(0x03DB);
case 0x03DC: return y(0x03DD);
case 0x03DE: return y(0x03DF);
case 0x03E0: return y(0x03E1);
case 0x03E2: return y(0x03E3);
case 0x03E4: return y(0x03E5);
case 0x03E6: return y(0x03E7);
case 0x03E8: return y(0x03E9);
case 0x03EA: return y(0x03EB);
case 0x03EC: return y(0x03ED);
case 0x03EE: return y(0x03EF);
case 0x03F0: return y(0x03BA);
case 0x03F1: return y(0x03C1);
case 0x03F2: return y(0x03C3);
case 0x03F4: return y(0x03B8);
case 0x03F5: return y(0x03B5);
case 0x0400: return y(0x0450);
case 0x0401: return y(0x0451);
case 0x0402: return y(0x0452);
case 0x0403: return y(0x0453);
case 0x0404: return y(0x0454);
case 0x0405: return y(0x0455);
case 0x0406: return y(0x0456);
case 0x0407: return y(0x0457);
case 0x0408: return y(0x0458);
case 0x0409: return y(0x0459);
case 0x040A: return y(0x045A);
case 0x040B: return y(0x045B);
case 0x040C: return y(0x045C);
case 0x040D: return y(0x045D);
case 0x040E: return y(0x045E);
case 0x040F: return y(0x045F);
case 0x0410: return y(0x0430);
case 0x0411: return y(0x0431);
case 0x0412: return y(0x0432);
case 0x0413: return y(0x0433);
case 0x0414: return y(0x0434);
case 0x0415: return y(0x0435);
case 0x0416: return y(0x0436);
case 0x0417: return y(0x0437);
case 0x0418: return y(0x0438);
case 0x0419: return y(0x0439);
case 0x041A: return y(0x043A);
case 0x041B: return y(0x043B);
case 0x041C: return y(0x043C);
case 0x041D: return y(0x043D);
case 0x041E: return y(0x043E);
case 0x041F: return y(0x043F);
case 0x0420: return y(0x0440);
case 0x0421: return y(0x0441);
case 0x0422: return y(0x0442);
case 0x0423: return y(0x0443);
case 0x0424: return y(0x0444);
case 0x0425: return y(0x0445);
case 0x0426: return y(0x0446);
case 0x0427: return y(0x0447);
case 0x0428: return y(0x0448);
case 0x0429: return y(0x0449);
case 0x042A: return y(0x044A);
case 0x042B: return y(0x044B);
case 0x042C: return y(0x044C);
case 0x042D: return y(0x044D);
case 0x042E: return y(0x044E);
case 0x042F: return y(0x044F);
case 0x0460: return y(0x0461);
case 0x0462: return y(0x0463);
case 0x0464: return y(0x0465);
case 0x0466: return y(0x0467);
case 0x0468: return y(0x0469);
case 0x046A: return y(0x046B);
case 0x046C: return y(0x046D);
case 0x046E: return y(0x046F);
case 0x0470: return y(0x0471);
case 0x0472: return y(0x0473);
case 0x0474: return y(0x0475);
case 0x0476: return y(0x0477);
case 0x0478: return y(0x0479);
case 0x047A: return y(0x047B);
case 0x047C: return y(0x047D);
case 0x047E: return y(0x047F);
case 0x0480: return y(0x0481);
case 0x048C: return y(0x048D);
case 0x048E: return y(0x048F);
case 0x0490: return y(0x0491);
case 0x0492: return y(0x0493);
case 0x0494: return y(0x0495);
case 0x0496: return y(0x0497);
case 0x0498: return y(0x0499);
case 0x049A: return y(0x049B);
case 0x049C: return y(0x049D);
case 0x049E: return y(0x049F);
case 0x04A0: return y(0x04A1);
case 0x04A2: return y(0x04A3);
case 0x04A4: return y(0x04A5);
case 0x04A6: return y(0x04A7);
case 0x04A8: return y(0x04A9);
case 0x04AA: return y(0x04AB);
case 0x04AC: return y(0x04AD);
case 0x04AE: return y(0x04AF);
case 0x04B0: return y(0x04B1);
case 0x04B2: return y(0x04B3);
case 0x04B4: return y(0x04B5);
case 0x04B6: return y(0x04B7);
case 0x04B8: return y(0x04B9);
case 0x04BA: return y(0x04BB);
case 0x04BC: return y(0x04BD);
case 0x04BE: return y(0x04BF);
case 0x04C1: return y(0x04C2);
case 0x04C3: return y(0x04C4);
case 0x04C7: return y(0x04C8);
case 0x04CB: return y(0x04CC);
case 0x04D0: return y(0x04D1);
case 0x04D2: return y(0x04D3);
case 0x04D4: return y(0x04D5);
case 0x04D6: return y(0x04D7);
case 0x04D8: return y(0x04D9);
case 0x04DA: return y(0x04DB);
case 0x04DC: return y(0x04DD);
case 0x04DE: return y(0x04DF);
case 0x04E0: return y(0x04E1);
case 0x04E2: return y(0x04E3);
case 0x04E4: return y(0x04E5);
case 0x04E6: return y(0x04E7);
case 0x04E8: return y(0x04E9);
case 0x04EA: return y(0x04EB);
case 0x04EC: return y(0x04ED);
case 0x04EE: return y(0x04EF);
case 0x04F0: return y(0x04F1);
case 0x04F2: return y(0x04F3);
case 0x04F4: return y(0x04F5);
case 0x04F8: return y(0x04F9);
case 0x0531: return y(0x0561);
case 0x0532: return y(0x0562);
case 0x0533: return y(0x0563);
case 0x0534: return y(0x0564);
case 0x0535: return y(0x0565);
case 0x0536: return y(0x0566);
case 0x0537: return y(0x0567);
case 0x0538: return y(0x0568);
case 0x0539: return y(0x0569);
case 0x053A: return y(0x056A);
case 0x053B: return y(0x056B);
case 0x053C: return y(0x056C);
case 0x053D: return y(0x056D);
case 0x053E: return y(0x056E);
case 0x053F: return y(0x056F);
case 0x0540: return y(0x0570);
case 0x0541: return y(0x0571);
case 0x0542: return y(0x0572);
case 0x0543: return y(0x0573);
case 0x0544: return y(0x0574);
case 0x0545: return y(0x0575);
case 0x0546: return y(0x0576);
case 0x0547: return y(0x0577);
case 0x0548: return y(0x0578);
case 0x0549: return y(0x0579);
case 0x054A: return y(0x057A);
case 0x054B: return y(0x057B);
case 0x054C: return y(0x057C);
case 0x054D: return y(0x057D);
case 0x054E: return y(0x057E);
case 0x054F: return y(0x057F);
case 0x0550: return y(0x0580);
case 0x0551: return y(0x0581);
case 0x0552: return y(0x0582);
case 0x0553: return y(0x0583);
case 0x0554: return y(0x0584);
case 0x0555: return y(0x0585);
case 0x0556: return y(0x0586);
case 0x0587: return y(0x0565,0x0582);
case 0x1E00: return y(0x1E01);
case 0x1E02: return y(0x1E03);
case 0x1E04: return y(0x1E05);
case 0x1E06: return y(0x1E07);
case 0x1E08: return y(0x1E09);
case 0x1E0A: return y(0x1E0B);
case 0x1E0C: return y(0x1E0D);
case 0x1E0E: return y(0x1E0F);
case 0x1E10: return y(0x1E11);
case 0x1E12: return y(0x1E13);
case 0x1E14: return y(0x1E15);
case 0x1E16: return y(0x1E17);
case 0x1E18: return y(0x1E19);
case 0x1E1A: return y(0x1E1B);
case 0x1E1C: return y(0x1E1D);
case 0x1E1E: return y(0x1E1F);
case 0x1E20: return y(0x1E21);
case 0x1E22: return y(0x1E23);
case 0x1E24: return y(0x1E25);
case 0x1E26: return y(0x1E27);
case 0x1E28: return y(0x1E29);
case 0x1E2A: return y(0x1E2B);
case 0x1E2C: return y(0x1E2D);
case 0x1E2E: return y(0x1E2F);
case 0x1E30: return y(0x1E31);
case 0x1E32: return y(0x1E33);
case 0x1E34: return y(0x1E35);
case 0x1E36: return y(0x1E37);
case 0x1E38: return y(0x1E39);
case 0x1E3A: return y(0x1E3B);
case 0x1E3C: return y(0x1E3D);
case 0x1E3E: return y(0x1E3F);
case 0x1E40: return y(0x1E41);
case 0x1E42: return y(0x1E43);
case 0x1E44: return y(0x1E45);
case 0x1E46: return y(0x1E47);
case 0x1E48: return y(0x1E49);
case 0x1E4A: return y(0x1E4B);
case 0x1E4C: return y(0x1E4D);
case 0x1E4E: return y(0x1E4F);
case 0x1E50: return y(0x1E51);
case 0x1E52: return y(0x1E53);
case 0x1E54: return y(0x1E55);
case 0x1E56: return y(0x1E57);
case 0x1E58: return y(0x1E59);
case 0x1E5A: return y(0x1E5B);
case 0x1E5C: return y(0x1E5D);
case 0x1E5E: return y(0x1E5F);
case 0x1E60: return y(0x1E61);
case 0x1E62: return y(0x1E63);
case 0x1E64: return y(0x1E65);
case 0x1E66: return y(0x1E67);
case 0x1E68: return y(0x1E69);
case 0x1E6A: return y(0x1E6B);
case 0x1E6C: return y(0x1E6D);
case 0x1E6E: return y(0x1E6F);
case 0x1E70: return y(0x1E71);
case 0x1E72: return y(0x1E73);
case 0x1E74: return y(0x1E75);
case 0x1E76: return y(0x1E77);
case 0x1E78: return y(0x1E79);
case 0x1E7A: return y(0x1E7B);
case 0x1E7C: return y(0x1E7D);
case 0x1E7E: return y(0x1E7F);
case 0x1E80: return y(0x1E81);
case 0x1E82: return y(0x1E83);
case 0x1E84: return y(0x1E85);
case 0x1E86: return y(0x1E87);
case 0x1E88: return y(0x1E89);
case 0x1E8A: return y(0x1E8B);
case 0x1E8C: return y(0x1E8D);
case 0x1E8E: return y(0x1E8F);
case 0x1E90: return y(0x1E91);
case 0x1E92: return y(0x1E93);
case 0x1E94: return y(0x1E95);
case 0x1E96: return y(0x0068,0x0331);
case 0x1E97: return y(0x0074,0x0308);
case 0x1E98: return y(0x0077,0x030A);
case 0x1E99: return y(0x0079,0x030A);
case 0x1E9A: return y(0x0061,0x02BE);
case 0x1E9B: return y(0x1E61);
case 0x1EA0: return y(0x1EA1);
case 0x1EA2: return y(0x1EA3);
case 0x1EA4: return y(0x1EA5);
case 0x1EA6: return y(0x1EA7);
case 0x1EA8: return y(0x1EA9);
case 0x1EAA: return y(0x1EAB);
case 0x1EAC: return y(0x1EAD);
case 0x1EAE: return y(0x1EAF);
case 0x1EB0: return y(0x1EB1);
case 0x1EB2: return y(0x1EB3);
case 0x1EB4: return y(0x1EB5);
case 0x1EB6: return y(0x1EB7);
case 0x1EB8: return y(0x1EB9);
case 0x1EBA: return y(0x1EBB);
case 0x1EBC: return y(0x1EBD);
case 0x1EBE: return y(0x1EBF);
case 0x1EC0: return y(0x1EC1);
case 0x1EC2: return y(0x1EC3);
case 0x1EC4: return y(0x1EC5);
case 0x1EC6: return y(0x1EC7);
case 0x1EC8: return y(0x1EC9);
case 0x1ECA: return y(0x1ECB);
case 0x1ECC: return y(0x1ECD);
case 0x1ECE: return y(0x1ECF);
case 0x1ED0: return y(0x1ED1);
case 0x1ED2: return y(0x1ED3);
case 0x1ED4: return y(0x1ED5);
case 0x1ED6: return y(0x1ED7);
case 0x1ED8: return y(0x1ED9);
case 0x1EDA: return y(0x1EDB);
case 0x1EDC: return y(0x1EDD);
case 0x1EDE: return y(0x1EDF);
case 0x1EE0: return y(0x1EE1);
case 0x1EE2: return y(0x1EE3);
case 0x1EE4: return y(0x1EE5);
case 0x1EE6: return y(0x1EE7);
case 0x1EE8: return y(0x1EE9);
case 0x1EEA: return y(0x1EEB);
case 0x1EEC: return y(0x1EED);
case 0x1EEE: return y(0x1EEF);
case 0x1EF0: return y(0x1EF1);
case 0x1EF2: return y(0x1EF3);
case 0x1EF4: return y(0x1EF5);
case 0x1EF6: return y(0x1EF7);
case 0x1EF8: return y(0x1EF9);
case 0x1F08: return y(0x1F00);
case 0x1F09: return y(0x1F01);
case 0x1F0A: return y(0x1F02);
case 0x1F0B: return y(0x1F03);
case 0x1F0C: return y(0x1F04);
case 0x1F0D: return y(0x1F05);
case 0x1F0E: return y(0x1F06);
case 0x1F0F: return y(0x1F07);
case 0x1F18: return y(0x1F10);
case 0x1F19: return y(0x1F11);
case 0x1F1A: return y(0x1F12);
case 0x1F1B: return y(0x1F13);
case 0x1F1C: return y(0x1F14);
case 0x1F1D: return y(0x1F15);
case 0x1F28: return y(0x1F20);
case 0x1F29: return y(0x1F21);
case 0x1F2A: return y(0x1F22);
case 0x1F2B: return y(0x1F23);
case 0x1F2C: return y(0x1F24);
case 0x1F2D: return y(0x1F25);
case 0x1F2E: return y(0x1F26);
case 0x1F2F: return y(0x1F27);
case 0x1F38: return y(0x1F30);
case 0x1F39: return y(0x1F31);
case 0x1F3A: return y(0x1F32);
case 0x1F3B: return y(0x1F33);
case 0x1F3C: return y(0x1F34);
case 0x1F3D: return y(0x1F35);
case 0x1F3E: return y(0x1F36);
case 0x1F3F: return y(0x1F37);
case 0x1F48: return y(0x1F40);
case 0x1F49: return y(0x1F41);
case 0x1F4A: return y(0x1F42);
case 0x1F4B: return y(0x1F43);
case 0x1F4C: return y(0x1F44);
case 0x1F4D: return y(0x1F45);
case 0x1F50: return y(0x03C5,0x0313);
case 0x1F52: return y(0x03C5,0x0313,0x0300);
case 0x1F54: return y(0x03C5,0x0313,0x0301);
case 0x1F56: return y(0x03C5,0x0313,0x0342);
case 0x1F59: return y(0x1F51);
case 0x1F5B: return y(0x1F53);
case 0x1F5D: return y(0x1F55);
case 0x1F5F: return y(0x1F57);
case 0x1F68: return y(0x1F60);
case 0x1F69: return y(0x1F61);
case 0x1F6A: return y(0x1F62);
case 0x1F6B: return y(0x1F63);
case 0x1F6C: return y(0x1F64);
case 0x1F6D: return y(0x1F65);
case 0x1F6E: return y(0x1F66);
case 0x1F6F: return y(0x1F67);
case 0x1F80: return y(0x1F00,0x03B9);
case 0x1F81: return y(0x1F01,0x03B9);
case 0x1F82: return y(0x1F02,0x03B9);
case 0x1F83: return y(0x1F03,0x03B9);
case 0x1F84: return y(0x1F04,0x03B9);
case 0x1F85: return y(0x1F05,0x03B9);
case 0x1F86: return y(0x1F06,0x03B9);
case 0x1F87: return y(0x1F07,0x03B9);
case 0x1F88: return y(0x1F00,0x03B9);
case 0x1F89: return y(0x1F01,0x03B9);
case 0x1F8A: return y(0x1F02,0x03B9);
case 0x1F8B: return y(0x1F03,0x03B9);
case 0x1F8C: return y(0x1F04,0x03B9);
case 0x1F8D: return y(0x1F05,0x03B9);
case 0x1F8E: return y(0x1F06,0x03B9);
case 0x1F8F: return y(0x1F07,0x03B9);
case 0x1F90: return y(0x1F20,0x03B9);
case 0x1F91: return y(0x1F21,0x03B9);
case 0x1F92: return y(0x1F22,0x03B9);
case 0x1F93: return y(0x1F23,0x03B9);
case 0x1F94: return y(0x1F24,0x03B9);
case 0x1F95: return y(0x1F25,0x03B9);
case 0x1F96: return y(0x1F26,0x03B9);
case 0x1F97: return y(0x1F27,0x03B9);
case 0x1F98: return y(0x1F20,0x03B9);
case 0x1F99: return y(0x1F21,0x03B9);
case 0x1F9A: return y(0x1F22,0x03B9);
case 0x1F9B: return y(0x1F23,0x03B9);
case 0x1F9C: return y(0x1F24,0x03B9);
case 0x1F9D: return y(0x1F25,0x03B9);
case 0x1F9E: return y(0x1F26,0x03B9);
case 0x1F9F: return y(0x1F27,0x03B9);
case 0x1FA0: return y(0x1F60,0x03B9);
case 0x1FA1: return y(0x1F61,0x03B9);
case 0x1FA2: return y(0x1F62,0x03B9);
case 0x1FA3: return y(0x1F63,0x03B9);
case 0x1FA4: return y(0x1F64,0x03B9);
case 0x1FA5: return y(0x1F65,0x03B9);
case 0x1FA6: return y(0x1F66,0x03B9);
case 0x1FA7: return y(0x1F67,0x03B9);
case 0x1FA8: return y(0x1F60,0x03B9);
case 0x1FA9: return y(0x1F61,0x03B9);
case 0x1FAA: return y(0x1F62,0x03B9);
case 0x1FAB: return y(0x1F63,0x03B9);
case 0x1FAC: return y(0x1F64,0x03B9);
case 0x1FAD: return y(0x1F65,0x03B9);
case 0x1FAE: return y(0x1F66,0x03B9);
case 0x1FAF: return y(0x1F67,0x03B9);
case 0x1FB2: return y(0x1F70,0x03B9);
case 0x1FB3: return y(0x03B1,0x03B9);
case 0x1FB4: return y(0x03AC,0x03B9);
case 0x1FB6: return y(0x03B1,0x0342);
case 0x1FB7: return y(0x03B1,0x0342,0x03B9);
case 0x1FB8: return y(0x1FB0);
case 0x1FB9: return y(0x1FB1);
case 0x1FBA: return y(0x1F70);
case 0x1FBB: return y(0x1F71);
case 0x1FBC: return y(0x03B1,0x03B9);
case 0x1FBE: return y(0x03B9);
case 0x1FC2: return y(0x1F74,0x03B9);
case 0x1FC3: return y(0x03B7,0x03B9);
case 0x1FC4: return y(0x03AE,0x03B9);
case 0x1FC6: return y(0x03B7,0x0342);
case 0x1FC7: return y(0x03B7,0x0342,0x03B9);
case 0x1FC8: return y(0x1F72);
case 0x1FC9: return y(0x1F73);
case 0x1FCA: return y(0x1F74);
case 0x1FCB: return y(0x1F75);
case 0x1FCC: return y(0x03B7,0x03B9);
case 0x1FD2: return y(0x03B9,0x0308,0x0300);
case 0x1FD3: return y(0x03B9,0x0308,0x0301);
case 0x1FD6: return y(0x03B9,0x0342);
case 0x1FD7: return y(0x03B9,0x0308,0x0342);
case 0x1FD8: return y(0x1FD0);
case 0x1FD9: return y(0x1FD1);
case 0x1FDA: return y(0x1F76);
case 0x1FDB: return y(0x1F77);
case 0x1FE2: return y(0x03C5,0x0308,0x0300);
case 0x1FE3: return y(0x03C5,0x0308,0x0301);
case 0x1FE4: return y(0x03C1,0x0313);
case 0x1FE6: return y(0x03C5,0x0342);
case 0x1FE7: return y(0x03C5,0x0308,0x0342);
case 0x1FE8: return y(0x1FE0);
case 0x1FE9: return y(0x1FE1);
case 0x1FEA: return y(0x1F7A);
case 0x1FEB: return y(0x1F7B);
case 0x1FEC: return y(0x1FE5);
case 0x1FF2: return y(0x1F7C,0x03B9);
case 0x1FF3: return y(0x03C9,0x03B9);
case 0x1FF4: return y(0x03CE,0x03B9);
case 0x1FF6: return y(0x03C9,0x0342);
case 0x1FF7: return y(0x03C9,0x0342,0x03B9);
case 0x1FF8: return y(0x1F78);
case 0x1FF9: return y(0x1F79);
case 0x1FFA: return y(0x1F7C);
case 0x1FFB: return y(0x1F7D);
case 0x1FFC: return y(0x03C9,0x03B9);
case 0x2126: return y(0x03C9);
case 0x212A: return y(0x006B);
case 0x212B: return y(0x00E5);
case 0x2160: return y(0x2170);
case 0x2161: return y(0x2171);
case 0x2162: return y(0x2172);
case 0x2163: return y(0x2173);
case 0x2164: return y(0x2174);
case 0x2165: return y(0x2175);
case 0x2166: return y(0x2176);
case 0x2167: return y(0x2177);
case 0x2168: return y(0x2178);
case 0x2169: return y(0x2179);
case 0x216A: return y(0x217A);
case 0x216B: return y(0x217B);
case 0x216C: return y(0x217C);
case 0x216D: return y(0x217D);
case 0x216E: return y(0x217E);
case 0x216F: return y(0x217F);
case 0x24B6: return y(0x24D0);
case 0x24B7: return y(0x24D1);
case 0x24B8: return y(0x24D2);
case 0x24B9: return y(0x24D3);
case 0x24BA: return y(0x24D4);
case 0x24BB: return y(0x24D5);
case 0x24BC: return y(0x24D6);
case 0x24BD: return y(0x24D7);
case 0x24BE: return y(0x24D8);
case 0x24BF: return y(0x24D9);
case 0x24C0: return y(0x24DA);
case 0x24C1: return y(0x24DB);
case 0x24C2: return y(0x24DC);
case 0x24C3: return y(0x24DD);
case 0x24C4: return y(0x24DE);
case 0x24C5: return y(0x24DF);
case 0x24C6: return y(0x24E0);
case 0x24C7: return y(0x24E1);
case 0x24C8: return y(0x24E2);
case 0x24C9: return y(0x24E3);
case 0x24CA: return y(0x24E4);
case 0x24CB: return y(0x24E5);
case 0x24CC: return y(0x24E6);
case 0x24CD: return y(0x24E7);
case 0x24CE: return y(0x24E8);
case 0x24CF: return y(0x24E9);
case 0xFB00: return y(0x0066,0x0066);
case 0xFB01: return y(0x0066,0x0069);
case 0xFB02: return y(0x0066,0x006C);
case 0xFB03: return y(0x0066,0x0066,0x0069);
case 0xFB04: return y(0x0066,0x0066,0x006C);
case 0xFB05: return y(0x0073,0x0074);
case 0xFB06: return y(0x0073,0x0074);
case 0xFB13: return y(0x0574,0x0576);
case 0xFB14: return y(0x0574,0x0565);
case 0xFB15: return y(0x0574,0x056B);
case 0xFB16: return y(0x057E,0x0576);
case 0xFB17: return y(0x0574,0x056D);
//decompose start...
case 0xFF01: return y(0x0021);
case 0xFF02: return y(0x0022);
case 0xFF03: return y(0x0023);
case 0xFF04: return y(0x0024);
case 0xFF05: return y(0x0025);
case 0xFF06: return y(0x0026);
case 0xFF07: return y(0x0027);
case 0xFF08: return y(0x0028);
case 0xFF09: return y(0x0029);
case 0xFF0A: return y(0x002A);
case 0xFF0B: return y(0x002B);
case 0xFF0C: return y(0x002C);
case 0xFF0D: return y(0x002D);
case 0xFF0E: return y(0x002E);
case 0xFF0F: return y(0x002F);
case 0xFF10: return y(0x0030);
case 0xFF11: return y(0x0031);
case 0xFF12: return y(0x0032);
case 0xFF13: return y(0x0033);
case 0xFF14: return y(0x0034);
case 0xFF15: return y(0x0035);
case 0xFF16: return y(0x0036);
case 0xFF17: return y(0x0037);
case 0xFF18: return y(0x0038);
case 0xFF19: return y(0x0039);
case 0xFF1A: return y(0x003A);
case 0xFF1B: return y(0x003B);
case 0xFF1C: return y(0x003C);
case 0xFF1D: return y(0x003D);
case 0xFF1E: return y(0x003E);
case 0xFF1F: return y(0x003F);
case 0xFF20: return y(0x0040);
case 0xFF21: return y(0x0041);
case 0xFF22: return y(0x0042);
case 0xFF23: return y(0x0043);
case 0xFF24: return y(0x0044);
case 0xFF25: return y(0x0045);
case 0xFF26: return y(0x0046);
case 0xFF27: return y(0x0047);
case 0xFF28: return y(0x0048);
case 0xFF29: return y(0x0049);
case 0xFF2A: return y(0x004A);
case 0xFF2B: return y(0x004B);
case 0xFF2C: return y(0x004C);
case 0xFF2D: return y(0x004D);
case 0xFF2E: return y(0x004E);
case 0xFF2F: return y(0x004F);
case 0xFF30: return y(0x0050);
case 0xFF31: return y(0x0051);
case 0xFF32: return y(0x0052);
case 0xFF33: return y(0x0053);
case 0xFF34: return y(0x0054);
case 0xFF35: return y(0x0055);
case 0xFF36: return y(0x0056);
case 0xFF37: return y(0x0057);
case 0xFF38: return y(0x0058);
case 0xFF39: return y(0x0059);
case 0xFF3A: return y(0x005A);
case 0xFF3B: return y(0x005B);
case 0xFF3C: return y(0x005C);
case 0xFF3D: return y(0x005D);
case 0xFF3E: return y(0x005E);
case 0xFF3F: return y(0x005F);
case 0xFF40: return y(0x0060);
case 0xFF41: return y(0x0061);
case 0xFF42: return y(0x0062);
case 0xFF43: return y(0x0063);
case 0xFF44: return y(0x0064);
case 0xFF45: return y(0x0065);
case 0xFF46: return y(0x0066);
case 0xFF47: return y(0x0067);
case 0xFF48: return y(0x0068);
case 0xFF49: return y(0x0069);
case 0xFF4A: return y(0x006A);
case 0xFF4B: return y(0x006B);
case 0xFF4C: return y(0x006C);
case 0xFF4D: return y(0x006D);
case 0xFF4E: return y(0x006E);
case 0xFF4F: return y(0x006F);
case 0xFF50: return y(0x0070);
case 0xFF51: return y(0x0071);
case 0xFF52: return y(0x0072);
case 0xFF53: return y(0x0073);
case 0xFF54: return y(0x0074);
case 0xFF55: return y(0x0075);
case 0xFF56: return y(0x0076);
case 0xFF57: return y(0x0077);
case 0xFF58: return y(0x0078);
case 0xFF59: return y(0x0079);
case 0xFF5A: return y(0x007A);
case 0xFF5B: return y(0x007B);
case 0xFF5C: return y(0x007C);
case 0xFF5D: return y(0x007D);
case 0xFF5E: return y(0x007E);
case 0xFF61: return y(0x3002);
case 0xFF62: return y(0x300C);
case 0xFF63: return y(0x300D);
case 0xFF64: return y(0x3001);
case 0xFF65: return y(0x30FB);
case 0xFF66: return y(0x30F2);
case 0xFF67: return y(0x30A1);
case 0xFF68: return y(0x30A3);
case 0xFF69: return y(0x30A5);
case 0xFF6A: return y(0x30A7);
case 0xFF6B: return y(0x30A9);
case 0xFF6C: return y(0x30E3);
case 0xFF6D: return y(0x30E5);
case 0xFF6E: return y(0x30E7);
case 0xFF6F: return y(0x30C3);
case 0xFF70: return y(0x30FC);
case 0xFF71: return y(0x30A2);
case 0xFF72: return y(0x30A4);
case 0xFF73: return y(0x30A6);
case 0xFF74: return y(0x30A8);
case 0xFF75: return y(0x30AA);
case 0xFF76: return y(0x30AB);
case 0xFF77: return y(0x30AD);
case 0xFF78: return y(0x30AF);
case 0xFF79: return y(0x30B1);
case 0xFF7A: return y(0x30B3);
case 0xFF7B: return y(0x30B5);
case 0xFF7C: return y(0x30B7);
case 0xFF7D: return y(0x30B9);
case 0xFF7E: return y(0x30BB);
case 0xFF7F: return y(0x30BD);
case 0xFF80: return y(0x30BF);
case 0xFF81: return y(0x30C1);
case 0xFF82: return y(0x30C4);
case 0xFF83: return y(0x30C6);
case 0xFF84: return y(0x30C8);
case 0xFF85: return y(0x30CA);
case 0xFF86: return y(0x30CB);
case 0xFF87: return y(0x30CC);
case 0xFF88: return y(0x30CD);
case 0xFF89: return y(0x30CE);
case 0xFF8A: return y(0x30CF);
case 0xFF8B: return y(0x30D2);
case 0xFF8C: return y(0x30D5);
case 0xFF8D: return y(0x30D8);
case 0xFF8E: return y(0x30DB);
case 0xFF8F: return y(0x30DE);
case 0xFF90: return y(0x30DF);
case 0xFF91: return y(0x30E0);
case 0xFF92: return y(0x30E1);
case 0xFF93: return y(0x30E2);
case 0xFF94: return y(0x30E4);
case 0xFF95: return y(0x30E6);
case 0xFF96: return y(0x30E8);
case 0xFF97: return y(0x30E9);
case 0xFF98: return y(0x30EA);
case 0xFF99: return y(0x30EB);
case 0xFF9A: return y(0x30EC);
case 0xFF9B: return y(0x30ED);
case 0xFF9C: return y(0x30EF);
case 0xFF9D: return y(0x30F3);
case 0xFF9E: return y(0x3099);
case 0xFF9F: return y(0x309A);
case 0xFFA0: return y(0x3164);
case 0xFFA1: return y(0x3131);
case 0xFFA2: return y(0x3132);
case 0xFFA3: return y(0x3133);
case 0xFFA4: return y(0x3134);
case 0xFFA5: return y(0x3135);
case 0xFFA6: return y(0x3136);
case 0xFFA7: return y(0x3137);
case 0xFFA8: return y(0x3138);
case 0xFFA9: return y(0x3139);
case 0xFFAA: return y(0x313A);
case 0xFFAB: return y(0x313B);
case 0xFFAC: return y(0x313C);
case 0xFFAD: return y(0x313D);
case 0xFFAE: return y(0x313E);
case 0xFFAF: return y(0x313F);
case 0xFFB0: return y(0x3140);
case 0xFFB1: return y(0x3141);
case 0xFFB2: return y(0x3142);
case 0xFFB3: return y(0x3143);
case 0xFFB4: return y(0x3144);
case 0xFFB5: return y(0x3145);
case 0xFFB6: return y(0x3146);
case 0xFFB7: return y(0x3147);
case 0xFFB8: return y(0x3148);
case 0xFFB9: return y(0x3149);
case 0xFFBA: return y(0x314A);
case 0xFFBB: return y(0x314B);
case 0xFFBC: return y(0x314C);
case 0xFFBD: return y(0x314D);
case 0xFFBE: return y(0x314E);
case 0xFFC2: return y(0x314F);
case 0xFFC3: return y(0x3150);
case 0xFFC4: return y(0x3151);
case 0xFFC5: return y(0x3152);
case 0xFFC6: return y(0x3153);
case 0xFFC7: return y(0x3154);
case 0xFFCA: return y(0x3155);
case 0xFFCB: return y(0x3156);
case 0xFFCC: return y(0x3157);
case 0xFFCD: return y(0x3158);
case 0xFFCE: return y(0x3159);
case 0xFFCF: return y(0x315A);
case 0xFFD2: return y(0x315B);
case 0xFFD3: return y(0x315C);
case 0xFFD4: return y(0x315D);
case 0xFFD5: return y(0x315E);
case 0xFFD6: return y(0x315F);
case 0xFFD7: return y(0x3160);
case 0xFFDA: return y(0x3161);
case 0xFFDB: return y(0x3162);
case 0xFFDC: return y(0x3163);
case 0xFFE0: return y(0x00A2);
case 0xFFE1: return y(0x00A3);
case 0xFFE2: return y(0x00AC);
case 0xFFE3: return y(0x00AF);
case 0xFFE4: return y(0x00A6);
case 0xFFE5: return y(0x00A5);
case 0xFFE6: return y(0x20A9);
case 0xFFE8: return y(0x2502);
case 0xFFE9: return y(0x2190);
case 0xFFEA: return y(0x2191);
case 0xFFEB: return y(0x2192);
case 0xFFEC: return y(0x2193);
case 0xFFED: return y(0x25A0);
case 0xFFEE: return y(0x25CB);
//...decompose end
case 0x10400: return y(0x10428);
case 0x10401: return y(0x10429);
case 0x10402: return y(0x1042A);
case 0x10403: return y(0x1042B);
case 0x10404: return y(0x1042C);
case 0x10405: return y(0x1042D);
case 0x10406: return y(0x1042E);
case 0x10407: return y(0x1042F);
case 0x10408: return y(0x10430);
case 0x10409: return y(0x10431);
case 0x1040A: return y(0x10432);
case 0x1040B: return y(0x10433);
case 0x1040C: return y(0x10434);
case 0x1040D: return y(0x10435);
case 0x1040E: return y(0x10436);
case 0x1040F: return y(0x10437);
case 0x10410: return y(0x10438);
case 0x10411: return y(0x10439);
case 0x10412: return y(0x1043A);
case 0x10413: return y(0x1043B);
case 0x10414: return y(0x1043C);
case 0x10415: return y(0x1043D);
case 0x10416: return y(0x1043E);
case 0x10417: return y(0x1043F);
case 0x10418: return y(0x10440);
case 0x10419: return y(0x10441);
case 0x1041A: return y(0x10442);
case 0x1041B: return y(0x10443);
case 0x1041C: return y(0x10444);
case 0x1041D: return y(0x10445);
case 0x1041E: return y(0x10446);
case 0x1041F: return y(0x10447);
case 0x10420: return y(0x10448);
case 0x10421: return y(0x10449);
case 0x10422: return y(0x1044A);
case 0x10423: return y(0x1044B);
case 0x10424: return y(0x1044C);
case 0x10425: return y(0x1044D);
default:
	return "";
}
}

function buildvoicehalfwidthkana( in_string ) {
	var ret = "";
	for( var i = 0; i < in_string.length; i++ )
		ret+=getvoicedhalfwidthkana( in_string.charCodeAt(i));
	return ret;
}

function getvoicedhalfwidthkana( c ) {
	if ( c == null )			return "";
	
	var ret = String.fromCharCode( c );
	switch( c ) {
		case 0x30F4:	ret = y( 0xFF69, 0xFF9E );	 break;
		case 0x30AC:	ret = y( 0xFF76, 0xFF9E );	 break;
		case 0x30AE:	ret = y( 0xFF77, 0xFF9E );	 break;
		case 0x30B0:	ret = y( 0xFF78, 0xFF9E );	 break;
		case 0x30B2:	ret = y( 0xFF79, 0xFF9E );	 break;
		case 0x30B4:	ret = y( 0xFF7A, 0xFF9E );	 break;
		case 0x30B6:	ret = y( 0xFF7B, 0xFF9E );	 break;
		case 0x30B8:	ret = y( 0xFF7C, 0xFF9E );	 break;
		case 0x30BA:	ret = y( 0xFF7D, 0xFF9E );	 break;
		case 0x30BC:	ret = y( 0xFF7E, 0xFF9E );	 break;
		case 0x30BE:	ret = y( 0xFF7F, 0xFF9E );	 break;
		case 0x30C0:	ret = y( 0xFF80, 0xFF9E );	 break;
		case 0x30C2:	ret = y( 0xFF81, 0xFF9E );	 break;
		case 0x30C5:	ret = y( 0xFF82, 0xFF9E );	 break;
		case 0x30C7:	ret = y( 0xFF83, 0xFF9E );	 break;
		case 0x30C9:	ret = y( 0xFF84, 0xFF9E );	 break;
		case 0x30D0:	ret = y( 0xFF8A, 0xFF9E );	 break;
		case 0x30D3:	ret = y( 0xFF8B, 0xFF9E );	 break;
		case 0x30D6:	ret = y( 0xFF8C, 0xFF9E );	 break;
		case 0x30D9:	ret = y( 0xFF8D, 0xFF9E );	 break;
		case 0x30DC:	ret = y( 0xFF8E, 0xFF9E );	 break;
		case 0x30D1:	ret = y( 0xFF8A, 0xFF9F );	 break; //semi voiced...
		case 0x30D4:	ret = y( 0xFF8B, 0xFF9F );	 break;
		case 0x30D7:	ret = y( 0xFF8C, 0xFF9F );	 break;
		case 0x30DA:	ret = y( 0xFF8D, 0xFF9F );	 break;
		case 0x30DD:	ret = y( 0xFF8E, 0xFF9F );	 break;

		default:
			;
	}
	
	return ret;
			
}

function mapvoicedhalfwidthkana( in_string ){

    if ( in_string == null )		return in_string;
    if ( in_string.length == null )		return in_string;
    if ( in_string.length < 2 )		return in_string;

    for( var pos = 1; pos < in_string.length; pos++ ) {
	
	var voiced = 0;
	var pc = in_string.charCodeAt(pos-1);
	var c = in_string.charCodeAt(pos)
	
	if ( c == 0xFF9E )	voiced = 1;	//voiced
	if ( c == 0xFF9F )	voiced = 2;	//semi-voiced

	var fwr = "";

	if ( voiced == 1 ) {
		switch( pc ) {
			case 0xFF69:	fwr= String.fromCharCode( 0x30F4 );	 break;
			case 0xFF76:	fwr= String.fromCharCode( 0x30AC );	 break;
			case 0xFF77:	fwr= String.fromCharCode( 0x30AE );	 break;
			case 0xFF78:	fwr= String.fromCharCode( 0x30B0 );	 break;
			case 0xFF79:	fwr= String.fromCharCode( 0x30B2 );	 break;
			case 0xFF7A:	fwr= String.fromCharCode( 0x30B4 );	 break;
			case 0xFF7B:	fwr= String.fromCharCode( 0x30B6 );	 break;
			case 0xFF7C:	fwr= String.fromCharCode( 0x30B8 );	 break;
			case 0xFF7D:	fwr= String.fromCharCode( 0x30BA );	 break;
			case 0xFF7E:	fwr= String.fromCharCode( 0x30BC );	 break;
			case 0xFF7F:	fwr= String.fromCharCode( 0x30BE );	 break;
			case 0xFF80:	fwr= String.fromCharCode( 0x30C0 );	 break;
			case 0xFF81:	fwr= String.fromCharCode( 0x30C2 );	 break;
			case 0xFF82:	fwr= String.fromCharCode( 0x30C5 );	 break;
			case 0xFF83:	fwr= String.fromCharCode( 0x30C7 );	 break;
			case 0xFF84:	fwr= String.fromCharCode( 0x30C9 );	 break;
			case 0xFF8A:	fwr= String.fromCharCode( 0x30D0 );	 break;
			case 0xFF8B:	fwr= String.fromCharCode( 0x30D3 );	 break;
			case 0xFF8C:	fwr= String.fromCharCode( 0x30D6 );	 break;
			case 0xFF8D:	fwr= String.fromCharCode( 0x30D9 );	 break;
			case 0xFF8E:	fwr= String.fromCharCode( 0x30DC );	 break;
			default:
				;
		}
	}

	if ( voiced == 2 ) {
		switch( pc ) {
			case 0xFF8A:	fwr= String.fromCharCode( 0x30D1 );	 break;
			case 0xFF8B:	fwr= String.fromCharCode( 0x30D4 );	 break;
			case 0xFF8C:	fwr= String.fromCharCode( 0x30D7 );	 break;
			case 0xFF8D:	fwr= String.fromCharCode( 0x30DA );	 break;
			case 0xFF8E:	fwr= String.fromCharCode( 0x30DD );	 break;
			default:
				;
		}
	}

    	if ( fwr != "" ) {
		if ( pos-1  == 0  )
			in_string = fwr + in_string.substr( pos+1 );
		else
			in_string = in_string.substr( 0, pos-1 ) + fwr + in_string.substr( pos+1 );
		pos--;
	} else {
		if ( voiced == 1 )
			in_string[pos] = String.fromCharCode( 0x309B );
		if ( voiced == 2 )
			in_string[pos] = String.fromCharCode( 0x309C );	
	}
    }
	return in_string;
}
// SIG // Begin signature block
// SIG // MIIbDwYJKoZIhvcNAQcCoIIbADCCGvwCAQExCzAJBgUr
// SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
// SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB
// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFGsBV5vpoiaX
// SIG // dEDDhPA7KKPmI9tLoIIV6jCCBIUwggNtoAMCAQICCmEF
// 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 // gjcCARUwIwYJKoZIhvcNAQkEMRYEFAWIAkPZfhvgObG5
// SIG // TrcYRdrdiSwOMF4GCisGAQQBgjcCAQwxUDBOoCaAJABN
// SIG // AGkAYwByAG8AcwBvAGYAdAAgAEwAZQBhAHIAbgBpAG4A
// SIG // Z6EkgCJodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vbGVh
// SIG // cm5pbmcgMA0GCSqGSIb3DQEBAQUABIIBACAwpJlNeJsr
// SIG // R5dhDuWQH+fg+IMfXj2HBmkt3d2+2zsqPikIj+ymf73j
// SIG // my/b5nUsPR8wbugBxTGzYVvH2YkrsboimaNRqPO0ggIA
// SIG // uUSS5YIjotTGlBMMfh4qSn+RY3Fbml8CaEv2WVjM9sS7
// SIG // HwLRhkFma4/qc1rYttOwmtdpVStd7o6M6uPwWTNXUl7N
// SIG // a7Qrfv3qeuqQHcekEgvhCHItx7k+Yw0EH6T0V4QP5Hnm
// SIG // //4MqO83ZYr6MDe2Ly82kiyyxeh8wdtdgbCluQE1ptPq
// SIG // WIxAlyJwQnB8gAcR0wW3GfvZPFLobm7g7TomN6dD1Ag6
// SIG // ltn8y+K09GXa2XQyQmwaMzihggIdMIICGQYJKoZIhvcN
// SIG // AQkGMYICCjCCAgYCAQEwgYUwdzELMAkGA1UEBhMCVVMx
// SIG // EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
// SIG // ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
// SIG // dGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFRpbWUtU3Rh
// SIG // bXAgUENBAgphFrUpAAAAAAAQMAcGBSsOAwIaoF0wGAYJ
// SIG // KoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0B
// SIG // CQUxDxcNMTAwMjE5MjIzNzM0WjAjBgkqhkiG9w0BCQQx
// SIG // FgQU7amJi0/kULjjx4RLR04bW7MMWRUwDQYJKoZIhvcN
// SIG // AQEFBQAEggEAgJH2U0GDn9retDDPuLL5i7sja6ooKYwe
// SIG // /71atEdMgvkRiuxfWHVEyxKmyfXRJQ8LYim/2pXORJJ2
// SIG // oxYnyk2ewAqC083l613Oj3T2EoRCHxgIu4g/X7iJDSjR
// SIG // fWDNrAT5bvX22yuHMne6GiNmG0O2KdR2+wOQ8/VJe0ha
// SIG // EfZbil9I0RSC/ZtLDn6jQXA8E0Nn9QTH4pB1+MnoxHkC
// SIG // VeOc9uRgM0tBYtPz3ZjjjU6/O3kE8UnkUOxUwA+LLxPx
// SIG // 0k9scWGPnGMx6iDIigkLQpcqRjyFI2fnJKu8lbenv+gh
// SIG // t1DeHM1tEDOY6LJNcoJ7M2+QGO7ro+XyBe20jt4Z48mVdw==
// SIG // End signature block
