pc: Integer;
public
- constructor Create (aklass: TClass);
+ constructor Create (aklass: TClass; const apfx: AnsiString='');
destructor Destroy (); override;
function get (obj: TObject; const fldname: AnsiString; out v: Variant): Boolean;
end;
+// ////////////////////////////////////////////////////////////////////////// //
+type
+ TExprConstList = class
+ public
+ function valid (const cname: AnsiString): Boolean; virtual; abstract;
+ function get (const cname: AnsiString; out v: Variant): Boolean; virtual; abstract;
+ end;
+
+
// ////////////////////////////////////////////////////////////////////////// //
type
TExprScope = class
class procedure errorfmt (const afmt: AnsiString; const args: array of const);
class procedure parseError (pr: TTextParser; const amsg: AnsiString);
- class procedure parseError (pr: TTextParser; const afmt: AnsiString; const args: array of const);
+ class procedure parseErrorFmt (pr: TTextParser; const afmt: AnsiString; const args: array of const);
- class function parse (pr: TTextParser; allowAssign: Boolean=false): TExprBase;
- class function parse (const str: AnsiString; allowAssign: Boolean=false): TExprBase;
- class function parseStatList (const str: AnsiString): TExprBase;
+ class function parse (clist: TExprConstList; pr: TTextParser; allowAssign: Boolean=false): TExprBase;
+ class function parse (clist: TExprConstList; const str: AnsiString; allowAssign: Boolean=false): TExprBase;
+ class function parseStatList (clist: TExprConstList; const str: AnsiString): TExprBase;
class function isFloat (var v: Variant): Boolean; inline;
class function isInt (var v: Variant): Boolean; inline;
public
constructor Create ();
destructor Destroy (); override;
+ procedure append (e: TExprBase);
function value (scope: TExprScope): Variant; override;
function toString (): AnsiString; override;
function clone (): TExprBase; override;
constructor Create (aval: Boolean);
constructor Create (aval: LongInt);
constructor Create (const aval: AnsiString);
+ constructor Create (var v: Variant);
function value (scope: TExprScope): Variant; override;
function toString (): AnsiString; override;
// ////////////////////////////////////////////////////////////////////////// //
-constructor TPropHash.Create (aklass: TClass);
+constructor TPropHash.Create (aklass: TClass; const apfx: AnsiString='');
var
pi: PTypeInfo;
pt: PTypeData;
idx: Integer;
+ n: AnsiString;
begin
mClass := aklass;
mNames := hashNewStrInt();
pt := GetTypeData(pi);
GetMem(pl, pt^.PropCount*sizeof(Pointer));
pc := GetPropList(pi, [tkInteger, tkBool, tkSString, tkLString, tkAString, {tkSet,} tkEnumeration], pl);
- for idx := 0 to pc-1 do mNames.put(pl^[idx].name, idx);
+ for idx := 0 to pc-1 do
+ begin
+ if (Length(apfx) > 0) then
+ begin
+ if (Length(pl^[idx].name) < Length(apfx)) then continue;
+ n := pl^[idx].name;
+ if (Copy(n, 1, Length(apfx)) <> apfx) then continue;
+ Delete(n, 1, Length(apfx));
+ mNames.put(n, idx);
+ end
+ else
+ begin
+ mNames.put(pl^[idx].name, idx);
+ end;
+ end;
end;
destructor TPropHash.Destroy ();
class procedure TExprBase.errorfmt (const afmt: AnsiString; const args: array of const); begin raise TExomaException.CreateFmt(afmt, args); end;
class procedure TExprBase.parseError (pr: TTextParser; const amsg: AnsiString); begin raise TExomaParseException.Create(pr, amsg); end;
-class procedure TExprBase.parseError (pr: TTextParser; const afmt: AnsiString; const args: array of const); begin raise TExomaParseException.CreateFmt(pr, afmt, args); end;
+class procedure TExprBase.parseErrorFmt (pr: TTextParser; const afmt: AnsiString; const args: array of const); begin raise TExomaParseException.CreateFmt(pr, afmt, args); end;
class function TExprBase.coerce2bool (var v0: Variant): Boolean;
begin
constructor TExprStatList.Create (); begin mList := nil; end;
destructor TExprStatList.Destroy (); var f: Integer; begin for f := 0 to High(mList) do mList[f].Free(); mList := nil; end;
+procedure TExprStatList.append (e: TExprBase);
+begin
+ if (e <> nil) then
+ begin
+ SetLength(mList, Length(mList)+1);
+ mList[High(mList)] := e;
+ end;
+end;
+
function TExprStatList.value (scope: TExprScope): Variant;
var
f: Integer;
constructor TLitExpr.Create (aval: Boolean); begin mValue := aval; end;
constructor TLitExpr.Create (aval: LongInt); begin mValue := aval; end;
constructor TLitExpr.Create (const aval: AnsiString); begin mValue := aval; end;
+constructor TLitExpr.Create (var v: Variant); begin mValue := v; end;
function TLitExpr.value (scope: TExprScope): Variant; begin result := mValue; end;
function TLitExpr.toString (): AnsiString; begin result := VarToStr(mValue); if isStr(mValue) then result := quoteStr(result); end;
function TLitExpr.clone (): TExprBase; begin result := TLitExpr.Create(0); (result as TLitExpr).mValue := mValue; end;
// ////////////////////////////////////////////////////////////////////////// //
-class function TExprBase.parse (const str: AnsiString; allowAssign: Boolean=false): TExprBase;
+class function TExprBase.parse (clist: TExprConstList; const str: AnsiString; allowAssign: Boolean=false): TExprBase;
var
pr: TTextParser;
begin
pr := TStrTextParser.Create(str);
try
- result := parse(pr, allowAssign);
+ result := parse(clist, pr, allowAssign);
if (pr.tokType <> pr.TTEOF) then begin result.Free(); parseError(pr, 'extra code in expression'); end;
finally
pr.Free();
end;
end;
-class function TExprBase.parseStatList (const str: AnsiString): TExprBase;
+class function TExprBase.parseStatList (clist: TExprConstList; const str: AnsiString): TExprBase;
var
- pr: TTextParser;
- r: TExprStatList;
- e: TExprBase;
+ pr: TTextParser = nil;
+ r: TExprStatList = nil;
+ e: TExprBase = nil;
begin
pr := TStrTextParser.Create(str);
if (pr.tokType = pr.TTEOF) then begin pr.Free(); result := nil; exit; end;
r := TExprStatList.Create();
result := nil;
try
- while true do
- begin
- while pr.eatTT(pr.TTSemi) do begin end;
- if (pr.tokType = pr.TTEOF) then break;
- e := parse(pr, true);
- if (e = nil) then break;
- SetLength(r.mList, Length(r.mList)+1);
- r.mList[High(r.mList)] := e;
- if (pr.tokType = pr.TTEOF) then break;
- pr.expectTT(pr.TTSemi);
+ try
+ while true do
+ begin
+ while pr.eatTT(pr.TTSemi) do begin end;
+ if (pr.tokType = pr.TTEOF) then break;
+ e := parse(clist, pr, true);
+ if (e = nil) then break;
+ //writeln(': ', e.toString());
+ r.append(e);
+ if (pr.tokType = pr.TTEOF) then break;
+ //writeln('tt=', pr.tokType, ' <', pr.tokStr, '>');
+ //writeln(r.toString());
+ pr.expectTT(pr.TTSemi);
+ end;
+ result := r;
+ r := nil;
+ except
+ on e: TExomaException do
+ raise TExomaParseException.Create(pr, e.message);
+ on e: Exception do
+ raise TExomaParseException.Create(pr, e.message);
+ else
+ raise;
end;
- result := r;
- r := nil;
finally
r.Free();
pr.Free();
end;
-class function TExprBase.parse (pr: TTextParser; allowAssign: Boolean=false): TExprBase;
+class function TExprBase.parse (clist: TExprConstList; pr: TTextParser; allowAssign: Boolean=false): TExprBase;
function expr (): TExprBase; forward;
function doTerm (): TExprBase;
+ var
+ id: AnsiString;
+ v: Variant;
begin
result := nil;
try
if (pr.tokStr = 'true') then begin result := TLitExpr.Create(true); pr.skipToken(); exit; end;
if (pr.tokStr = 'false') then begin result := TLitExpr.Create(false); pr.skipToken(); exit; end;
if (CompareText(pr.tokStr, 'true') = 0) or (CompareText(pr.tokStr, 'false') = 0) then parseError(pr, '`true` and `false` are case-sensitive');
- result := TObjExpr.Create(pr.expectId());
+ id := pr.expectId();
+ if (clist <> nil) then
+ begin
+ if clist.get(id, v) then
+ begin
+ result := TLitExpr.Create(v);
+ exit;
+ end;
+ if not clist.valid(id) then parseErrorFmt(pr, 'unknown identifier ''%s''', [id]);
+ end;
+ result := TObjExpr.Create(id);
while (pr.tokType = pr.TTDelim) and (pr.tokChar = '.') do
begin
pr.skipToken();
// &&
// ||
- function expr (): TExprBase;
+ function expr0 (): TExprBase;
var
- neg: Boolean = false;
+ neg: Boolean;
+ e: TExprBase = nil;
+ list: TExprStatList = nil;
begin
- if pr.eatDelim('-') then neg := true
- else if pr.eatDelim('+') then neg := false;
- result := doLogOr();
- if neg then result := TUnExprNeg.Create(result);
+ result := nil;
+ try
+ while true do
+ begin
+ if pr.eatDelim('-') then neg := true
+ else if pr.eatDelim('+') then neg := false
+ else neg := false;
+ e := doLogOr();
+ if neg then e := TUnExprNeg.Create(e);
+ if allowAssign and pr.eatDelim('=') then e := TBinAssign.Create(e, expr());
+ if not pr.eatTT(pr.TTComma) then
+ begin
+ if (result = nil) then result := e else list.append(e);
+ break;
+ end;
+ //assert(false);
+ if (list = nil) then
+ begin
+ list := TExprStatList.Create();
+ result := list;
+ end;
+ list.append(e);
+ e := nil;
+ end;
+ except
+ e.Free();
+ list.Free();
+ end;
end;
- function exprMain (): TExprBase;
+ function expr (): TExprBase;
var
- neg: Boolean = false;
c: TExprCond;
begin
- if pr.eatDelim('-') then neg := true
- else if pr.eatDelim('+') then neg := false;
- result := doLogOr();
- if neg then result := TUnExprNeg.Create(result);
+ result := expr0();
// ternary
if pr.eatDelim('?') then
begin
c := TExprCond.Create();
c.mCond := result;
try
- c.mTrue := exprMain();
+ c.mTrue := expr();
pr.expectTT(pr.TTColon);
- c.mFalse := exprMain();
+ c.mFalse := expr();
result := c;
except
c.Free();
try
pr.allowSignedNumbers := false;
try
- result := exprMain();
- if allowAssign and pr.eatDelim('=') then
- try
- result := TBinAssign.Create(result, expr());
- except
- result.Free();
- end;
+ result := expr();
finally
pr.allowSignedNumbers := oas;
end;
KEY_REDTEAM = 8;
KEY_BLUETEAM = 16;
+// HitType
+const
+ HIT_SOME = 0;
+ HIT_ROCKET = 1;
+ HIT_BFG = 2;
+ HIT_TRAP = 3;
+ HIT_FALL = 4;
+ HIT_WATER = 5;
+ HIT_ACID = 6;
+ HIT_ELECTRO = 7;
+ HIT_FLAME = 8;
+ HIT_SELF = 9;
+ HIT_DISCON = 10;
+
// TriggerScoreTeam
const
TRIGGER_SCORE_TEAM_MINE_RED = 0;
#32#47#47#32#49#10#32#32#75#69#89#95#71#82#69#69#78#44#32#47#47#32#50#10#32+
#32#75#69#89#95#66#76#85#69#44#32#47#47#32#52#10#32#32#75#69#89#95#82#69#68+
#84#69#65#77#44#32#47#47#32#56#10#32#32#75#69#89#95#66#76#85#69#84#69#65#77+
- #44#32#47#47#32#49#54#10#125#10#10#10#47#47#47#47#47#47#47#47#47#47#47#47#47+
+ #44#32#47#47#32#49#54#10#125#10#10#101#110#117#109#32#72#105#116#84#121#112+
+ #101#32#123#10#32#32#72#73#84#95#83#79#77#69#44#32#47#47#32#48#10#32#32#72+
+ #73#84#95#82#79#67#75#69#84#44#32#47#47#32#49#10#32#32#72#73#84#95#66#70#71+
+ #44#32#47#47#32#50#10#32#32#72#73#84#95#84#82#65#80#44#32#47#47#32#51#10#32+
+ #32#72#73#84#95#70#65#76#76#44#32#47#47#32#52#10#32#32#72#73#84#95#87#65#84+
+ #69#82#44#32#47#47#32#53#10#32#32#72#73#84#95#65#67#73#68#44#32#47#47#32#54+
+ #10#32#32#72#73#84#95#69#76#69#67#84#82#79#44#32#47#47#32#55#10#32#32#72#73+
+ #84#95#70#76#65#77#69#44#32#47#47#32#56#10#32#32#72#73#84#95#83#69#76#70#44+
+ #32#47#47#32#57#10#32#32#72#73#84#95#68#73#83#67#79#78#44#32#47#47#32#49#48+
+ #10#125#10#10#10#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
- #47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#10#47#47#32#118#97#114+
- #105#111#117#115#32#116#114#105#103#103#101#114#115#10#84#114#105#103#103+
- #101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#69#88#73#84+
- #32#123#10#32#32#34#109#97#112#34#32#116#121#112#101#32#99#104#97#114#91#49+
- #54#93#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100#101#102+
- #97#117#108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32+
- #102#111#114#32#84#82#73#71#71#69#82#95#84#69#76#69#80#79#82#84#32#123#10#32+
- #32#34#116#97#114#103#101#116#34#32#116#121#112#101#32#112#111#105#110#116+
- #32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100#101#102#97#117+
- #108#116#59#10#32#32#34#100#50#100#34#32#116#121#112#101#32#98#111#111#108+
- #32#111#102#102#115#101#116#32#56#32#100#101#102#97#117#108#116#32#102#97+
- #108#115#101#59#10#32#32#34#115#105#108#101#110#116#34#32#116#121#112#101#32+
- #98#111#111#108#32#111#102#102#115#101#116#32#57#32#100#101#102#97#117#108+
- #116#32#102#97#108#115#101#59#10#32#32#34#100#105#114#101#99#116#105#111#110+
- #34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32+
- #49#48#32#101#110#117#109#32#68#105#114#84#121#112#101#32#100#101#102#97#117+
- #108#116#32#68#73#82#95#76#69#70#84#59#10#125#10#10#84#114#105#103#103#101+
- #114#68#97#116#97#32#102#111#114#32#40#84#82#73#71#71#69#82#95#79#80#69#78+
- #68#79#79#82#44#32#84#82#73#71#71#69#82#95#67#76#79#83#69#68#79#79#82#44#32+
- #84#82#73#71#71#69#82#95#68#79#79#82#44#32#84#82#73#71#71#69#82#95#68#79#79+
- #82#53#44#32#84#82#73#71#71#69#82#95#67#76#79#83#69#84#82#65#80#44#32#84#82+
- #73#71#71#69#82#95#84#82#65#80#44#32#84#82#73#71#71#69#82#95#76#73#70#84#85+
- #80#44#32#84#82#73#71#71#69#82#95#76#73#70#84#68#79#87#78#44#32#84#82#73#71+
- #71#69#82#95#76#73#70#84#41#32#123#10#32#32#34#112#97#110#101#108#105#100#34+
- #32#116#121#112#101#32#105#110#116#32#111#102#102#115#101#116#32#48#32#112+
- #97#110#101#108#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32+
- #32#34#115#105#108#101#110#116#34#32#116#121#112#101#32#98#111#111#108#32+
- #111#102#102#115#101#116#32#52#32#100#101#102#97#117#108#116#32#102#97#108+
- #115#101#59#10#32#32#34#100#50#100#34#32#116#121#112#101#32#98#111#111#108+
- #32#111#102#102#115#101#116#32#53#32#100#101#102#97#117#108#116#32#102#97+
- #108#115#101#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102+
- #111#114#32#40#84#82#73#71#71#69#82#95#80#82#69#83#83#44#32#84#82#73#71#71+
- #69#82#95#79#78#44#32#84#82#73#71#71#69#82#95#79#70#70#44#32#84#82#73#71#71+
- #69#82#95#79#78#79#70#70#41#32#123#10#32#32#34#112#111#115#105#116#105#111+
- #110#34#32#116#121#112#101#32#112#111#105#110#116#32#111#102#102#115#101#116+
- #32#48#32#97#115#32#116#120#121#32#100#101#102#97#117#108#116#32#40#48#32#48+
- #41#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#115#105+
- #122#101#34#32#116#121#112#101#32#115#105#122#101#32#111#102#102#115#101#116+
- #32#56#32#97#115#32#116#119#104#32#100#101#102#97#117#108#116#32#40#48#32#48+
- #41#59#10#32#32#34#119#97#105#116#34#32#116#121#112#101#32#117#115#104#111+
- #114#116#32#111#102#102#115#101#116#32#49#50#32#100#101#102#97#117#108#116+
- #32#48#59#10#32#32#34#99#111#117#110#116#34#32#97#108#105#97#115#32#112#114+
- #101#115#115#67#111#117#110#116#32#116#121#112#101#32#117#115#104#111#114+
- #116#32#111#102#102#115#101#116#32#49#52#32#100#101#102#97#117#108#116#32#48+
- #59#10#32#32#34#109#111#110#115#116#101#114#105#100#34#32#116#121#112#101#32+
- #105#110#116#32#111#102#102#115#101#116#32#49#54#32#109#111#110#115#116#101+
- #114#32#97#115#32#109#111#110#115#116#101#114#105#100#32#100#101#102#97#117+
- #108#116#32#110#117#108#108#59#10#32#32#34#101#120#116#95#114#97#110#100#111+
- #109#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32+
- #50#48#32#100#101#102#97#117#108#116#32#102#97#108#115#101#59#10#32#32#47#47+
- #32#116#104#105#115#32#111#110#101#32#105#115#32#102#111#114#32#109#111#118+
- #105#110#103#32#112#108#97#116#102#111#114#109#115#10#32#32#34#112#97#110+
- #101#108#105#100#34#32#112#97#110#101#108#32#100#101#102#97#117#108#116#32+
- #110#117#108#108#59#10#32#32#34#115#105#108#101#110#116#34#32#116#121#112+
- #101#32#98#111#111#108#32#100#101#102#97#117#108#116#32#116#114#117#101#59+
- #10#32#32#34#115#111#117#110#100#34#32#116#121#112#101#32#115#116#114#105+
- #110#103#32#100#101#102#97#117#108#116#32#34#34#59#10#125#10#10#101#110#117+
- #109#32#84#114#105#103#103#101#114#83#99#111#114#101#84#101#97#109#32#123#10+
- #32#32#84#82#73#71#71#69#82#95#83#67#79#82#69#95#84#69#65#77#95#77#73#78#69+
- #95#82#69#68#44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82+
- #69#95#84#69#65#77#95#77#73#78#69#95#66#76#85#69#44#32#47#47#32#49#10#32#32+
- #84#82#73#71#71#69#82#95#83#67#79#82#69#95#84#69#65#77#95#70#79#82#67#69#95+
- #82#69#68#44#32#47#47#32#50#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82#69+
- #95#84#69#65#77#95#70#79#82#67#69#95#66#76#85#69#44#32#47#47#32#51#10#125#10+
- #10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71+
- #69#82#95#83#69#67#82#69#84#32#123#10#125#10#10#84#114#105#103#103#101#114+
- #68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#84#69#88#84#85#82#69+
- #32#123#10#32#32#34#97#99#116#105#118#97#116#101#95#111#110#99#101#34#32#116+
- #121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#48#32#100#101+
- #102#97#117#108#116#32#102#97#108#115#101#32#119#114#105#116#101#100#101#102+
- #97#117#108#116#59#10#32#32#34#97#110#105#109#97#116#101#95#111#110#99#101+
- #34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#49#32+
- #100#101#102#97#117#108#116#32#102#97#108#115#101#32#119#114#105#116#101#100+
- #101#102#97#117#108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116+
- #97#32#102#111#114#32#84#82#73#71#71#69#82#95#83#79#85#78#68#32#123#10#32#32+
- #34#115#111#117#110#100#95#110#97#109#101#34#32#116#121#112#101#32#99#104#97+
- #114#91#54#52#93#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100+
- #101#102#97#117#108#116#59#10#32#32#34#118#111#108#117#109#101#34#32#116#121+
- #112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#54#52#32#100+
- #101#102#97#117#108#116#32#48#32#119#114#105#116#101#100#101#102#97#117#108+
- #116#59#32#47#47#63#63#63#32#100#101#102#97#117#108#116#32#63#63#63#10#32#32+
- #34#112#97#110#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
- #115#101#116#32#54#53#32#100#101#102#97#117#108#116#32#48#59#10#32#32#34#108+
- #111#99#97#108#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115+
- #101#116#32#54#54#32#100#101#102#97#117#108#116#32#116#114#117#101#59#32#47+
- #47#63#63#63#32#100#101#102#97#117#108#116#32#63#63#63#10#32#32#34#112#108+
- #97#121#95#99#111#117#110#116#34#32#116#121#112#101#32#117#98#121#116#101#32+
- #111#102#102#115#101#116#32#54#55#32#100#101#102#97#117#108#116#32#49#59#10+
- #32#32#34#115#111#117#110#100#95#115#119#105#116#99#104#34#32#116#121#112+
- #101#32#98#111#111#108#32#111#102#102#115#101#116#32#54#56#32#100#101#102#97+
- #117#108#116#32#102#97#108#115#101#59#32#47#47#63#63#63#32#100#101#102#97+
- #117#108#116#32#63#63#63#10#125#10#10#84#114#105#103#103#101#114#68#97#116+
- #97#32#102#111#114#32#84#82#73#71#71#69#82#95#83#80#65#87#78#77#79#78#83#84+
- #69#82#32#123#10#32#32#34#112#111#115#105#116#105#111#110#34#32#116#121#112+
- #101#32#112#111#105#110#116#32#111#102#102#115#101#116#32#48#32#97#115#32+
- #116#120#121#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32+
- #34#116#121#112#101#34#32#97#108#105#97#115#32#115#112#97#119#110#77#111#110+
- #115#84#121#112#101#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
- #115#101#116#32#56#32#101#110#117#109#32#77#111#110#115#116#101#114#32#100+
- #101#102#97#117#108#116#32#77#79#78#83#84#69#82#95#73#77#80#32#119#114#105+
- #116#101#100#101#102#97#117#108#116#59#10#32#32#34#104#101#97#108#116#104#34+
- #32#116#121#112#101#32#105#110#116#32#111#102#102#115#101#116#32#49#50#32+
- #119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#100#105#114+
- #101#99#116#105#111#110#34#32#116#121#112#101#32#117#98#121#116#101#32#111+
- #102#102#115#101#116#32#49#54#32#101#110#117#109#32#68#105#114#84#121#112+
- #101#32#100#101#102#97#117#108#116#32#68#73#82#95#76#69#70#84#32#119#114#105+
- #116#101#100#101#102#97#117#108#116#59#10#32#32#34#97#99#116#105#118#101#34+
- #32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#49#55#32+
- #100#101#102#97#117#108#116#32#116#114#117#101#59#10#32#32#34#99#111#117#110+
- #116#34#32#97#108#105#97#115#32#109#111#110#115#67#111#117#110#116#32#116+
- #121#112#101#32#105#110#116#32#111#102#102#115#101#116#32#50#48#32#100#101+
- #102#97#117#108#116#32#49#32#119#114#105#116#101#100#101#102#97#117#108#116+
- #59#10#32#32#34#101#102#102#101#99#116#34#32#116#121#112#101#32#117#98#121+
- #116#101#32#111#102#102#115#101#116#32#50#52#32#101#110#117#109#32#69#102+
- #102#101#99#116#65#99#116#105#111#110#32#100#101#102#97#117#108#116#32#69#70+
- #70#69#67#84#95#78#79#78#69#32#119#114#105#116#101#100#101#102#97#117#108+
- #116#59#10#32#32#34#109#97#120#34#32#116#121#112#101#32#117#115#104#111#114+
- #116#32#111#102#102#115#101#116#32#50#54#32#100#101#102#97#117#108#116#32#49+
- #32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#100#101+
- #108#97#121#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102+
- #115#101#116#32#50#56#32#100#101#102#97#117#108#116#32#49#48#48#48#32#119+
- #114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#98#101#104#97#118+
- #105#111#117#114#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
- #115#101#116#32#51#48#32#101#110#117#109#32#77#111#110#115#116#101#114#66+
- #101#104#97#118#105#111#117#114#32#100#101#102#97#117#108#116#32#66#72#95#78+
- #79#82#77#65#76#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32+
- #102#111#114#32#84#82#73#71#71#69#82#95#83#80#65#87#78#73#84#69#77#32#123#10+
- #32#32#34#112#111#115#105#116#105#111#110#34#32#116#121#112#101#32#112#111+
- #105#110#116#32#111#102#102#115#101#116#32#48#32#97#115#32#116#120#121#32+
- #119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#116#121#112+
- #101#34#32#97#108#105#97#115#32#115#112#97#119#110#73#116#101#109#84#121#112+
- #101#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32+
- #56#32#101#110#117#109#32#73#116#101#109#32#100#101#102#97#117#108#116#32#73+
- #84#69#77#95#78#79#78#69#32#119#114#105#116#101#100#101#102#97#117#108#116+
- #59#10#32#32#34#103#114#97#118#105#116#121#34#32#116#121#112#101#32#98#111+
- #111#108#32#111#102#102#115#101#116#32#57#32#100#101#102#97#117#108#116#32+
- #116#114#117#101#59#10#32#32#34#100#109#111#110#108#121#34#32#116#121#112+
- #101#32#98#111#111#108#32#111#102#102#115#101#116#32#49#48#32#100#101#102#97+
- #117#108#116#32#102#97#108#115#101#59#10#32#32#34#99#111#117#110#116#34#32+
- #97#108#105#97#115#32#105#116#101#109#67#111#117#110#116#32#116#121#112#101+
- #32#105#110#116#32#111#102#102#115#101#116#32#49#50#32#100#101#102#97#117+
- #108#116#32#49#59#10#32#32#34#101#102#102#101#99#116#34#32#116#121#112#101+
- #32#117#98#121#116#101#32#111#102#102#115#101#116#32#49#54#32#101#110#117+
- #109#32#69#102#102#101#99#116#65#99#116#105#111#110#32#100#101#102#97#117+
- #108#116#32#69#70#70#69#67#84#95#78#79#78#69#32#119#114#105#116#101#100#101+
- #102#97#117#108#116#59#10#32#32#34#109#97#120#34#32#116#121#112#101#32#117+
- #115#104#111#114#116#32#111#102#102#115#101#116#32#49#56#32#100#101#102#97+
- #117#108#116#32#49#59#10#32#32#34#100#101#108#97#121#34#32#116#121#112#101+
- #32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#48#32#100#101+
- #102#97#117#108#116#32#49#48#48#48#32#119#114#105#116#101#100#101#102#97#117+
- #108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111+
- #114#32#84#82#73#71#71#69#82#95#77#85#83#73#67#32#123#10#32#32#34#110#97#109+
- #101#34#32#97#108#105#97#115#32#109#117#115#105#99#78#97#109#101#32#116#121+
- #112#101#32#99#104#97#114#91#54#52#93#32#111#102#102#115#101#116#32#48#32+
- #119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#97#99#116#105+
- #111#110#34#32#97#108#105#97#115#32#109#117#115#105#99#65#99#116#105#111#110+
- #32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#54+
- #52#32#101#110#117#109#32#84#114#105#103#103#101#114#77#117#115#105#99#65#99+
- #116#105#111#110#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#125+
- #10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71+
- #71#69#82#95#80#85#83#72#32#123#10#32#32#34#97#110#103#108#101#34#32#116#121+
- #112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#48#32#119+
- #114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#102#111#114#99+
- #101#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116+
- #32#50#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#114+
- #101#115#101#116#95#118#101#108#111#99#105#116#121#34#32#116#121#112#101#32+
- #98#111#111#108#32#111#102#102#115#101#116#32#51#32#100#101#102#97#117#108+
- #116#32#102#97#108#115#101#32#119#114#105#116#101#100#101#102#97#117#108#116+
- #59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32+
- #84#82#73#71#71#69#82#95#83#67#79#82#69#32#123#10#32#32#34#97#99#116#105#111+
- #110#34#32#97#108#105#97#115#32#115#99#111#114#101#65#99#116#105#111#110#32+
- #116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#48#32+
- #101#110#117#109#32#84#114#105#103#103#101#114#83#99#111#114#101#65#99#116+
- #105#111#110#32#100#101#102#97#117#108#116#32#84#82#73#71#71#69#82#95#83#67+
- #79#82#69#95#65#67#84#73#79#78#95#65#68#68#32#119#114#105#116#101#100#101+
- #102#97#117#108#116#59#10#32#32#34#99#111#117#110#116#34#32#97#108#105#97+
- #115#32#115#99#111#114#101#67#111#117#110#116#32#116#121#112#101#32#117#98+
- #121#116#101#32#111#102#102#115#101#116#32#49#32#100#101#102#97#117#108#116+
- #32#49#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#116+
- #101#97#109#34#32#97#108#105#97#115#32#115#99#111#114#101#84#101#97#109#32+
- #116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#50#32+
- #101#110#117#109#32#84#114#105#103#103#101#114#83#99#111#114#101#84#101#97+
- #109#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#99#111+
- #110#115#111#108#101#34#32#97#108#105#97#115#32#115#99#111#114#101#67#111+
- #110#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#51+
- #32#100#101#102#97#117#108#116#32#102#97#108#115#101#32#119#114#105#116#101+
- #100#101#102#97#117#108#116#59#10#32#32#34#109#101#115#115#97#103#101#34#32+
- #97#108#105#97#115#32#115#99#111#114#101#77#115#103#32#116#121#112#101#32#98+
- #111#111#108#32#111#102#102#115#101#116#32#52#32#100#101#102#97#117#108#116+
- #32#116#114#117#101#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
+ #47#47#47#47#47#47#47#47#47#47#10#47#47#32#118#97#114#105#111#117#115#32#116+
+ #114#105#103#103#101#114#115#10#84#114#105#103#103#101#114#68#97#116#97#32+
+ #102#111#114#32#84#82#73#71#71#69#82#95#69#88#73#84#32#123#10#32#32#34#109+
+ #97#112#34#32#116#121#112#101#32#99#104#97#114#91#49#54#93#32#111#102#102+
+ #115#101#116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82+
- #73#71#71#69#82#95#77#69#83#83#65#71#69#32#123#10#32#32#34#107#105#110#100+
+ #73#71#71#69#82#95#84#69#76#69#80#79#82#84#32#123#10#32#32#34#116#97#114#103+
+ #101#116#34#32#116#121#112#101#32#112#111#105#110#116#32#111#102#102#115#101+
+ #116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34+
+ #100#50#100#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101+
+ #116#32#56#32#100#101#102#97#117#108#116#32#102#97#108#115#101#59#10#32#32+
+ #34#115#105#108#101#110#116#34#32#116#121#112#101#32#98#111#111#108#32#111+
+ #102#102#115#101#116#32#57#32#100#101#102#97#117#108#116#32#102#97#108#115+
+ #101#59#10#32#32#34#100#105#114#101#99#116#105#111#110#34#32#116#121#112#101+
+ #32#117#98#121#116#101#32#111#102#102#115#101#116#32#49#48#32#101#110#117+
+ #109#32#68#105#114#84#121#112#101#32#100#101#102#97#117#108#116#32#68#73#82+
+ #95#76#69#70#84#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32+
+ #102#111#114#32#40#84#82#73#71#71#69#82#95#79#80#69#78#68#79#79#82#44#32#84+
+ #82#73#71#71#69#82#95#67#76#79#83#69#68#79#79#82#44#32#84#82#73#71#71#69#82+
+ #95#68#79#79#82#44#32#84#82#73#71#71#69#82#95#68#79#79#82#53#44#32#84#82#73+
+ #71#71#69#82#95#67#76#79#83#69#84#82#65#80#44#32#84#82#73#71#71#69#82#95#84+
+ #82#65#80#44#32#84#82#73#71#71#69#82#95#76#73#70#84#85#80#44#32#84#82#73#71+
+ #71#69#82#95#76#73#70#84#68#79#87#78#44#32#84#82#73#71#71#69#82#95#76#73#70+
+ #84#41#32#123#10#32#32#34#112#97#110#101#108#105#100#34#32#116#121#112#101+
+ #32#105#110#116#32#111#102#102#115#101#116#32#48#32#112#97#110#101#108#32+
+ #119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#115#105#108+
+ #101#110#116#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101+
+ #116#32#52#32#100#101#102#97#117#108#116#32#102#97#108#115#101#59#10#32#32+
+ #34#100#50#100#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115+
+ #101#116#32#53#32#100#101#102#97#117#108#116#32#102#97#108#115#101#59#10#125+
+ #10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#40#84#82#73+
+ #71#71#69#82#95#80#82#69#83#83#44#32#84#82#73#71#71#69#82#95#79#78#44#32#84+
+ #82#73#71#71#69#82#95#79#70#70#44#32#84#82#73#71#71#69#82#95#79#78#79#70#70+
+ #41#32#123#10#32#32#34#112#111#115#105#116#105#111#110#34#32#116#121#112#101+
+ #32#112#111#105#110#116#32#111#102#102#115#101#116#32#48#32#97#115#32#116+
+ #120#121#32#100#101#102#97#117#108#116#32#40#48#32#48#41#32#119#114#105#116+
+ #101#100#101#102#97#117#108#116#59#10#32#32#34#115#105#122#101#34#32#116#121+
+ #112#101#32#115#105#122#101#32#111#102#102#115#101#116#32#56#32#97#115#32+
+ #116#119#104#32#100#101#102#97#117#108#116#32#40#48#32#48#41#59#10#32#32#34+
+ #119#97#105#116#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102+
+ #102#115#101#116#32#49#50#32#100#101#102#97#117#108#116#32#48#59#10#32#32#34+
+ #99#111#117#110#116#34#32#97#108#105#97#115#32#112#114#101#115#115#67#111+
+ #117#110#116#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102+
+ #115#101#116#32#49#52#32#100#101#102#97#117#108#116#32#48#59#10#32#32#34#109+
+ #111#110#115#116#101#114#105#100#34#32#116#121#112#101#32#105#110#116#32#111+
+ #102#102#115#101#116#32#49#54#32#109#111#110#115#116#101#114#32#97#115#32+
+ #109#111#110#115#116#101#114#105#100#32#100#101#102#97#117#108#116#32#110+
+ #117#108#108#59#10#32#32#34#101#120#116#95#114#97#110#100#111#109#34#32#116+
+ #121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#50#48#32#100+
+ #101#102#97#117#108#116#32#102#97#108#115#101#59#10#32#32#47#47#32#116#104+
+ #105#115#32#111#110#101#32#105#115#32#102#111#114#32#109#111#118#105#110#103+
+ #32#112#108#97#116#102#111#114#109#115#10#32#32#34#112#97#110#101#108#105+
+ #100#34#32#112#97#110#101#108#32#100#101#102#97#117#108#116#32#110#117#108+
+ #108#59#10#32#32#34#115#105#108#101#110#116#34#32#116#121#112#101#32#98#111+
+ #111#108#32#100#101#102#97#117#108#116#32#116#114#117#101#59#10#32#32#34#115+
+ #111#117#110#100#34#32#116#121#112#101#32#115#116#114#105#110#103#32#100#101+
+ #102#97#117#108#116#32#34#34#59#10#125#10#10#101#110#117#109#32#84#114#105+
+ #103#103#101#114#83#99#111#114#101#84#101#97#109#32#123#10#32#32#84#82#73#71+
+ #71#69#82#95#83#67#79#82#69#95#84#69#65#77#95#77#73#78#69#95#82#69#68#44#32+
+ #47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82#69#95#84#69#65#77+
+ #95#77#73#78#69#95#66#76#85#69#44#32#47#47#32#49#10#32#32#84#82#73#71#71#69+
+ #82#95#83#67#79#82#69#95#84#69#65#77#95#70#79#82#67#69#95#82#69#68#44#32#47+
+ #47#32#50#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82#69#95#84#69#65#77#95+
+ #70#79#82#67#69#95#66#76#85#69#44#32#47#47#32#51#10#125#10#10#84#114#105#103+
+ #103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#83#69#67+
+ #82#69#84#32#123#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102+
+ #111#114#32#84#82#73#71#71#69#82#95#84#69#88#84#85#82#69#32#123#10#32#32#34+
+ #97#99#116#105#118#97#116#101#95#111#110#99#101#34#32#116#121#112#101#32#98+
+ #111#111#108#32#111#102#102#115#101#116#32#48#32#100#101#102#97#117#108#116+
+ #32#102#97#108#115#101#32#119#114#105#116#101#100#101#102#97#117#108#116#59+
+ #10#32#32#34#97#110#105#109#97#116#101#95#111#110#99#101#34#32#116#121#112+
+ #101#32#98#111#111#108#32#111#102#102#115#101#116#32#49#32#100#101#102#97+
+ #117#108#116#32#102#97#108#115#101#32#119#114#105#116#101#100#101#102#97#117+
+ #108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111+
+ #114#32#84#82#73#71#71#69#82#95#83#79#85#78#68#32#123#10#32#32#34#115#111+
+ #117#110#100#95#110#97#109#101#34#32#116#121#112#101#32#99#104#97#114#91#54+
+ #52#93#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100#101#102+
+ #97#117#108#116#59#10#32#32#34#118#111#108#117#109#101#34#32#116#121#112#101+
+ #32#117#98#121#116#101#32#111#102#102#115#101#116#32#54#52#32#100#101#102#97+
+ #117#108#116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#32+
+ #47#47#63#63#63#32#100#101#102#97#117#108#116#32#63#63#63#10#32#32#34#112#97+
+ #110#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116+
+ #32#54#53#32#100#101#102#97#117#108#116#32#48#59#10#32#32#34#108#111#99#97+
+ #108#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32+
+ #54#54#32#100#101#102#97#117#108#116#32#116#114#117#101#59#32#47#47#63#63#63+
+ #32#100#101#102#97#117#108#116#32#63#63#63#10#32#32#34#112#108#97#121#95#99+
+ #111#117#110#116#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
+ #115#101#116#32#54#55#32#100#101#102#97#117#108#116#32#49#59#10#32#32#34#115+
+ #111#117#110#100#95#115#119#105#116#99#104#34#32#116#121#112#101#32#98#111+
+ #111#108#32#111#102#102#115#101#116#32#54#56#32#100#101#102#97#117#108#116+
+ #32#102#97#108#115#101#59#32#47#47#63#63#63#32#100#101#102#97#117#108#116#32+
+ #63#63#63#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111+
+ #114#32#84#82#73#71#71#69#82#95#83#80#65#87#78#77#79#78#83#84#69#82#32#123+
+ #10#32#32#34#112#111#115#105#116#105#111#110#34#32#116#121#112#101#32#112+
+ #111#105#110#116#32#111#102#102#115#101#116#32#48#32#97#115#32#116#120#121+
+ #32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#116#121+
+ #112#101#34#32#97#108#105#97#115#32#115#112#97#119#110#77#111#110#115#84#121+
+ #112#101#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116+
+ #32#56#32#101#110#117#109#32#77#111#110#115#116#101#114#32#100#101#102#97+
+ #117#108#116#32#77#79#78#83#84#69#82#95#73#77#80#32#119#114#105#116#101#100+
+ #101#102#97#117#108#116#59#10#32#32#34#104#101#97#108#116#104#34#32#116#121+
+ #112#101#32#105#110#116#32#111#102#102#115#101#116#32#49#50#32#119#114#105+
+ #116#101#100#101#102#97#117#108#116#59#10#32#32#34#100#105#114#101#99#116+
+ #105#111#110#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115+
+ #101#116#32#49#54#32#101#110#117#109#32#68#105#114#84#121#112#101#32#100#101+
+ #102#97#117#108#116#32#68#73#82#95#76#69#70#84#32#119#114#105#116#101#100+
+ #101#102#97#117#108#116#59#10#32#32#34#97#99#116#105#118#101#34#32#116#121+
+ #112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#49#55#32#100#101+
+ #102#97#117#108#116#32#116#114#117#101#59#10#32#32#34#99#111#117#110#116#34+
+ #32#97#108#105#97#115#32#109#111#110#115#67#111#117#110#116#32#116#121#112+
+ #101#32#105#110#116#32#111#102#102#115#101#116#32#50#48#32#100#101#102#97+
+ #117#108#116#32#49#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
+ #32#32#34#101#102#102#101#99#116#34#32#116#121#112#101#32#117#98#121#116#101+
+ #32#111#102#102#115#101#116#32#50#52#32#101#110#117#109#32#69#102#102#101#99+
+ #116#65#99#116#105#111#110#32#100#101#102#97#117#108#116#32#69#70#70#69#67+
+ #84#95#78#79#78#69#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
+ #32#32#34#109#97#120#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111+
+ #102#102#115#101#116#32#50#54#32#100#101#102#97#117#108#116#32#49#32#119#114+
+ #105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#100#101#108#97#121#34+
+ #32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32+
+ #50#56#32#100#101#102#97#117#108#116#32#49#48#48#48#32#119#114#105#116#101+
+ #100#101#102#97#117#108#116#59#10#32#32#34#98#101#104#97#118#105#111#117#114+
#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32+
- #48#32#101#110#117#109#32#84#114#105#103#103#101#114#77#101#115#115#97#103+
- #101#75#105#110#100#32#100#101#102#97#117#108#116#32#84#82#73#71#71#69#82#95+
- #77#69#83#83#65#71#69#95#75#73#78#68#95#71#65#77#69#32#119#114#105#116#101+
- #100#101#102#97#117#108#116#59#10#32#32#34#100#101#115#116#34#32#97#108#105+
- #97#115#32#109#115#103#68#101#115#116#32#116#121#112#101#32#117#98#121#116+
- #101#32#101#110#117#109#32#84#114#105#103#103#101#114#77#101#115#115#97#103+
- #101#68#101#115#116#32#111#102#102#115#101#116#32#49#59#10#32#32#34#116#101+
- #120#116#34#32#116#121#112#101#32#99#104#97#114#91#49#48#48#93#32#111#102+
+ #51#48#32#101#110#117#109#32#77#111#110#115#116#101#114#66#101#104#97#118+
+ #105#111#117#114#32#100#101#102#97#117#108#116#32#66#72#95#78#79#82#77#65#76+
+ #59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32+
+ #84#82#73#71#71#69#82#95#83#80#65#87#78#73#84#69#77#32#123#10#32#32#34#112+
+ #111#115#105#116#105#111#110#34#32#116#121#112#101#32#112#111#105#110#116#32+
+ #111#102#102#115#101#116#32#48#32#97#115#32#116#120#121#32#119#114#105#116+
+ #101#100#101#102#97#117#108#116#59#10#32#32#34#116#121#112#101#34#32#97#108+
+ #105#97#115#32#115#112#97#119#110#73#116#101#109#84#121#112#101#32#116#121+
+ #112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#56#32#101#110+
+ #117#109#32#73#116#101#109#32#100#101#102#97#117#108#116#32#73#84#69#77#95+
+ #78#79#78#69#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32+
+ #34#103#114#97#118#105#116#121#34#32#116#121#112#101#32#98#111#111#108#32+
+ #111#102#102#115#101#116#32#57#32#100#101#102#97#117#108#116#32#116#114#117+
+ #101#59#10#32#32#34#100#109#111#110#108#121#34#32#116#121#112#101#32#98#111+
+ #111#108#32#111#102#102#115#101#116#32#49#48#32#100#101#102#97#117#108#116+
+ #32#102#97#108#115#101#59#10#32#32#34#99#111#117#110#116#34#32#97#108#105#97+
+ #115#32#105#116#101#109#67#111#117#110#116#32#116#121#112#101#32#105#110#116+
+ #32#111#102#102#115#101#116#32#49#50#32#100#101#102#97#117#108#116#32#49#59+
+ #10#32#32#34#101#102#102#101#99#116#34#32#116#121#112#101#32#117#98#121#116+
+ #101#32#111#102#102#115#101#116#32#49#54#32#101#110#117#109#32#69#102#102+
+ #101#99#116#65#99#116#105#111#110#32#100#101#102#97#117#108#116#32#69#70#70+
+ #69#67#84#95#78#79#78#69#32#119#114#105#116#101#100#101#102#97#117#108#116+
+ #59#10#32#32#34#109#97#120#34#32#116#121#112#101#32#117#115#104#111#114#116+
+ #32#111#102#102#115#101#116#32#49#56#32#100#101#102#97#117#108#116#32#49#59+
+ #10#32#32#34#100#101#108#97#121#34#32#116#121#112#101#32#117#115#104#111#114+
+ #116#32#111#102#102#115#101#116#32#50#48#32#100#101#102#97#117#108#116#32#49+
+ #48#48#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#125#10#10+
+ #84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69+
+ #82#95#77#85#83#73#67#32#123#10#32#32#34#110#97#109#101#34#32#97#108#105#97+
+ #115#32#109#117#115#105#99#78#97#109#101#32#116#121#112#101#32#99#104#97#114+
+ #91#54#52#93#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100#101+
+ #102#97#117#108#116#59#10#32#32#34#97#99#116#105#111#110#34#32#97#108#105#97+
+ #115#32#109#117#115#105#99#65#99#116#105#111#110#32#116#121#112#101#32#117+
+ #98#121#116#101#32#111#102#102#115#101#116#32#54#52#32#101#110#117#109#32#84+
+ #114#105#103#103#101#114#77#117#115#105#99#65#99#116#105#111#110#32#119#114+
+ #105#116#101#100#101#102#97#117#108#116#59#10#125#10#10#84#114#105#103#103+
+ #101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#80#85#83#72+
+ #32#123#10#32#32#34#97#110#103#108#101#34#32#116#121#112#101#32#117#115#104+
+ #111#114#116#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100#101+
+ #102#97#117#108#116#59#10#32#32#34#102#111#114#99#101#34#32#116#121#112#101+
+ #32#117#98#121#116#101#32#111#102#102#115#101#116#32#50#32#119#114#105#116+
+ #101#100#101#102#97#117#108#116#59#10#32#32#34#114#101#115#101#116#95#118+
+ #101#108#111#99#105#116#121#34#32#116#121#112#101#32#98#111#111#108#32#111+
+ #102#102#115#101#116#32#51#32#100#101#102#97#117#108#116#32#102#97#108#115+
+ #101#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#125#10#10#84+
+ #114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82+
+ #95#83#67#79#82#69#32#123#10#32#32#34#97#99#116#105#111#110#34#32#97#108#105+
+ #97#115#32#115#99#111#114#101#65#99#116#105#111#110#32#116#121#112#101#32+
+ #117#98#121#116#101#32#111#102#102#115#101#116#32#48#32#101#110#117#109#32+
+ #84#114#105#103#103#101#114#83#99#111#114#101#65#99#116#105#111#110#32#100+
+ #101#102#97#117#108#116#32#84#82#73#71#71#69#82#95#83#67#79#82#69#95#65#67+
+ #84#73#79#78#95#65#68#68#32#119#114#105#116#101#100#101#102#97#117#108#116+
+ #59#10#32#32#34#99#111#117#110#116#34#32#97#108#105#97#115#32#115#99#111#114+
+ #101#67#111#117#110#116#32#116#121#112#101#32#117#98#121#116#101#32#111#102+
+ #102#115#101#116#32#49#32#100#101#102#97#117#108#116#32#49#32#119#114#105+
+ #116#101#100#101#102#97#117#108#116#59#10#32#32#34#116#101#97#109#34#32#97+
+ #108#105#97#115#32#115#99#111#114#101#84#101#97#109#32#116#121#112#101#32+
+ #117#98#121#116#101#32#111#102#102#115#101#116#32#50#32#101#110#117#109#32+
+ #84#114#105#103#103#101#114#83#99#111#114#101#84#101#97#109#32#119#114#105+
+ #116#101#100#101#102#97#117#108#116#59#10#32#32#34#99#111#110#115#111#108+
+ #101#34#32#97#108#105#97#115#32#115#99#111#114#101#67#111#110#32#116#121#112+
+ #101#32#98#111#111#108#32#111#102#102#115#101#116#32#51#32#100#101#102#97+
+ #117#108#116#32#102#97#108#115#101#32#119#114#105#116#101#100#101#102#97#117+
+ #108#116#59#10#32#32#34#109#101#115#115#97#103#101#34#32#97#108#105#97#115+
+ #32#115#99#111#114#101#77#115#103#32#116#121#112#101#32#98#111#111#108#32+
+ #111#102#102#115#101#116#32#52#32#100#101#102#97#117#108#116#32#116#114#117+
+ #101#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#125#10#10#84+
+ #114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82+
+ #95#77#69#83#83#65#71#69#32#123#10#32#32#34#107#105#110#100#34#32#116#121+
+ #112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#48#32#101#110+
+ #117#109#32#84#114#105#103#103#101#114#77#101#115#115#97#103#101#75#105#110+
+ #100#32#100#101#102#97#117#108#116#32#84#82#73#71#71#69#82#95#77#69#83#83#65+
+ #71#69#95#75#73#78#68#95#71#65#77#69#32#119#114#105#116#101#100#101#102#97+
+ #117#108#116#59#10#32#32#34#100#101#115#116#34#32#97#108#105#97#115#32#109+
+ #115#103#68#101#115#116#32#116#121#112#101#32#117#98#121#116#101#32#101#110+
+ #117#109#32#84#114#105#103#103#101#114#77#101#115#115#97#103#101#68#101#115+
+ #116#32#111#102#102#115#101#116#32#49#59#10#32#32#34#116#101#120#116#34#32+
+ #116#121#112#101#32#99#104#97#114#91#49#48#48#93#32#111#102#102#115#101#116+
+ #32#50#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#116+
+ #105#109#101#34#32#97#108#105#97#115#32#109#115#103#84#105#109#101#32#116+
+ #121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#49#48+
+ #50#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#125#10#10#84#114+
+ #105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95+
+ #68#65#77#65#71#69#32#123#10#32#32#34#97#109#111#117#110#116#34#32#116#121+
+ #112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#48#32#119+
+ #114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#105#110#116#101+
+ #114#118#97#108#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102+
#102#115#101#116#32#50#32#119#114#105#116#101#100#101#102#97#117#108#116#59+
- #10#32#32#34#116#105#109#101#34#32#97#108#105#97#115#32#109#115#103#84#105+
- #109#101#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115+
- #101#116#32#49#48#50#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
+ #10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84+
+ #82#73#71#71#69#82#95#72#69#65#76#84#72#32#123#10#32#32#34#97#109#111#117+
+ #110#116#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115+
+ #101#116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32+
+ #34#105#110#116#101#114#118#97#108#34#32#116#121#112#101#32#117#115#104#111+
+ #114#116#32#111#102#102#115#101#116#32#50#32#119#114#105#116#101#100#101#102+
+ #97#117#108#116#59#10#32#32#34#109#97#120#34#32#97#108#105#97#115#32#104#101+
+ #97#108#77#97#120#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115+
+ #101#116#32#52#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32+
+ #34#115#105#108#101#110#116#34#32#116#121#112#101#32#98#111#111#108#32#111+
+ #102#102#115#101#116#32#53#32#119#114#105#116#101#100#101#102#97#117#108#116+
+ #59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32+
+ #84#82#73#71#71#69#82#95#83#72#79#84#32#123#10#32#32#34#112#111#115#105#116+
+ #105#111#110#34#32#116#121#112#101#32#112#111#105#110#116#32#111#102#102#115+
+ #101#116#32#48#32#97#115#32#116#120#121#32#119#114#105#116#101#100#101#102+
+ #97#117#108#116#59#10#32#32#34#116#121#112#101#34#32#97#108#105#97#115#32+
+ #115#104#111#116#84#121#112#101#32#116#121#112#101#32#117#98#121#116#101#32+
+ #111#102#102#115#101#116#32#56#32#101#110#117#109#32#84#114#105#103#103#101+
+ #114#83#104#111#116#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
+ #32#32#34#116#97#114#103#101#116#34#32#97#108#105#97#115#32#115#104#111#116+
+ #84#97#114#103#101#116#32#116#121#112#101#32#117#98#121#116#101#32#111#102+
+ #102#115#101#116#32#57#32#101#110#117#109#32#84#114#105#103#103#101#114#83+
+ #104#111#116#84#97#114#103#101#116#32#119#114#105#116#101#100#101#102#97#117+
+ #108#116#59#10#32#32#34#113#117#105#101#116#34#32#116#121#112#101#32#110#101+
+ #103#98#111#111#108#32#111#102#102#115#101#116#32#49#48#59#32#47#47#32#110+
+ #101#103#98#111#111#108#33#10#32#32#34#97#105#109#34#32#116#121#112#101#32+
+ #98#121#116#101#32#111#102#102#115#101#116#32#49#49#32#101#110#117#109#32#84+
+ #114#105#103#103#101#114#83#104#111#116#65#105#109#32#100#101#102#97#117#108+
+ #116#32#84#82#73#71#71#69#82#95#83#72#79#84#95#65#73#77#95#68#69#70#65#85#76+
+ #84#59#10#32#32#34#112#97#110#101#108#105#100#34#32#116#121#112#101#32#105+
+ #110#116#32#111#102#102#115#101#116#32#49#50#32#112#97#110#101#108#32#100+
+ #101#102#97#117#108#116#32#110#117#108#108#32#119#114#105#116#101#100#101+
+ #102#97#117#108#116#59#10#32#32#34#115#105#103#104#116#34#32#116#121#112#101+
+ #32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#49#54#59#10#32#32+
+ #34#97#110#103#108#101#34#32#116#121#112#101#32#117#115#104#111#114#116#32+
+ #111#102#102#115#101#116#32#49#56#59#10#32#32#34#119#97#105#116#34#32#116+
+ #121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#48+
+ #59#10#32#32#34#97#99#99#117#114#97#99#121#34#32#116#121#112#101#32#117#115+
+ #104#111#114#116#32#111#102#102#115#101#116#32#50#50#59#10#32#32#34#97#109+
+ #109#111#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115+
+ #101#116#32#50#52#59#10#32#32#34#114#101#108#111#97#100#34#32#116#121#112+
+ #101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#54#59#10+
#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82+
- #73#71#71#69#82#95#68#65#77#65#71#69#32#123#10#32#32#34#97#109#111#117#110+
- #116#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101+
- #116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34+
- #105#110#116#101#114#118#97#108#34#32#116#121#112#101#32#117#115#104#111#114+
- #116#32#111#102#102#115#101#116#32#50#32#119#114#105#116#101#100#101#102#97+
- #117#108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102+
- #111#114#32#84#82#73#71#71#69#82#95#72#69#65#76#84#72#32#123#10#32#32#34#97+
- #109#111#117#110#116#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111+
- #102#102#115#101#116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116+
- #59#10#32#32#34#105#110#116#101#114#118#97#108#34#32#116#121#112#101#32#117+
- #115#104#111#114#116#32#111#102#102#115#101#116#32#50#32#119#114#105#116#101+
- #100#101#102#97#117#108#116#59#10#32#32#34#109#97#120#34#32#97#108#105#97+
- #115#32#104#101#97#108#77#97#120#32#116#121#112#101#32#98#111#111#108#32#111+
- #102#102#115#101#116#32#52#32#119#114#105#116#101#100#101#102#97#117#108#116+
- #59#10#32#32#34#115#105#108#101#110#116#34#32#116#121#112#101#32#98#111#111+
- #108#32#111#102#102#115#101#116#32#53#32#119#114#105#116#101#100#101#102#97+
- #117#108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102+
- #111#114#32#84#82#73#71#71#69#82#95#83#72#79#84#32#123#10#32#32#34#112#111+
- #115#105#116#105#111#110#34#32#116#121#112#101#32#112#111#105#110#116#32#111+
- #102#102#115#101#116#32#48#32#97#115#32#116#120#121#32#119#114#105#116#101+
+ #73#71#71#69#82#95#69#70#70#69#67#84#32#123#10#32#32#34#99#111#117#110#116+
+ #34#32#97#108#105#97#115#32#70#88#67#111#117#110#116#32#116#121#112#101#32+
+ #117#98#121#116#101#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101+
#100#101#102#97#117#108#116#59#10#32#32#34#116#121#112#101#34#32#97#108#105+
- #97#115#32#115#104#111#116#84#121#112#101#32#116#121#112#101#32#117#98#121+
- #116#101#32#111#102#102#115#101#116#32#56#32#101#110#117#109#32#84#114#105+
- #103#103#101#114#83#104#111#116#32#119#114#105#116#101#100#101#102#97#117+
- #108#116#59#10#32#32#34#116#97#114#103#101#116#34#32#97#108#105#97#115#32+
- #115#104#111#116#84#97#114#103#101#116#32#116#121#112#101#32#117#98#121#116+
- #101#32#111#102#102#115#101#116#32#57#32#101#110#117#109#32#84#114#105#103+
- #103#101#114#83#104#111#116#84#97#114#103#101#116#32#119#114#105#116#101#100+
- #101#102#97#117#108#116#59#10#32#32#34#113#117#105#101#116#34#32#116#121#112+
- #101#32#110#101#103#98#111#111#108#32#111#102#102#115#101#116#32#49#48#59#32+
- #47#47#32#110#101#103#98#111#111#108#33#10#32#32#34#97#105#109#34#32#116#121+
- #112#101#32#98#121#116#101#32#111#102#102#115#101#116#32#49#49#32#101#110+
- #117#109#32#84#114#105#103#103#101#114#83#104#111#116#65#105#109#32#100#101+
- #102#97#117#108#116#32#84#82#73#71#71#69#82#95#83#72#79#84#95#65#73#77#95#68+
- #69#70#65#85#76#84#59#10#32#32#34#112#97#110#101#108#105#100#34#32#116#121+
- #112#101#32#105#110#116#32#111#102#102#115#101#116#32#49#50#32#112#97#110+
- #101#108#32#100#101#102#97#117#108#116#32#110#117#108#108#32#119#114#105#116+
- #101#100#101#102#97#117#108#116#59#10#32#32#34#115#105#103#104#116#34#32#116+
- #121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#49#54+
- #59#10#32#32#34#97#110#103#108#101#34#32#116#121#112#101#32#117#115#104#111+
- #114#116#32#111#102#102#115#101#116#32#49#56#59#10#32#32#34#119#97#105#116+
- #34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116+
- #32#50#48#59#10#32#32#34#97#99#99#117#114#97#99#121#34#32#116#121#112#101#32+
- #117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#50#59#10#32#32#34+
- #97#109#109#111#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102+
- #102#115#101#116#32#50#52#59#10#32#32#34#114#101#108#111#97#100#34#32#116+
- #121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#54+
- #59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32+
- #84#82#73#71#71#69#82#95#69#70#70#69#67#84#32#123#10#32#32#34#99#111#117#110+
- #116#34#32#97#108#105#97#115#32#70#88#67#111#117#110#116#32#116#121#112#101+
- #32#117#98#121#116#101#32#111#102#102#115#101#116#32#48#32#119#114#105#116+
- #101#100#101#102#97#117#108#116#59#10#32#32#34#116#121#112#101#34#32#97#108+
- #105#97#115#32#70#88#84#121#112#101#32#116#121#112#101#32#117#98#121#116#101+
- #32#111#102#102#115#101#116#32#49#32#101#110#117#109#32#84#114#105#103#103+
- #101#114#69#102#102#101#99#116#32#100#101#102#97#117#108#116#32#84#82#73#71+
- #71#69#82#95#69#70#70#69#67#84#95#80#65#82#84#73#67#76#69#32#119#114#105#116+
+ #97#115#32#70#88#84#121#112#101#32#116#121#112#101#32#117#98#121#116#101#32+
+ #111#102#102#115#101#116#32#49#32#101#110#117#109#32#84#114#105#103#103#101+
+ #114#69#102#102#101#99#116#32#100#101#102#97#117#108#116#32#84#82#73#71#71+
+ #69#82#95#69#70#70#69#67#84#95#80#65#82#84#73#67#76#69#32#119#114#105#116+
#101#100#101#102#97#117#108#116#59#10#32#32#34#115#117#98#116#121#112#101#34+
#32#97#108#105#97#115#32#70#88#83#117#98#84#121#112#101#32#116#121#112#101+
#32#117#98#121#116#101#32#111#102#102#115#101#116#32#50#32#101#110#117#109+