Вариации на тему...
Полный цикл с объявлением процедур.
Add(MainForm,2953706,21,105)
{
Width=637
Height=573
Caption="dll2pas"
}
Add(Memo,9902921,140,112)
{
Top=60
Width=620
Height=465
Align=5
FileName="PROCS.txt"
Strings=#79:function BASS_SetConfig(option, value: DWORD): BOOL; stdcall; external bassdll;|73:function BASS_GetConfig(option: DWORD): DWORD; stdcall; external bassdll;|91:function BASS_SetConfigPtr(option: DWORD; value: Pointer): BOOL; stdcall; external bassdll;|78:function BASS_GetConfigPtr(option: DWORD): Pointer; stdcall; external bassdll;|59:function BASS_GetVersion: DWORD; stdcall; external bassdll;|63:function BASS_ErrorGetCode: Integer; stdcall; external bassdll;|103:function BASS_GetDeviceInfo(device: DWORD; var info: BASS_DEVICEINFO): BOOL; stdcall; external bassdll;|114:function BASS_Init(device: Integer; freq, flags: DWORD; win: HWND; clsid: PGUID): BOOL; stdcall; external bassdll;|72:function BASS_SetDevice(device: DWORD): BOOL; stdcall; external bassdll;|58:function BASS_GetDevice: DWORD; stdcall; external bassdll;|52:function BASS_Free: BOOL; stdcall; external bassdll;|78:function BASS_GetDSoundObject(obj: DWORD): Pointer; stdcall; external bassdll;|76:function BASS_GetInfo(var info: BASS_INFO): BOOL; stdcall; external bassdll;|69:function BASS_Update(length: DWORD): BOOL; stdcall; external bassdll;|55:function BASS_GetCPU: FLOAT; stdcall; external bassdll;|53:function BASS_Start: BOOL; stdcall; external bassdll;|52:function BASS_Stop: BOOL; stdcall; external bassdll;|53:function BASS_Pause: BOOL; stdcall; external bassdll;|72:function BASS_SetVolume(volume: FLOAT): BOOL; stdcall; external bassdll;|58:function BASS_GetVolume: FLOAT; stdcall; external bassdll;|0:|92:function BASS_PluginLoad(filename: PChar; flags: DWORD): HPLUGIN; stdcall; external bassdll;|75:function BASS_PluginFree(handle: HPLUGIN): BOOL; stdcall; external bassdll;|90:function BASS_PluginGetInfo(handle: HPLUGIN): PBASS_PLUGININFO; stdcall; external bassdll;|0:|88:function BASS_Set3DFactors(distf, rollf, doppf: FLOAT): BOOL; stdcall; external bassdll;|92:function BASS_Get3DFactors(var distf, rollf, doppf: FLOAT): BOOL; stdcall; external bassdll;|102:function BASS_Set3DPosition(var pos, vel, front, top: BASS_3DVECTOR): BOOL; stdcall; external bassdll;|102:function BASS_Get3DPosition(var pos, vel, front, top: BASS_3DVECTOR): BOOL; stdcall; external bassdll;|50:procedure BASS_Apply3D; stdcall; external bassdll;|103:function BASS_SetEAXParameters(env: Integer; vol, decay, damp: FLOAT): BOOL; stdcall; external bassdll;|109:function BASS_GetEAXParameters(var env: DWORD; var vol, decay, damp: FLOAT): BOOL; stdcall; external bassdll;|0:|125:function BASS_MusicLoad(mem: BOOL; f: Pointer; offset: QWORD; length, flags, freq: DWORD): HMUSIC; stdcall; external bassdll;|73:function BASS_MusicFree(handle: HMUSIC): BOOL; stdcall; external bassdll;|0:|126:function BASS_SampleLoad(mem: BOOL; f: Pointer; offset: QWORD; length, max, flags: DWORD): HSAMPLE; stdcall; external bassdll;|103:function BASS_SampleCreate(length, freq, chans, max, flags: DWORD): HSAMPLE; stdcall; external bassdll;|75:function BASS_SampleFree(handle: HSAMPLE): BOOL; stdcall; external bassdll;|95:function BASS_SampleSetData(handle: HSAMPLE; buffer: Pointer): BOOL; stdcall; external bassdll;|95:function BASS_SampleGetData(handle: HSAMPLE; buffer: Pointer): BOOL; stdcall; external bassdll;|101:function BASS_SampleGetInfo(handle: HSAMPLE; var info: BASS_SAMPLE): BOOL; stdcall; external bassdll;|101:function BASS_SampleSetInfo(handle: HSAMPLE; var info: BASS_SAMPLE): BOOL; stdcall; external bassdll;|100:function BASS_SampleGetChannel(handle: HSAMPLE; onlynew: BOOL): HCHANNEL; stdcall; external bassdll;|102:function BASS_SampleGetChannels(handle: HSAMPLE; channels: Pointer): DWORD; stdcall; external bassdll;|75:function BASS_SampleStop(handle: HSAMPLE): BOOL; stdcall; external bassdll;|0:|123:function BASS_StreamCreate(freq, chans, flags: DWORD; proc: STREAMPROC; user: Pointer): HSTREAM; stdcall; external bassdll;|127:function BASS_StreamCreateFile(mem: BOOL; f: Pointer; offset, length: QWORD; flags: DWORD): HSTREAM; stdcall; external bassdll;|141:function BASS_StreamCreateURL(url: PChar; offset: DWORD; flags: DWORD; proc: DOWNLOADPROC; user: Pointer):HSTREAM; stdcall; external bassdll;|135:function BASS_StreamCreateFileUser(system, flags: DWORD; var procs: BASS_FILEPROCS; user: Pointer): HSTREAM; stdcall; external bassdll;|75:function BASS_StreamFree(handle: HSTREAM): BOOL; stdcall; external bassdll;|100:function BASS_StreamGetFilePosition(handle: HSTREAM; mode: DWORD): QWORD; stdcall; external bassdll;|111:function BASS_StreamPutData(handle: HSTREAM; buffer: Pointer; length: DWORD): DWORD; stdcall; external bassdll;|115:function BASS_StreamPutFileData(handle: HSTREAM; buffer: Pointer; length: DWORD): DWORD; stdcall; external bassdll;|0:|109:function BASS_RecordGetDeviceInfo(device: DWORD; var info: BASS_DEVICEINFO): BOOL; stdcall; external bassdll;|74:function BASS_RecordInit(device: Integer):BOOL; stdcall; external bassdll;|78:function BASS_RecordSetDevice(device: DWORD): BOOL; stdcall; external bassdll;|64:function BASS_RecordGetDevice: DWORD; stdcall; external bassdll;|58:function BASS_RecordFree: BOOL; stdcall; external bassdll;|88:function BASS_RecordGetInfo(var info: BASS_RECORDINFO): BOOL; stdcall; external bassdll;|83:function BASS_RecordGetInputName(input: Integer): PChar; stdcall; external bassdll;|107:function BASS_RecordSetInput(input: Integer; flags: DWORD; volume: FLOAT): BOOL; stdcall; external bassdll;|98:function BASS_RecordGetInput(input: Integer; var volume: FLOAT): DWORD; stdcall; external bassdll;|122:function BASS_RecordStart(freq, chans, flags: DWORD; proc: RECORDPROC; user: Pointer): HRECORD; stdcall; external bassdll;|0:|96:function BASS_ChannelBytes2Seconds(handle: DWORD; pos: QWORD): Double; stdcall;external bassdll;|96:function BASS_ChannelSeconds2Bytes(handle: DWORD; pos: Double): QWORD; stdcall;external bassdll;|80:function BASS_ChannelGetDevice(handle: DWORD): DWORD; stdcall; external bassdll;|87:function BASS_ChannelSetDevice(handle, device: DWORD): BOOL; stdcall; external bassdll;|78:function BASS_ChannelIsActive(handle: DWORD): DWORD; stdcall;external bassdll;|102:function BASS_ChannelGetInfo(handle: DWORD; var info: BASS_CHANNELINFO):BOOL;stdcall;external bassdll;|93:function BASS_ChannelGetTags(handle: HSTREAM; tags: DWORD): PChar; stdcall; external bassdll;|89:function BASS_ChannelFlags(handle, flags, mask: DWORD): DWORD; stdcall; external bassdll;|84:function BASS_ChannelUpdate(handle, length: DWORD): BOOL; stdcall; external bassdll;|86:function BASS_ChannelLock(handle: DWORD; lock: BOOL): BOOL; stdcall; external bassdll;|89:function BASS_ChannelPlay(handle: DWORD; restart: BOOL): BOOL; stdcall; external bassdll;|74:function BASS_ChannelStop(handle: DWORD): BOOL; stdcall; external bassdll;|75:function BASS_ChannelPause(handle: DWORD): BOOL; stdcall; external bassdll;|104:function BASS_ChannelSetAttribute(handle, attrib: DWORD; value: FLOAT): BOOL; stdcall; external bassdll;|108:function BASS_ChannelGetAttribute(handle, attrib: DWORD; var value: FLOAT): BOOL; stdcall; external bassdll;|119:function BASS_ChannelSlideAttribute(handle, attrib: DWORD; value: FLOAT; time: DWORD): BOOL; stdcall; external bassdll;|86:function BASS_ChannelIsSliding(handle, attrib: DWORD): BOOL; stdcall;external bassdll;|150:function BASS_ChannelSet3DAttributes(handle: DWORD; mode: Integer; min, max: FLOAT; iangle, oangle, outvol: Integer): BOOL; stdcall; external bassdll;|158:function BASS_ChannelGet3DAttributes(handle: DWORD; var mode: DWORD; var min, max: FLOAT; var iangle, oangle, outvol: DWORD): BOOL; stdcall; external bassdll;|120:function BASS_ChannelSet3DPosition(handle: DWORD; var pos, orient, vel: BASS_3DVECTOR): BOOL; stdcall; external bassdll;|120:function BASS_ChannelGet3DPosition(handle: DWORD; var pos, orient, vel: BASS_3DVECTOR): BOOL; stdcall; external bassdll;|86:function BASS_ChannelGetLength(handle, mode: DWORD): QWORD; stdcall; external bassdll;|106:function BASS_ChannelSetPosition(handle: DWORD; pos: QWORD; mode: DWORD): BOOL; stdcall; external bassdll;|88:function BASS_ChannelGetPosition(handle, mode: DWORD): QWORD; stdcall; external bassdll;|79:function BASS_ChannelGetLevel(handle: DWORD): DWORD; stdcall; external bassdll;|110:function BASS_ChannelGetData(handle: DWORD; buffer: Pointer; length: DWORD): DWORD; stdcall; external bassdll;|137:function BASS_ChannelSetSync(handle: DWORD; type_: DWORD; param: QWORD; proc: SYNCPROC; user: Pointer): HSYNC; stdcall; external bassdll;|93:function BASS_ChannelRemoveSync(handle: DWORD; sync: HSYNC): BOOL; stdcall; external bassdll;|125:function BASS_ChannelSetDSP(handle: DWORD; proc: DSPPROC; user: Pointer; priority: Integer): HDSP; stdcall; external bassdll;|90:function BASS_ChannelRemoveDSP(handle: DWORD; dsp: HDSP): BOOL; stdcall; external bassdll;|83:function BASS_ChannelSetLink(handle, chan: DWORD): BOOL; stdcall; external bassdll;|86:function BASS_ChannelRemoveLink(handle, chan: DWORD): BOOL; stdcall; external bassdll;|100:function BASS_ChannelSetFX(handle, type_: DWORD; priority: Integer): HFX; stdcall; external bassdll;|87:function BASS_ChannelRemoveFX(handle: DWORD; fx: HFX): BOOL; stdcall; external bassdll;|0:|90:function BASS_FXSetParameters(handle: HFX; par: Pointer): BOOL; stdcall; external bassdll;|90:function BASS_FXGetParameters(handle: HFX; par: Pointer): BOOL; stdcall; external bassdll;|68:function BASS_FXReset(handle: HFX): BOOL; stdcall; external bassdll;|0:|
ScrollBars=3
Point(doSave)
}
Add(InlineCode,9268460,231,259)
{
WorkPoints=#6:doWork|
EventPoints=#6:onTrue|0:|
DataPoints=#6:Param1|6:Param2|0:|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|31:uses kol,Share,DLLLoader,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|8: |10: public|21: Param1: THI_Event;|22: Param2: THI_Event; |19: onTrue: THI_Event;|3: |48: Procedure doWork(var _Data:TData; Index:Word);|5: end;|28: function GetWords: boolean;|2: |15: implementation|0:|0:|13:VAR Src:FILE;|20: PASSrc,Dst:TEXT;|17: B,C,H,L:BYTE;|60: PASSrcFile,SrcFile,DstFile,SrcName,S,S2,UsesLine:STRING;|22: SrcStream:PStream;|23: DLLData:TDLLLoader;|76: // InterfaceList,InitializationList,FinalizationList,ExportList:PStrList;|68: InterfaceSaveIt,InitializationSaveIt,FinalizationSaveIt:BOOLEAN;|14: I:INTEGER;|12: inF: Text;|29: outPointers, outLoad: Text;|23: Line, W1, W2: String;|60: Valid : Set of Char = ['A'..'Z', 'a'..'z', '0'..'9', '_'];|29: function GetWords: boolean;|15:var i: integer;|5:begin|21: Line := Trim(Line);|64: if (Length(Line)=0) or (Line[1] in ['/', '(', '{']) then begin|20: result := false;|9: exit;|6: end;|32: while not(Line[1] in Valid) do|23: Delete(Line, 1, 1);|11: W1 := '';|33: while Line[1] in Valid do begin|23: W1 := W1 + Line[1];|23: Delete(Line, 1, 1);|6: end;|32: while not(Line[1] in Valid) do|23: Delete(Line, 1, 1);|11: W2 := '';|33: while Line[1] in Valid do begin|23: W2 := W2 + Line[1];|23: Delete(Line, 1, 1);|6: end;|40: i := Pos('EXTERNAL', UpperCase(Line));|13: if i>0 then|25: SetLength(Line, i-1);|17: result := true;|4:end;|2: |5: |29:Procedure THiAsmClass.doWork;|9: begin|24:// SrcFile:=PARAMSTR(1);|38: SrcFile:= ReadString(_Data,Param1);|75: IF ExtractFileExt(SrcFile)='' THEN SrcFile:=ChangeFileExt(SrcFile,'.dll');|44: DstFile:=ChangeFileExt(SrcFile,'Lib.pas');|41: SrcName:=ExtractFileNameWOext(SrcFile);|27: UsesLine:='kol,DLLLoader';|25: ASSIGNFILE(Src,SrcFile);|24: {$I-}RESET(Src,1);{$I+}|25: IF IOResult=0 THEN BEGIN|26: ASSIGNFILE(Dst,DstFile);|25: {$I-}REWRITE(Dst);{$I+}|26: IF IOResult=0 THEN BEGIN|34: WRITELN(Dst,' // DLL linking');|39: WRITELN(Dst,'UNIT '+SrcName+'Lib;');|28: WRITELN(Dst,'INTERFACE');|37: WRITELN(Dst,'USES '+UsesLine+';');|50: WRITELN(Dst,'VAR '+SrcName+'DLL:TDLLLoader;'); |3: |40: if (ReadInteger(_Data,Param2)=1) then|8: begin |27: Assign(inF, 'PROCS.txt');|13: Reset(inF);|29: while not EOF(inF) do begin|22: ReadLn(inF, Line);|26: if GetWords then begin|42: WriteLn(Dst, W2 + ': ' + W1 + Line);|7: end|14: else begin|25: WriteLn(Dst, Line);|8: end;|7: end; |13: Close(inF);|7: end; |33: WRITELN(Dst,'IMPLEMENTATION');|63: WRITELN(Dst,'CONST '+SrcName+'Size=',FILESIZE(SrcFile),';');|69: WRITELN(Dst,SrcName+'Data:ARRAY[1..'+ SrcName +'Size] OF BYTE=(');|8: C:=0;|30: WHILE NOT EOF(Src) DO BEGIN|23: BLOCKREAD(Src,B,1);|11: S:='$';|15: H:=B SHR 4;|16: L:=B AND $F;|22: IF H<$A THEN BEGIN|26: S:=S+CHR(H+ORD('0'));|18: END ELSE BEGIN|29: S:=S+CHR(H-$A+ORD('A'));|8: END;|22: IF L<$A THEN BEGIN|26: S:=S+CHR(L+ORD('0'));|18: END ELSE BEGIN|29: S:=S+CHR(L-$A+ORD('A'));|8: END;|53: IF FILESIZE(SrcFile)<>FILEPOS(Src) THEN S:=S+',';|19: C:=C+LENGTH(S);|17: WRITE(Dst,S);|22: IF C>77 THEN BEGIN|50: IF FILESIZE(SrcFile)<>FILEPOS(Src) THEN BEGIN|19: WRITELN(Dst);|9: END;|10: C:=0;|8: END;|7: END;|21: WRITELN(Dst,');');|40: WRITELN(Dst,'VAR DLLData:PStream;'); |33: WRITELN(Dst,'INITIALIZATION');|54: WRITELN(Dst,' '+SrcName+'DLL:=TDLLLoader.Create;');|45: WRITELN(Dst,' DLLData:=NewMemoryStream;');|67: WRITELN(Dst,' DLLData.Write('+SrcName+'Data,'+SrcName+'Size);');|49: WRITELN(Dst,' '+SrcName+'DLL.Load(DLLData);');|33: WRITELN(Dst,' DLLData.Free;');|1: |40: if (ReadInteger(_Data,Param2)=1) then|5:begin|27: Assign(inF, 'PROCS.txt');|13: Reset(inF);|29: while not EOF(inF) do begin|22: ReadLn(inF, Line);|29: if GetWords then begin |76: WriteLn(Dst, W2 + ' := '+SrcName+'DLL.FindExport(''' + W2 + ''');');|7: end|14: else begin|8: end;|7: end; |16: Close(inF); |4:end;|2: |0:|31: WRITELN(Dst,'FINALIZATION');|40: WRITELN(Dst,' '+SrcName+'DLL.Free;');|23: WRITELN(Dst,'END.');|18: CLOSEFILE(Dst);|0:|20: CLOSEFILE(Src); |9: END; |30: _hi_OnEvent(onTrue,'Yes');|7: end;|7: END; |0:|4:end.|
link(onTrue,1103216:doWork2,[(275,265)(275,230)(177,230)(177,195)])
link(Param1,9606580:Value,[])
link(Param2,1734534:Var1,[])
}
Add(ODialog,8118960,49,259)
{
Filter="Dll|*.Dll"
link(onExecute,4926001:doEvent1,[(89,265)(89,244)])
}
Add(ChildForm,1103216,189,182)
{
}
BEGIN_SDK
Add(EditMulti,16387306,21,21)
{
WorkCount=2
Width=608
Height=326
link(doWork1,7868854:doData,[(42,27)(42,48)])
link(doWork2,4030299:doData,[(87,34)(87,69)])
}
Add(MainForm,12747976,70,112)
{
Left=35
Top=105
Width=65
Height=65
Color=16777215
Name="12"
BorderStyle=0
Position=1
TransparentManager="clf"
Point(Handle)
Point(onPaint)
Point(Left)
Point(Top)
Point(doVisible)
link(onCreate,14225697:doCreateRgn,[])
}
Add(RGN_Script,14225697,112,126)
{
Script=#18:ellipse(1,1,65,65)|0:|
link(onCreateRgn,4847611:doSetRegion,[(156,132)(156,181)(58,181)(58,230)])
}
Add(RGN_SetToWindow,4847611,70,224)
{
link(Handle,12747976:Handle,[])
}
Add(Gif,9360828,385,126)
{
BkColor=16769217
DrawSource=1
Point(Stream)
Point(doPlay)
Point(doStop)
link(Bitmap,7116472:Handle,[(398,118)(370,118)])
link(Stream,15586037:Stream,[])
}
Add(MemoryStream,15586037,399,77)
{
Stream=[ZIP415A000078DA7CDC7734DB8FDBF87F33B12556CDD6AA5A6DCDD2D25688D56AED4E6DADA2AA6AD72E49103BF65623D4DED4AE100411B1F71E4551BB28ED2FFA7EDFF7F73EE7FE7DEEFC9573F8CBC9398F3CAFEB7AD1D4D650BC69A642A642467A09FCA17FA86E64A806D15397B9264549FEE70F99C031152D19D91F32C9F39F9FFF5AD0F99B17649466E474AFA9E8ADE8186D18C89CC980EE54B4EED40C5E34201B06F6B72C3CF63CACBE203E572ECE8F6061B70B02AEBC923E57247CC5E47DE5F960EC222102E2A1C23710324AC1F20AD112B763A420E164D0485AF528FA7BB1EC3A093C0F12D91F24F240126E6A24DED24EBC69982CFC34FDEAB34C4913B48C05FAEEFD24C8E3D8C7FA68CD47590F0CF3749EE56A9B7CBEFFACE8BE49DEBD97F93A16E92F4D0B752D338C2D8A0D2C8BF55F171BD9943C7E5FAE63596E6C55F1EC7D95FE9BF227766526EFAA4C1C8AB41C2A1F3A569978553C7F5B64F6BED2C6B1C0D631C7D1B5DAD2B1CEDCB9FEB55BADB55BF36BDF2A73F7E6379E8DF6DE5FDF7D2877FAD8ECE0DBE0EEDA62E1DA62E9D16AEDD9F6C6ABDDD6A7F5AD37D6D6B7DDDEB7CD0156E10D6B768137BA07357B85373BC05A2DFC71F6C16DEFFC3B1C111D2E7E5D2E41DD6EC1AD5E2138CF10BC5738DE276CC42B62C42762DC2B72DC1BD5E2128573478DFB84D78524342644B604C475044713E0C95D11897D219F70E129DD51A801BF186240CCA47FDC242276CA3F611A9134159C3A139A361C95D1999C818BCFC447A1F1E97984F87C424ACE58E4E7D1D8ECC1B4EC99E89C89A4FCC99482894F8533C9457D9F8BFA3F978C64974E66560EE7560F17568D94948F7DAE9A2CA8992CAE9E2DAC1F2BAE1C286F1829AF1BABF83A55D33C5D9B311F91318FCA5A8E412FC4E6CD2716CEA5162EA7142D26172FA6166E2415EE25971D7CAA58C9A99B2FAC9B2BAD5BC96F5829A9DF286C9CAB6C5A2FAFDC437F39CC6BDC2FAD3F2A6ADE2D6B99AD6D59AC699BAF6D9B6BEC5CF88A5D6968DFA8EFDA6AC61E56B7EFD6624FAB3A4F6BBB0E1B70675FBA4FEB71D36DED8B2DF8252C61B107BFD94658C3F5EEB5127E61884BDD83CBF8A16F7DC41F1D836BBDFD5B5D831BBD239BBD236B03A39BC489F5A1FEFDF6E1BD9EFE53ECF069D7F859EFF8DEC0E4F6C8F801717A7B74E66064F6607CEAD7C0C2C1D4DCAFD1B9B391C5D3C9E5C3B9E5A3F96F6773AB074BABBFE6D78E9756CFE6D7CF96B64ED6B7CE56B7CFBEEFFFDE267DF669FE90FDA1E5D52ACBC0C025128FB6FBA102317090D0BD54457D86F850CE6ABD291CD85C0E995861DA580B58688C10A5F7955143CE40D4053501B03171E0A7583E5D9F72D94E42093CA7360C6BB096D17C45CA8A6C076128587307EEBEAB4C25DD1D1755C3B4904C9E2DC178A53DF9A29150B5B5AE0B3087E1C0CD4177F48B949D25CBF3B289D406E51FF5B76A2DD11AF06D44CB26776009E4010C7F28EC82EAD392035E750C6868DBC6683B6DCDC439E34DB3AE714E732E2558494518C6337788295D89833CD42D318758829E32D54AABE4DCA1D902BD54729BE0B284E92740BEBCB73E95F696C992534C5E26CA8C510A55C376135B8A051D67A10EE525DA7F188C6B5018C10B954809F7B73261FC2C5FC08EC251F1924F9B850DBADF7EBB8591167C6746649376C9A194060F475300AF40B1BD3E3F770C74A17E64D69DE2D42F160238DEB34199402FA959FB85041D4C05F9409914F33E95B594FD4A815AC353D0681779F84591B879FF6011DF8C704847516D963B30AD825B60C96E48E3F1141F94895959833600524053672E03A255EB51E2636C0340BF4872BE8E4D035511AE3F2A19EBB10743585A13F57DFDCC21FB4BD122886B15374177AC3768AC81578EA4A3941AA78EC3D2FFA0F6285379BD4D1162A2718679A896B29B4C74169E19AA422E7594F890E3CD43461A1137530AAEF1328F0799C8911D0C2885FF8FB804E47BAFEDF7E2DA5CCB2EF91D5CDBC39207E3AC11D742157728247B841B1864FB942D229456F729ED20877A95B43C2A61A6104A1ACEB962E1EE40097B99EEA59B855206551910EA69CFEF5B0D454889F7B5BB63136D0D472B293D8DA70F150B198E011B9B12A721BF746E9E8E71D3D272283BF8B56C75BCDD965FC1C544560DD209870B3EAA2D8350D3CEA5F460B670D9BA1DA2AED19DE0CB267EBB3D529D927B9075B23D868E0601D25F005D36DEABD827FA3CA28F9A0AE447C6256520F1702F2C26AC31686BA48B42E371B10AE3ED0FFB0F65213D6F99B27254F45C8729751C808A2C4D168CB2D49F64BFCB7186DD3EA4E00A73D293B1BB60F2A3589BE60FFFCF3116617DBDD1BD3B316590A5C48628E51056AA408A8F8F8BA1901FDB4AFB909F2EBDFA37211F7D50A24C50420B6419F7FD10B20FF29551CFB9D2F0053287BDAA701178A0762453CA431556A1CF2CAC5B096532D2AD2DBCE4029FD53004816F76DD316C846C21268F6E767343DD7F00F5217EFDAC7C92FD8A0BCF4A250914FA7D0DD0CFD01698D92ED2EB2604F1ED77E49D054F26B05CE0FC9E5C13208027F268A061F837E131C80744F0A50C0E6ADC9596704E64F29CA79B5139756C786DFA5EA13B711492A5D90253D43361A9C2DF5E6157F537427953747536826C1247820B1D291CCD2AD215405CE23DAFF2CBE765F8054BFF40A44CFA509F5EDF3972647C8DD9BE749C37B746D7CADC7A55FFD166DB34C4F7DB1D646C09AF686A1C33238B3ABF2AFA12436A92CA1DD16B1F918E82A3A63CB2A9E0AA943531FEFF482AC09C92D692FABF49A573A766F4A405BF612261CAE243CBF19185C7F902B723A7803BD755EF2B244979616C12A182B27ED7A4C2856422AFDE0A90BD1D70F376B08C74D41592A76A91B45014AD760C937A1448279EE36102B76E22974AB29C66AAD2E3D42B4F32444CB3E54CD18A960537755255499E3EFB64689471CF38F3E1B9A779F74DF3756D3F6B997E36B4403FB32C36B4287D625BF0E27DB9B655E533DBCA276F6A5EDA553EB7AF36F1287BE651F7D4E6B3C587221B973C678F1267E76A73B72F762E0D161FEAEC5D9BDFB857DAF9349B7A35D97AD5B890C4746F7DEDD9FAC6ABF5BD27F6CDC7367B9FF6B73E1D76B06A9B80E60FB0067758C73B58A713A2D3038E7782F5BA20BA9D02BA5CC23A1C82B15EA13DDE48BC7B448F6F44AF6F68BF77E4806FE4C4B998512D1EA86E5FD4B877401D2CB42E10551F78EE66072CB6333C9AE09FD2139EDC9AF089101DD50F8B21226286600903C89829FFD849FFD8B180D829BFB8A980246244DA0032BD3F2C6D342C792628791C9932834C9F0DFF341CFD693C3A7D2E1CDD1391D11B87C627E71112F2FAD2332623D0A38919E3519953A88291C4A2819CA281BCD2A182D2D9CCB281CF15FD851543796513B965D3B9B593A5F5E31575D3E58D13E5CDD3E5E8F9D8DCCDF8FCC5E4D2859492B94FC54BA9F96B29C59B6905BBC985FBC945BB2945FB29C5FBA9954BD915ABD9356B39754B79B56BE8BAB5C2A6852A92A1CD1BE5657B1915879955FB395F0E48981635EF956126EB30B38DEDB3CD98852FADDF6A3B16BEB67CAF6ADBA86DDFACEFFEDE8CDDAFEAD8FFEBE9596DD74E63CF4153F76943E734B66719D3BBD4D5B5DADAB3D54AD8ECE8DDC5104E31C4E56EE272EFC0067E788538FA7D6072F31CD0A13D7CFFAFF691A3EEE163FCF059D7E8197EFCB4777C6760FCA07FEA7070EA70787A676CE2A47FF294387D323C75D63F733A34B733397F38B97038B5BC373B7736FA17D6F995D3B9F593E5B5B385F5B3E58DB36F5B276B5B676B3B679B647F5FFF83D4AB191B2AE694DA4CC24012A95A510B9FE46D884598DACF599D91E01CF5A22AE9C50E55F0B1BFC95307C34C137146DB5D0B03A17C641996C68276F7C2A547858F029456DFDC7F2057C334233B880E4E7352BEF2524D4EDC46EF05B8C714EBDE3106B1D24FBE11CC22F672089EF72CBFA2BE3BAE01FEACC656EE835EF493F2A719E9977104F6C96A0253417EFE37FE866B1F5202C7DF6E1B10AB6D1DF952853E1021CF1EB2589879973D2EFCAA46FF68C0C22016E2E3CE7217DC356E5A505D38B2155D67BD98F41850F8401B9F7F807131BED490658D0AD590C33284DCF3C67D80BA955900AF71BE2EFC02DB6F9CBA2CEB78A9FD5DE5CCBD3FC287376F8CC05ED6B44A68493A1B8AAF09D7C70CBE59107EDD8D7DB0CF1B1B570F33351D0A82209007D01B8B5C3B14CC2C66ACF4BEDD4F165F4083B13574D7A99F6645095027C1039E546B414399AE3792A9F181BB28041087D07D26BD775C6C914FA9D3043984C1CB7B5A8C97E39FB441328B6A051D039759D8A2D8C68711BC7D51E46A91975BC9022139347559BEC0077001ADEA297094F47D65DAD7B16D206CB8ECA392559DBB043E97FBCC16AA5C6DB1633E3122BE84A5C115959F34AD16A952432DB81B2C07834CC98F6E39BF48D90813C84D7DEC4D6170C7EDD971B8F3B4E98E4D3034C39DE3367261CDE486DE0859D095E6353526DFA32A5A000354F24FC537154FC239A92BDD3162BD44C38897F51543CCB787A85871179855577564BAFC9C9960188E21E65B9D8D829DCC628964AA401E0787EE3489DD6886E84A374A1A0EC50C10C5179EAAEFF60D5DB006F3C29ADFDB5B4D47CD82A5A8AB130554CD64EF8990C6DD5B8B3A3A9504470A9A4B541BF6C059115BC69BFB736D56557FFCB2B4D86562E7C89BAB242D7A15B68870A90E36C6452DEE3B19FC14DDE7A4E28199F03019AF156955DE29C50BBAF28D92F04B370949B2FEE4002D2938DA7AD850E77A66C8FAF3AB40FE77AED48FF619A215BAA6EAAC5262B54CAB87E9F35A68D4D788D13A43121116DFE53948A45241559CF5147E857CF84EEF14F9279C8C3696CD48AA89DA58CD5E7DA80CDC0FA6D97F77C03EE6E1B3ABB29A71ECAAAEC9066A21C128E836CBCA8B75F3054F3BCB165E2C07A99051D582FB65B9F77D6A203F69C623A09F2564A7558E3875E420890C65B7C8C7B4965AC7C4B58CF265CF669A167E5016877C8230165D24A39ED08A850ED31CC944612E5C5A0A47C594DA805847807E1868989403A57AB58665046A84934D7C9EE25D8CCA0944878DD122977560FE37B880FC25BF0F45066589BBD9653871F11EC00C4136A0E9673D56C0FDA895E5D523977C186E917C8D9E8CAA5BBEFE8811CD677B8B06A4EADE74234DE8418310521EC1D6EC4F0627935C4A7DAFF199A1098C7877A2A8053078A2E577E328F752DC337D46606B0DF96F4A1F01134CBA27309389031122B13BAF32374FF65D9DECF15E8BEE1E0D85B8C0D3727E391A3F8A1990E45526045F7088960842A572B5BD3C822D29332E1E97E847F61F99A530A3A0794DC168434F3296E603258D3B3593171DEB5B06CEF70C2C3E743C0E1C42AE0257DC2F8B7A085CF394E0F5078B04F18A855E1487898807F34B87482A05DC50F453544894FEC7587514AD560C936E3CA76E920034E1B67AB2924132BF51AAD8B3CC6BCFB2A42DB2956DF2EEEAC4A8DC4B85E8A66A3F27D19A7FFF45AEBE69E18337C51053B4A14591BE75C10BFBE2676FCA1FBFAB7CE9546CEC58ADE3F8E59557EDCB77796FEDCBAC9C0B6D1DABCC3F56BDF66CB4F5A973F84BA895779BEDC71EE78F3D2E7E35E68866EBE086F7886A5F58835B60B37B40870BACDD3DA8CDCB1FE7E8D7E3E28F7723291AD8E516DCE38118704112BD23FB7DFE9133A6D30735F891D49A11ADFEB1D8F3CA4CE926F5655CEC20227E00193DE91F33058B9D82C5CF209206033E11C393A60393A6C3D32723D266C3D20650C973C8D4F9D04FF311993D6159DD3199DDC9E8BEE48CE988CCC1B8DCC194ECC9E8FC89F482DE82C27E74F1604619A1A4AABFA4620A5D3559D4385EFC65AAA261B2AA69AA36632E2273212A67212E67292E73353A6F25217F39A9642DBD74E3132928CF55DC4F293948AB98FF54B6FEA9ECF053E96A46C572F697F9C2EA4D74ED5271D36269ED7A41C37A69DD667EC36671D34649E36265E56E76C56156E521BA61AFB0FEA0A869A7A4F9B0E4EB4E65F3613966EA4BFB6C2366BEB663BE1E3BDFD4BED284D9A8C26ED4756F35B7EC16B7EC9762762A31DB5598FD72ECCFAA8E9DDAB693CAD6B3CAB6B3AAF6E36A92A21DBF6A71070DB85F5FBA4EEABB4E9ABB4EEBBACF1AF1C7CDF8B3A6AE596CE7425BF70216B78C21ACB4F72D75F5AC617B365BF16BD8BEAD76C2018670DC42386B19D8E819FA461CDD208E6F0C110F3A060FBA46F67A470E7B88676D0367ED43BF7063C7BD6367BDA37BC4C9FDC199FDF1C99381C933E2CCC9E0D4C9F0F4D9E0F4E9D0C2DED4DCE9E8C2C9C4E2D1F4C2E9C4F2E9F4F2C1DCF2F1DCB7DF73AB3FCF83F5FB39B02B9B27AB9BA466FDFD9D64ECDED9F6FF2AD70748360155AA7B6C12FF306B2EAEC529A4EE295770CE6C823A2F95188B4658AEE03A655785299F5CDB09DF86C56EBFB63158976F628465494621C7F72CE483D4B39C18CE603EEC07243DD7FD3DCF878D2B8878E2ABC60275B6D715C2685760B52357CF32FEB39701B3537D77E1E6755FE028BF0F5B79FF98E4D38E0E8F841A53E54CFB807425244D3E1ABE3683BAFC36AF14E2E857CAAD942726246C007C77F56261C70EE6BD9DC759857599B1768A18FDFA7DECE51F4F6416952F4DB91AAF2AC047845F5359814C927ACB2D2F3506558F1AD752B39B795B12325E543CB9461B7974A190E800284C0C638B3355562CEEBCF8271969627E430F7D59B539046FCA93123DC03CA47EE3BE75F0DA6E590A8DD6D87507563E789CCD119B4BA8361F3B16F7C20A25D42FF7984A3AD0A396F327BDFC8116026FBCC06644A3A108B68CE0B2EC12D497D4A50223407D50B96057D563C1C87BCD34C678CDA45A9169873086CCAC1023DEA57BD2EFA81F85290DBD0878A41E3C17A0055D2D13C046DE3537275E966212E57603E6C3196EF3BB0E8C4106ED2097E3D4F08A7A37785E0E87DA3CA6967D012DD772148953451880EE6E57758D18D7C52A7CBE137FE46E0D529B320B879EF819EAD8741CB7F6A6FEA9B2E88CB5A6DB0948BF8431ECFDA4EA2AFB42D17CEA1871715CAB3D5231B24281EF868DEF1F4C98C38EDF8D89D49C87E43439143B942239A1BBE21B65D843576DC59116D883F2373B16CC0A4487684DA11176D9B06B1978F35E5F3CF712B3F214D6299853E75485925EA296A8F5BCA3E94D9A54BBDE42D70D26A60646518FD850350689FDEFEFBFAE8F886C5FE7A053DF00FD390CB56F5D2B51DA6EC9024B50B5D15D29BA96CAFCCA58C7AB8DD04FF995ED0FCF760BCFC74AC2ED139A5B7637088D1400D0EDD41429FAA453185E61AEAAD2E00BBF343C88456508D476577C2FF55181C69562B99C0107187D8EC7549976606B146B8FD4637F63575A6E1B151807E69E71846412F1114F6705792B64F485F33605FFB48F65F8B5DA21C015995F78314DA05DE59FDBADE0323D2841F2F391D8F6BBC60A19D559BB8634C017EA71189D69536370F948AB9533C5A2CF47949A2C3523E5671B4ECABDB790257E5A969BFED0A536406AE56D4DC8D6D8D5A7FE8028C345E94BE1D2187233281560363565FB69FC577E7BBD3BF274014AEA026C7A2D1485D0AA109A30677E1CE48466CA0C5AA3F50824C9F124430DE2ADF54A859A45DE4275F6861615C118AA8EA60F4BA467D3202357344551ADDF27194C9467D64373B68F3D7D62437925AEDDEF23AD8306C42DA39962DF54D0798E8C4554F0131C45F976447F4645B2E52BD969267F91A20A35460AFC58D1EA6233E774319DAA3FCB16869F2B6F8E820E5264080DBCA020AE75B382534FF522279A9E5D928CBAF5C6677B9A6CADACE38B101AFD56329316FE0DA40A8B5A4BE12F811F1E94183576010714877039996C62CC964A0E3BFC3423844E9146806043765D278833134CA7CC940513A7E317E45014A28815E0F5E6DCBAD08AC451177092DDE5B5A4D586FA318852473E3AEB84339B5AB230C1C2A9F398A9BA38473CE38D507A0C7E51A2482DBA114DA055B1B8A0BFA925991408AC2A6AF606307E4988C7EF3EAA4A259E8A66D98582E23F324E6D4E456F497BDEC91E00662F1A902D03D816CCE2C328E47951D2E7A2F8872BBC30F68B81DC22C117AF85095F435D96F5BF763BEC1A896EE53059A57F26CE286A7514BD762CCB83386E95D89B90A41B46A9228FD2C5486E9BE52858E5DCB12A50D20C57D50ED3D449873C8B7F669CFBC0B040EBD93F8667193D2F3234FB646295A7F2BE50D322579F24B96DC513B732C30FE54F3C8BED1CD00E4ED5E6AEE536AEB5962EB56F3FD4DB7B7C79EBD9FCC6ABC9C9B7C1F15FC6B16F11CD56888637B0661758B37B4893A75FE77B7FDCFB20AC0FBCCB05D9EA11D2E3F98FD5A8164F54FFB9D57EA57ED11D81A86E44741F2286808CEB0A89EF8D48EE40A47407247746A7B6A4A6F6A2A2CF2B37844477727FE4A791C8E4D9E0F4B188F4D9D04F24BD0763D2E64233DA13B2702999636199033168624AF65842EE544CCE747CEE4462617F6AFE7472D1545AC5D0A7BCBEACC20174C95456D9486EF9485ED9786EE5747EE37469E34455C66264E602EAF37252D1524AE16A6AC15ED23F5617EFA7951D7C2A5FC9ACF886AE5A4157AC6555ACA2CB37B3AAD6B26B3673EB164BEABF1537AD90D0CEAB5B2BAAFD91D7F0A3A8E97B69D3567133297137CACB0F32AB0ED1D547B95F8EF21A760B1A7E16D61F1637ED1493006F382A6A3C2E6EFE59869D696E59A86C5B6A6CDDA8EAD868C0AD34B71C96B6EC96B5EE54610ECADBF6ABDB0FAB3BF71B5B8F2B5ACF2A4874637F55624FFEEA7D528BDBAEEFDA69EADE6FEC3A69E83A6AC491003F6DC49F7CC59F36F72EB7E3E771F8752C7EBBADF7B895643571B9AB7FAB93B8DED5BF8AEFDFC09D87F11A6168AB77ECFBE0F8E6D0CCD6C4C04E37F1184B3C6D1D38EB1838C20D9FE0864FBB464EF163077D632724C6F1E3DBE79D3C7D3032B33731714C8AE4FEE96352240F90189FF93536BF3F45CAE3F99389F9D3B1E5E3D9A5B3C9A5B3E96F2773DFCEE6D67E2EAE1F2FFF9D3E9F634E4AE5EDDFEBFF7FB5AC59B6C159B90464FE97F185EB268D32E6BC8FCAB33B9144C1921E1CBD50C93BF04F1F522DEBA69A82D35EE303E8B36B910D2A9916C7FA7169CFB9D6F8783F47A11BE02777F8EE210A2EF605F74E0D097649F03C2C68DCE63371C31105A0C1B07C6F5B947E57B2B0109D6CB0B4B9686950FC450AF9483B888B70FFEE2D5B3D8EDE305EC6EEBD21F6924C2337467B89A76CB9107B8F70BE0DF62F12596AE92C97E46EB016DF812F856449D6469609A821192E9B7F1E9FBB535457CFE5AD21334A80CDB0186B9C151F603C3D642F2AF714DA430C12AE5EDFBBCA22A1086FE0FC29A118E930AA962BF2F0D39377318F8243FBAEFDB99E28F60E63EEC0EC939CC834D0141CE7BE992C17C5395C4EE9FF7AE335B15E40FD8756EC037E4365C17EB9DCD3D7C6D03306B58177949898A81BD4C531C8C7C16821F0D5D73AE4019CCB5028EE2967BBB92EB465D35AEFF69E9D02F16A8280A00EF4584510C07651551A07295D854569D4B6B02C4058AC10B3D0913441030143F7C445B66E4E365A0BCCDAC03DE80C68EF85662B8AA55F06A6182C146198A70FD27F62C6CEE40C1E1F1048D2C3AE59C652AD5546F8BCD98DEE11D92CBB49BC933835B694F820048343017B595F263750E1449475EED0B6B31AD244E335BF3B040E4B259C7030F9DF3478D671D96737B6EF06938C46E6FB6EC59B019C08D33F8B93CAC927F91D6CD62E06E229BFECD69E2B2F1D89911897791C747D4878F04DB9EE015CF7D698CB829658DDB60CFE5A75D50052A25FB2C70E72D6E84CB81E8F0307B2DE63006341D12D1A065259B1155A12FD6CF71F4A2032C801AC6A3460EC57B2521E7AC7BB0404FB5D2C6CFE7D0B03A53256322CD3D801D3C8F61DDAC659FAFC5EBA07E08624EFBA15AF54032FEB62F8AD5DEFC3629581B2E88E6681489DD06A7CAA0973ABC40728A38467AA1294E5AC36718F08BDF0CE45BDCB4E4628C54A6B1EEFD57C79AFC7880BD3C67B53268F1FCEE46CA3F548A9448BC208935D3D124467539AD1CAF0D021BAEFDE900D85A33EEB4952E084CDE74D4AAEBE077F2C992E57A3E92C359A687B34473C3E5F85B37A629D8922FDE44F0723BF4B85AA2D04974AC1B986D8848F22EF32653B417C97CA079A802F28A966120BCB6097D8DD1E95496B32C58651913BCCE9F3F0DB94DD83BE2A4BAF65028E6B962B8093642164782FB656EA0BDEA60FA07EFCE93FE98A7811CC8FE23411147BE45A7A2009B1A26D758889CA470C0DF065BA1B2BCB1BCAC4526A6369B2A31B6C9654E454AB2F8980758956A8A7DF0D2E1DC4A546A94022DD6E20A51F3339409BFC0FB7298A3B8F99D22411C783D7049FB00B73D193BD22333145316DF79101C81127D732C81FEA209883A535A9A19C7EF29C4BE4A74264FC0CBBFEECBEA6DCEDE6E48C5FB8A452A896CAE801C1AD74A39A92C253BA8863A1174CB4284AB88E1AE57D615859153F1937DD1CFFD3C42C5A260AF8652B7E385E3B90C286D38F85170A3444B44056CBA01CBFFD6FCAEE0BF23099C3C444F8052FE66503DDE238C595C1DE40A41655EE1332635E34CDFD29329653170AF08CA92863A220F9B603CAC292CC932B03228B54F7276320E302CE43C9E56E76C11BE72804C7042A1B5560C825480C151202DD2A0BC85E634EE0D8CED17CE6771F78F47F4CBE294CC9192CA9E82DE8996D807FAB9C8ADE839AD1879EFD2D0BAF3D2F8B0F3D17E98BB93B37BF039FA0FB45315F2112ED42016C82817C1248815BA1723763241562A46FC74AFD4D721A288A463306AC1D03BA1FC7A997C4A7122E0D09BDA91571532351E9519AC8839C3B26D97216390A9679CA1AA1EADA91EADA2855DD34A851B4D1CBD4C78699BA24E05FE4DD7F9AAD6756A8FBAE54CDBE44C722C7D8A2C8E075DE4BBB32884DF9A377D526AE95061F2A9E3AD7197B7E79669365FDA6D0D423DFC3B5C6CAADD6CABDE6BD7BA3B56783DDC7722FDF26B78FB51EFF60EF85B5457EB58337BBFA3778FA61ED61ED8E01DDAEA1186712F3C80EDF50C25FE631AE51E749EE1DF1151182F50BC5F98575C112DAE1716D4814C12FBE2B38091F9ED21A9FDE969ED61B45023E8954E5C3C149334129D321A9732119F8D0ECBE38343E35BF372D6B240E3D9A98391195351B953B965438909E3F9152389E5680CF2D19CC2E1BCA2D9FCAA918CFAF9F296898AEC8988BCC5E8EFE3C9F58B0189FB79450B4985EB4964A0AF0CA2574F55C51F97A76D56A76D526BA6635AF6EBEB47E33BFF1472129B49BBF579C83FD33BBFA30A7EA08DDB45BD2B45FF8F5B0B4EE28BFE99854DC6598D99AB6D9A6B66F5FDA161B5ABF57B7ADD576AE35B66FD675AD7CED5A6DEEDE6A6ADDAF6CDFAEED38A83BD7FAA8FA9FD6C6FE6DEDCEA3DACE3312D80DB8EDC6EEC326DC491D49EB9EB326FC7113FEB4A97D06D3B38C252C74E3BFB7F6ADE3F08718C2490BE1184B383B1F630FAE1106B67A0636F1439BF8914DE2E4D6F0EC8F89A1BD9EFE93F6FEB3B6FEB3F681E3EE915FBDE7F3ECD3DE73AD8F09E3A784B1DDFEC9FDA1999DE199FD91E99DB1F123E2E4C9D0C42971E6788494DE336743B324B3B727E777A6E70FC617F7A7E78E47E74E47E6CFC6174FA7564EA6487E2F9F4D2FEFCF7F3B39DF21AF1FAEAC9E2CAEFE3BF05EF967E04DEAF1DDB3ADBDBF31FEBF2C7FD9E2A79FBDD2C32EFFAFE5524F2B5E9A79B7179E2779A43ADB17FDEC225BF081BFC9D36DDD4C33F074172C0EBC588B2486145BD0B218A53DE2FCC2870F2CCF2D7201EEF5C6AA5FBDD417DCB16BD39DE7388CF1517F704B1E592CAA61FB2B9D1BF10DB9DE6102761EF60E38E4BF9ECDE911C07E1F953C9ABC39C51190F37DAEA14824BF5F9E7373ABF005F093BE0FFB26BF1C29C8996EE4DD2894F4069472B55BE9E56B87D5193DBCF6A4AFEC2A7CE246379D35686AE031F772F8A197C20864F82743B37C81BD1BB6E4E51E07FAF5C0DCAB6CD86542DC98E4405D7080C28C0C277D15A481E7B2A6D168D70CD6A8E246DC9FE427C7C612F022A905719C6E71470DF893F1BDA57BE65FD639DF6A1B3DAB52804457F819121DB99B84C0D78285136994C0F94E09C2CB50A3671A48C627CC77A937457A1E02C7074360B44E4E2899E17EAA508DDA5416B05B85B711973530DF991649D7AAA5278C4A1AA2939250A534B8D3CFC6FAE9B29C38521B32C559132F997DC4D12FA53EA0F800726C6438FE82535E2632867279503B968E65F105F4071BFCB246C1F6EAD22D598DB59070B64D4A429CFA3C4BC8FBB92ADA85CB52B75F33CB57B9C74DD90CF83DD1969CC5E712EC4D089D571228966545D0B18F6CD77224C5CCE964B244E16B86BF86D422140A2C61AF246BF1BB48C11632A1EECF80CD3F6D110AADEEAD387E7B7414E0C2BBB9CFCFF40BA80A71A27DC6F70A84900C031D25269698F64A42C5BC84DD27FD5FE939F6CAF4EF38A6DC268B7986F51B38ED3E3CEDD6A89CBA51585C438079AD58ABD33ECD17C06785967C69B477B2BAD6A8271BA19CE5B31E261609AAD8A8E9BD2771FF5ABF5F65C4ED1ECC2D7D85163D2724FF9B5A819D0EDE0F1B8EEA3E7853F284A0B179FCA3EC6096004A6A2A500B57F3CD452AD687763B346FCD5D0D0369186B372AE99AC55AB144B5FBFD8157633CD9B498C00C73953D14652DCBBC50E61708D627BCE68CEA3D9C601885EE2FC916FAD88732CEC33A72F358EE58AC05F1BA820AE870906EC34C4CD630E3810BAB11E88FAA2EC4F9EE99DF34E0EAAEB81601C502E6F064DD842A50D7816AC984A04BA1540CDBDBFDDC8A1B733A50173902960F0896FA00022739FB9303A4B6C1CC32583FAA2520C4A96611CC08F9C2C5D2DB524F2EC5C68663BE4B66A0C7252D7C3D00DAA2A77F20CC7275AE82C2498B8D9AE2EB9E3E9195DB86A80669C6A62BAFB1844BCBB1B3A6815BE858E3A25A7EB073A2D57E5EE1A452DF959E9BEB843A2B66E642B51391A2A2DB4A949218FE2BAB17691858684E977F38B36877982646F95308CEF15F5C7D09643067E29DD305688A72E4E8E8A950A25AF85BE6547ECA6DD3C251187F9944D59C583D554AA3527E9F2799801953D02B2259A0B31F1B771AA75E2B2DAF30C3ADA1560872AEE5740DA39D95A8C2E8EC00E25F250280C76AAC162A943411004A79A8CA752618055F3C896ABB0530513AE59A5606E2029286C665D51F294A1EA8A842998050818E04CFF36370737437FD42E047821E32287F76F1E1500E4E150A302D82A921280879A40250574CCD590005207166D1DC346AD0958CA64846345DC6BEBFD86D033863AD01250F5185AE960DF41FC526372303BEA6A6B7A626732103BA53D3B953317B3380DFD2B0BC65047BD3B2FB8278DD2EF03872F23B5FE077E51373171444B00807F28A075FBC12247035E47C692D132176C34F5E3140FE36E2B674CC65C538E9FFD21BA01E45AF15C3AA93C0FD20F1824AB02234F63A1425A39AA0A89224AD1575CB384DF0719AF8B34FE2AF7214CCD0724659F79E7FD636C9BBF7026DF0A2D8C834DDD8BA40D3B4E0811DA9CA8BF45F1798D8943EB72E7BFCAEE28573A901A9CD6D8B2D9C0BDE38569A3B379B79D5BCF36EB4F2A972F6FDEAE086F927C96D839BECE1751E887A9F80260F649333BCCD098E738A68FD18D6FB97E8099F885E58548B5F1C061EDB1A12D5034F6AF74FEE884CC187A460E349F5FDA92B3166109130184AF23971202465303299E4F35468FA202A6D3E2CA3333D1B1F8D1E4D408F25E6934CEECECDEFCD2AE8CD2DED2B2A1A44978EE5950DA2CB878B6AA68B1AC62B9AA76BBE4ED6A317637357E3F39792F2D7124BD6D3FE7B2E5E7A905EB1985DB5965BBB58DCFCADA476ADA076B3A869ABA47EBEA271BEBC69BEA6FC30932473E55156CD514EFDCF82C6C392E6E392A69F65ADB35FDA26BE62A66B5BA71A5BE7EB304BF5ED8BF5EDCB8D98EF559D5B4DB8B5AF5D5BCDF88DAF2D3BE5AD07152D3FABDA77BE741CD6B4FDCF41F8C95F9CF79ABA7ED6E37F7EC51DD5751F35769DFBDCD8FBEB2BFEAC09378DE95A6EED5BE9EA5AC5F4ADB712D63BFBBE77F5ED637B484AFF6A259C92E2BA7BE07BF7C856FFF8E6E0C4E6F0D48F91C16DDCE03E6E68B76764AF6FF867D7E87EDFC05107F1AC75E0B47DE8AC63F488F0EFFA99C4F559CFC419617CF73CAE67F746497D3D7E4C9C38234E9D0ECC9C0DCF9E8C9D6FA077A7177E4E2CFC9C5E3A98FD07EA85B38985D3A9A55FD3FF42BD37B7F2EBBCB5D77FAE6CFD5C5F3D5AF81FFBE9C58DB3E5EFBF57FFEDEEDF9BFBBFB7F6FF0BEDFF21B67991A8C993958CB62090904655355D9C7A68BFB0EDD46A595A9B7DA1EA23A82B61FE4E8428BD3DF741B7C0AD28F6C7E5CE47F8117C2C4FB858C89B0D7EA5C4BC47D34A89BA96723E8A02DCB2683A914AF82FBF122777C615C9B7576238243BC52D89A84A5E024BB0F806A6FC82C49DEF9FAB4DE532209B7C68D1DD24DD0AC1D26A79AD0F4BE24F809951C36FF51C88A56E3F39A614467E483A029AA2AE3E2DCB9B35AE62BB840EFA602C03BFDE3420FB443E6ED4F858EED229C7809CF873C0D5C74BD665C36F920AF81EC2EB6C53218980D9629977133CD01AD07CD700A0FC87B8E157B5563725656139E4C688AA4BCD3D7621A4CDE3A43F97398B16AA66833E2BED5BA54CB4797CFE74AB11386802411536B3335CBD986F1F557964AD27D9183E3008394DABD0B7A8E543EB5ABC7A6D89BAF5F2052244BC4D11CAF88467BC26C4F10E24B1FBB1027868E84D50AF20DD8321CBCBFA7788A91F500A363E07719E14FD8B9946027CD1931FD332CD9F49A881D1CCE1CA81682DE5BB4C55CC2F72A7354215AE711B31CB5D7C564B27D62077FCD0BD3858E14114CBE61EE3D5C6E0201DFB6F964F5F487DB789EB9353F24D7C6E4CF63026D96A3C7814ED7AF977625F7ADDB2E1EB18A448C1EA4B71CE796ACE64C989913BFBDE6D0FAE165065E493319B6460181EB7F807A3990EDA0837896582C1C211342C487E94CD1FF1EF45E4A26410CA2B52E0CEAC192AB52EA188AA93F542389579915095C8FDEF593036A5A2C20E0A1664953F7FE14635DE40A9A87C8AE9ED6675050B1906101ABF8BE387A9BC2DAA2FF5557A4B01B6D483733B4DA916A81CD45212AEC790151697A318E6540097A9763A9AC4722875C4E21459BA2ED37C0BD4C5B23D0E13E5132312972EF96AA9E5997B28FA43C8A9794DB5ED7B8DF4DB39BDC2281E3EEFF4C690530A8FEA40ED03F27402BAADB7E7EFDF161D2EA7A4961FF526033D10CCAA20887F8EA25100B30BA903816C2FF6284C84B9EFB12BFD6894EB29217B07626079F2C285DA537202CF75FFCBB48BC01E28567BD82A260CA6F6C10F6670A359F14F95E6E4CB42E540C8ADA1177E202647C1561A753B9740167DCB453D825FE1691744EE42B80A0753C0200C7831AC2C8A458B5F5A7D0AE86370CCC524AFBF4FE5A66C49B97AD14E5F4F488DA15F0BF22E3682EA3BD3550B8DC968254BF22E11952AAA4D812503148734D64F038245454059102AFB1FD87D54A882C8B5EE5669D0542D9AA240FD6A6628F66689795A28220CF2105A7E772898A6CA4B2F08A280E5A764063C45FC4065206C552C79BCA43BBED95C81C171FC9E0A8A38B2075722D5EBF83F5E7C028338ECA870E1C87800B46D546D1979574CA5A85AA570BC59DFBEFE60435F6085AA1E260F51834CB7A981C7B03F175703E15033D8D6AF2811F87610469E77894632CC9F83C9298893434A41A22503C8ED8EBA08FDE11F2E4B73B348A1456CC98A911E9DC6CC1B0D175E6911789638C7E6DE2F2C09DAA1CC96A1B97ED2D9CACB4FE4AFB79915E438803397B508B86965FD1174055D16F567FCD9DAF69BA94215726D803F8D3FB09D81E23624DA2C9A17DCCA68E9007F38A3E273978EE63FBB6C4A4E6D4A456349CD6845CF68757E46765ED29EA492A663B56561B70373D8B173DB5FE0B1E766F161B8E0C0CAEA0BE271045F72E615FEC07DD9FDB2F84761F98FF2DC7ECC1C7E206E3F160104876020F7D5301105D875E908497994E4ED78D97F6EB5494C933A5B2B869994DAF762D9B463397513F95483943423953592EE18245F7EFAE9FAB34FF256B9772DF26E3F4FD331CCD27E9CF977019E77CFFA93A57501C4B4F0A16D9E1A29ACDF143DB72D7A655DF6C8AEF2B94BC523AFAA17B6684BBB1CF3F7E566CE05B6CE9F9D3C0B1D7C8B7D1D6BCC5C2B6C9D6BCD3F7EB1F0AAB4F36D7EFFDF53F4807A3BFF0A1FFFAF0E8826CFE0AF2E515F3D60B8F730AC73408F4B689BCFBF6D3DEE1D528F88FD1A14D7141ED7181BD1EE1749F08BEB8447B52013BA43533AC3535A923E1162630660F1FDC8B82978E24C40CA4448DA28EAD37C44564F5856577C162121A7373A1B9F9CDF9790494CC89C8ECB9D49CC9F4D299A492F226615F7E7944E65970D67970F14944FE7564D15D44E957E19ACAE1DAD6818AE699CAC244576CE626CFE424ADE7C6AFE4AE23F07D3252B9965DFB2CB56D05FD6F36B178BEABF97342D5455FD3CBF96AE39CA6D38286E382A6A3E2E6B99AA6C9DAD6F59AA6999AF6BFFD67C1ED31B75B895AF6D7B5524A3DB77ABDB0F6AB03BB59D3B8D1D87B5FFB5B2AEC19E569E637D7C8E75D75E43D75E53EFE157DCAFBAEEE3A67F47DFE78BEBF6CEC596EE8596AEB94EDC4A0B61B91DBF8125ECB6F69EB4127E917ABA656885D0BFDE33FCAD7FF83B717C6390B8DBD97FD83EB4D333B48B1FD9EF251EB70E9C9098C690AA7AE8AC7DF457CFE80949EA6E92D46347E7528F910A9B14D6BBC3E387C4A9DD91A983E1D9DDF19983F1F1E37E525E4F9E0E4C1D0D4D9D1149793DF77394A4F6DCD93029A917CE485293927AE26F529F4BBD76B8B4FE6BE52FD04BE7FBEDF3E5F63A29A6FF9BE6FFE172ECE17612343F4AE8EEBF257DED29A7747DF4DFA9F886A0D5A0684F9CE407F09E0FA9A4B98A0CC183AFF134D717AEBD107DEAC9302ABE580BDFB54A3E7503BDD27879E4F2D0D2FA6DAEA401F0E08D9C58E82CC696D322A92A57371FE25B2963D0CEAE5F24F9E4755AF7C2EB61098CBDD58312255C28BA00BE955AEF344C2886D80AFFCCADBF35C8F522B3A2E2F8B67B94709107A0B497CA9A98376811CABC12AA6EC0210D5FB5F294CD7B9057529344BF7235181C07C937621E70F2BCEE0AADF5924E9649D44FC00C732D3ED8D7DCD10B80B0463E287E0D7AF416FE44DE29652C6213CA404E074ACABB2F54E249FDBDFB4F7DFB73A1EA6087D7AE31B5227EBFC8E484EFF572169B9E381D7AFD0C5DBD7E4B230E28BF9DEE75699F455F8F73FA35F10E20F8CAFD77FAAE8FA3B587791158BF1FEA645A3A9C3B0BFA1A37CF4432354A718291104AD3A3740A6D642CE1DE44AA90818926BB1135A578B3820AB8469D2D4DBBEE0030A7D28D829093DF0438904BDD664247BAD735A9B2CB5FB927A7C5444F93B140F591E4F2074832FAFE2D064F6100BD18D3AA0A674D9765BCE4884A9EA1A0E613A90C969A9CA07EE97550C238E755CE6D9598FAD5E85ED403919067596137D6F31ECB1FE901F9B394D7D9EF1EE1161FCA8F583AB490D368B5F8D3289864060AC65FC4462AEFD8A8315E17EAFE93150AF83462FB9682D78F1F067657AC172B2A37189E04D4703CB70346087270A22AF4D48ACA898293361A06DD06E689223BBB92559F04CBC869741493C3E14571F7E3AE4DFAD24180D74EFD020571E87BC4DBEB96CE3A16C26B0B109A1BCAFEC0825DDFD8370AC31B4E2F5B68AE146DB7B24D4BC3410FAC06B4155EE4E4D2B05F0F93A2A0CB187BC424CCAF49711F794BDA5983E1B24D9123ADCB583C3D4E4A33BA4B0EF948180912CF2B72A2F3903B96C14B592FD076012FC3A919C4BE17EDD093291C4B1355DECB84A652D266AB11EE15E2E139C92A8C2EC2E97A673DB44F0B37A05004A2C24036B0A92378548527567D5C5913A1CDACA833DF2F64DAF8C77F1672D7EB1D1EC2F53DB5F50AF8EA601BA302D57C3FCF2B6FE9A0DBE0CCC50311F074A62C7397D610D5A222A70148C4C45D5A0712E7977922C4D21F434B94D1106EA3116690D6E70A9B2552CA525783D5D97CD88499385FE5F97641DFAB0D7441438A323AA09E4BBE6A17008E3B5E3C006996BAF5421D231D917D3DB65268962493A714E0C18ED20540148BC7CE7B3B5970BFA4D8B5A64580F64EC30CA009E2BDE34CF32A3BDE8F726D1CC39F7DF4820D2D950CD35AF069B78066D7F0DF9EE64383E8C254C5181618873D400C715A46DCE2EEF0ABBCC24C5C5558C80A19E67AA33FFBED5628B9C4981C2C5100EEA888BB8CFC5C8F6BF29749320380DE6921EFC2ED04E02F91344BFC3400DADC5C10245160B11B043E1043F900CDA0CCA1A3344E72C18CEE0DE44C82D1610C1A66740B8A5AB2CAB534368A05F44A7EB069BC68C0201F15D3FBB18C1C6FFF6024556B98FEEA22640A2705AB2547798B5A6A364A0568DC9209BAFD7F084C694A4E654A496D4605B0A4A27B4D4D6B41436F4DCB687D7E6D466A652A37729A0F540C9EB4A0B7CCE720BF65E3B6E7E07DCF03F602B278D3B1FA30B27F64E475024BFA0A5EF31693F595E183B15F445CB81C7881D4CDE22182D7424464FCC56E202465C3C56FF8CB92402669AC1A41A511C5A41DCBA613CFFE30F1E2C3447ED53805DD94DB7A49C246A902064962C6A9A28FD2AF9A7C9232C9925145AA9E8FBCA3D4B5532006285DC38C078FFE39F9FE7CEFC5DFE7A7ACF3544D0B74DF14A89B15E959973EB6C87FF6A6F4E99BB2C76FCA9FBCAB7C6E5F61625FFDC2A5C4E843B9815BA5917B95C9FB5C53BB2CBBF739F6EF4AAC494A3B945BB895BF75AD7DED596FE753EEE85BE1FE5F1370EBF30978BD2DA2CAD5AFC133A4D9D90F670FEF740C6CF180773987B6FB04F778FC5D747B91A00E6BF68F6B8A8D6C874577C0A3FA60C91D81E99D81699DE1C9DD11C9BD1189EDD169ADF131FD88B87EE4F9107C202C692628793638790E99D99E8AEE49C825C4657425A27B5273094968427AE6682C7A3029673C21673C311787CEEBC928C4E7160C6694F467970DA02BC6F26AC74B6AFA2BAB47CB6B87CAEB672A9A26AA1AA7ABB316A20A96538AFE063709EA9AF9C2F255F497D5C286F5D2DA1F054D5BA575F3654D8B954D73D59587595F0EF2AB8ED0B5DB0575DB454D7BA58DE7FBEA92E69F6598E9AAD6C97ACC745DCB4A75DB620366A306BB59D7B25FDEB1578739AEF837A98FFE26F551DDB9D2DBCD5D87F5DDC78D5D67FFEFB60CB780E999EFC02FB61116BA7B365B7B77B084A396F386FED633F01D3FB2D13FF16378680F4FFCF53797CFB0A45C1E3CE91A39E91E39E91D3EC391289E38EC1B3FC38F1E1027B687270F86A67746A70E47667F8E4D9CF64F9E0E4DFD1A9C391EFAA79E177FCECC9D8D2CFC9A9C3F1B2321BC7C34738EF0DF23B37FEDFD7DBE8EFE71B6F17723BDF11FCA18FDA4D836E0AD51A9DEBF02CBBEE294BD55882BB7806A821B5E4F2DBFBD508F3C542E90D40A6841227F486D09AEDD37819A63578AF78F00AA7E6440493EC92B95E85277E0F7D7CAF14E9FA1F7787CEFB53B825E7544B71CF261DD862F28143FA437B8C76F2C1E886C09390C5134B02A2F03D4C59EDDE4EFC3585CB6A653CA2B91E8F8E0C03893C89381C5BCD5F079A3F4A448B4EBBD3FB35562287F12E49DC6070FD93C2311EDB751CCD742A51E87605CD4DBB896921339BF12815CECA212980CE36CE0D9029CCFB1872C9F829B2B561B6F8ACFBA751916274A4F9519ACD4BD2235462F740D7E415635BE3662CC3EF8169BDE9F16197D84110520C80C6FBC7DA3EB2D6B9D19E252B91E25351DF776E2D1DC673269EA83E5FBB7A87D2A639DC6A38C74A102A2652D144C9E7E3A507FCEED18001F180E96FE0975D1B550E77346F130DFB2110406EE6BA890B1BA2012AE77710D45BC12267F44A41651B5C9A27C0C950B6017CFCF7E08050CD4DE77A432DE25A7BCBC9060C1DCC8371429EFFBDA0D0FA386ECC2A8451680F3142292ACCB2A3F6DDC87751A41CE0F82585D2114940F7DBB300216843176EDCEC6BD679A89BC8E90187A2329C0FB95548F2585939680207A26655C8B7359714CA2FCEEF68DFBEC7CB552B9D7DBF3F6A6133302C5D7F3D0ADEA503657A8CCFDFC879B167DCADF95FF3833D25F49F553A5931852A1E282E9B416407EB57487CBF35F1B562DC68978C1E864C6C8D443B24A2C181F1A5B693030745B856E30640FAC265977120BDED548B9785999CBF62EF5487746785194C829433AF3BE9B58E45AC899B15DABF8D2C10FE574C6EEBEF5DACD6BEB95FE19EFC2007E58268D94A12CACD2BDFDC3DB82D1066C5DB4D3C1CB13ABC5FA202C78FB5670AB1B1DAFDAE91C9C39695B24E37A8B89E19B270353FE542089525EACD0B55FEA78854F4E2EC11CEA79A995CCF78664561CD7AFBDCE86F6A79A21FA35FFB450C965C63F1D32C63A0CB241AA2DC1D87E4DCA2840FE2F653556EDE3129EFDBBEAA83467901B749FF6AAF8BB9807D0A2D77FE2C1D154D3FEB2E3DAA23E7A575FB9676A6AE6B92C74A180BDB56E1ABAAC6892C6503626CE97EE9980C53417185D3C607A71DC1AAC2D53C36CA58BD0F8F692F30EEAAAEF76BF0EE42BE2DA2DD8E3720F3D0E894EE9A88B6509105D484A513F4094BA37DBEBCA571D2CB702AB402562037895A2E10292934A8BE7AD8D3948B28F4736EA1656F242BF1CEB70ABC7B7575216A04B7394E6A89B7D1F283CA067541CBDBFD2D4E090B1FE408A5D0CFF316E7655C33870D3639E1590D9C11DDB0974E214FED0A716907738A722C5BBC4C14AF54A8A8122F2D455F542C6403AE5056B901E5B995F8DA296B88E62986892A0E3E42F8A1986AC605089192B703C90D64BC98C69A691E06F85445E6A01DED9892B713C366C9F6C6589B83357E61C82A4B924A288A1BC88653FF6520F336565947761625854A4516CF9DC28BFEDAF02700CDAD2D387EAC7513038216964C770505B28157B5E9E4627956008855339E3AE12EE16E026EAC1B6BE07DE62092A371F74976C81397E099BF87FDC8991BD24453119D09C0A680E60784DF70FC3E46E6454AE64800F1400770AA03B80F60339833780D19396D99B81F52D2B873DC7055F46B68FCC02AE6CFC2E1C026EBC97DD39B9FC9878FC41BC084E81405E896001B160A1AB21820A0132B791524A71B24A7172FF487CFED8D5BF436C26ED1866AD18D0BD58522073E82470EB2572E927091AA65C7EF449FC79A6946EF43D9D3455DD344DFDD8FB46F10F1F25E83FCED47942C2F8330963EDE7797F67DA248F3F434C0B1EBEC95737CD31B6CE786E56A867596CF0A6E4314965AB3243AB32239BB2C78E450F5D4BF4DC2B0C6DB3CCDF169BFB167B7D2CF175AA31752BB7F4A87FE35BF3EF70DBA3CD866430A9977D3AECFC4B7DFDAACD105FECE1753688DA77C8C677FEEDEF611D0E88565744B713A2DB15D9E615DAE3158CF738BF409BF039BF3D2BF10BAA0C0AA881C19BFC42BEC042BFC213DA03E230C1D15D81D1041829A2D3BB62E2FA83A227FD622761B153FEF1D388C499A0945964DA6CE8A7E1E8D4B990D4B930744F44667772765F627E6F7AC670F4E7F194BCFEB4A2FEA462627A695F5EFE40463E31A76420A378105D3A945B3A9D5531985531F4B97C20AF7CA0B07C24BF72B4A87AA8A87ABCA871ACAC69A6EAEB6463EE6262FE626AFE5272F1F2FFBB192FDE4F2B59CEA8FAF6B96A2EFFCB5A51ED5C49EDEAF963548DEB65E5879995FB685262571C65359C14361E95B4CF36B42D36B6AD3460BFD56337EB5B8FABDAFE5D44D760CFAA3ACE6A3A8ECF6DC69D7DE939FE8A23217D567F3EE826B5F35C6BCF7C3B7E01DBBDDA8A5F6BC76FB712B6DB09C76D8433CCE00A8114CEC31B7D239BC4B11F03933F86893B9D033BDDC3BBBDA45826213D7CD63174D23D7C7C2EF4C859F7F859EFC81E71666762EC843879469C3EEB2761BC7038357F36FA57E28985DF138B67FFB564FE793EB83E3F0FFBBD743EAC2691FC7B75EBF7FAF97AF97C58FDE37F15312785A889FBFC3F936A6CB983196330C9638665D043F50007DE9541AD0A533EBA4BBC03603D7D3FDEA02E44B544BE7E0C908A86D7FBD658BE8A3A4512D302BD865CD2ED6450C2F4133F566B7010409CDB413122CFF8FD2FD4C525E23E198186E98A51EC9C5EA271616715371E5B25465002AA1B313812F9F45F3517751BBE2586C04A68B478C30CFA719837D6C1598B5E0E408A52450139D9A39C0536F8311ED0C683E7B108E29B124499EB81EF07A018A2275315382BFA98928CFDC2E63018723A6A5EB994D184B2A2326673F3398E28C814398033F6C2C6E3EF9EA0637534C082052A499B3C219508C9A486CF242BFCB902D49F965E63C6C42A4A03042373410CEB7A896D194FBF2DF03F628C9F9D9761BF4CB54A05E59793D784388A42D5211B53390CD0E954D721881C95CD3C7D0C1F341CA0F80E1565F5F52622D22A857A2F031299689A1920A1BC801266149652D5E806514F433650EEF14A80F6B2851051C43CF122E48D30B31253B0F3A3F7EE39EA7AF250B2230B3F116570AADAFCF4F0B3B7DDABCE20AE3B0F9FC218864C6EEADDE9140EE4B8B97A5B8E964D52670D266455DF36F9024333D8FB52988F2537406C0C6C72CB962586E9552DB21F1622B241F5FCF6235A594278D90B1938C84A1CCE1069E5B6BEF63923B0FB09BBB59E81F6B52CC176128679B2E1323A477F887066086F2696DD134A71AF00702C14796BC1E61E43703B76A2ADBCF2E277CA6235B9CC0E918C82C107C9B6D7C418587184F536E60AA75FF08A8C47CF8BAFB753946F96ABF0FE6AFBD2F51B64FF7661E6329EA54B50A2905985C11FCB1EEE4061ABB424DA3619AF731278B5594D589FFA62B87B346329607AF0E1AD597EA130ABA5F428ADCB1989948EDAC7B8418242BA8FDD6E97E8673B94C44BB4596EFB3AD9CFA46B088728758E67CAACBCCED0B52E318315A98AF65EE8FBF2FB0E3BA676C38A4728AAFB17D5587D2AB946139F32577F3D358F939185207A055F685D95E7F9B46B986DBC4DB7D88BA0CEC90C1833B82EB8EEAB931E80D7A2CA21FFD9FBACECCF02E83A11354430078243AC83318ADA28D9F7A12F348681EFF63A78022C110CFA772F18314B537F63EF837823C3033B81BD7B9D4BFE4F662A13803BCE37D3AF705B3E1C7A8A3B43F1C77C2D7F00F99601BBA7488D817340EF3D1BAE520B9BB3A385162C3121216D19E67452878E8F2AD40A8F0766D5DE3EA1D497ACFB5A1E02A94A750A9104B0EB0E1D0287E13A77BDB52FFADE04E4388588E5734299F59F01070F3E7F3F52E349FD00324AFCC10614E8788A7054D62517F47E3F1700993353D9C3B4F12376D5477C05C274E328601F4956EAE8431C3811973E74DF57B87510A2502BE08D56444AEB98DD31D25AE49F1963D1EF70BCFC4EC5C1A95F1177D575CBBAE5392FC2BA0863E20000375FC8DDE2AF549C3BEE86255C15DB922DDD563B7A360FFAC527F511F8B4F7E9D850BEBE4E09335394A6B88D4DB391A53DBF9AC03D85ED15317B4E5536A6B517D4BDC046B84D888118BD2623F358276B41187F1B6A414CAF3F54EDDE1247755E80A48818FDF3C4FFE3CA8BCA8C0260464D6301A4B302325903E95ED33259D330DBD2FE4332C08D8254C63CEF3979DFF382BDE941DE8C6CBE8C3C4EDC7C4EE7FF4484DF958BDB0FCCE3CFFEFFF571EED14CF8FF1F77D946B90E21B7844F1FB7E41E918C915BB97515525108B947910D610C1B9244E696FB5DEE970D632E7397B9E53277111929D46FA3EFF99DDF39DFF33B67FFEF9FED3CCEE3F97E3D9F42706EE160FE7FC204A522845543A41590FF2AC748A9C5CAA8C5CAA985295F46A86A46A86BA0E535E28E790CD28F63D143B35D8DE3328C031BC4F118BDE135493C6D9A240889BE028DD2324856BF9572EEE607D93BA9D236E9AAF733351E645F364981DE4EBE6E89B6B04CB0B44ABC7127ED262DB63E4AAE6D734D6CB32DEEE7DC799C4DCBAFEDB22DED0B2D1D8A6E3814D83816DF722EB9EB587A8B2ACA6E95B61E4516BEA5B67E79CF3D3E3DF0A25D813FF6AEF4082A7B799C59BF68757C4123316D32045E65135CFD0456E1175E1D185CEF13DEEC17D5E889A80F8477B8C1DBDD5F637DC3B07EAF09DE085C4064B77F0C318866C9C420D4384D94A3EA60314D21B10D08740B1C8D7F9DD80A7B8B0F8D6F8D4EC446D1749918938A4B49EB7BF37630326E9C4A6558E26448E2E4EB77035149536129D351A933C88C0E34069FF2B13B21A32B397DE04DCEE8FB8FA4F77963A9D99DE91F7B33737BB20B06328AFAD30B8731259359A57DC5A543E9A5C3399F4673CAFA73CB3FE7558E1456918A2AA773EB48459F064A6B474B1BC73E65CCD22A5DF9E49463752E5BCAAC5E2AA8992DA132B876B5A88EEACDB44273693925A37EB7A8662FAF79B70CF7A5AE6DAA1E3FD5849DAFC6CDD6B62ED4B52F36E1D6AAF16BF5AD3BD5D8BDF2D6BDEABFF7DCB4689BC6E3AEBDBF0D2C2A89095FB0DD73F81E725BEF5247EF6267F72EB677AFF5EF0DF762CFF05ADFE8D701D2CAD0D8EA3069636068ABE7489469EFCAC354513E4EABF7FB4847189EDC1C9DDA247DA18C8DEDD32EB669727C4835E3E1B95D9A19D3CEBD0EA7E67F7DF99B4DEFCE1EBF22FF2798FE0BE363126FFFDEDCF9BDF57F497C4EC21AEB0E490F3F9E0C411318802C72729290B2CC8E10922A242BDE1CDE09341095FE4528174DE393173DE76CF73DEB748438C3A6E34F8521369E7FCD6E5C523BD9D2898C63D712E714C5C2A534FF518CCA980B1DE1D61775EEAFC1E0CA433492230367FE5D8508DD2E29C7F8CAB71902B944AD386578E1921540C35A83A79F7A70A79F5D11A2FECA5D841B40EB59334FC9766FA2F87D8490E66ADA1C6D4CD99B7AE0AE19916263565563B31AC6C7112A7BFA0A0404CEF032A895C7D77D9D8273521EAC52BB332BC6680D92EABF0C3BB1A584A8BA95857F84626C67065D3EC1A931F318FA8A3B47FDA7B8028759C145D6E03F583FDC0C479D9644B1EE63D30C0151ED760380D74D7C51B09EA2A7EC1DED425604995317A90C5EF10404686B9B5F83AA5BEFE841902E28DC2920E2EC67C0A8AB3806B6A10D05066F4A3D60818E66F9B6B08820FA13E8E3B5BDFBC204C5BC50FFE8C298A739A3B5B3102C92F623E013F4ACF24CD00D7E718CBCC149B51888112902C3E9A25D69704E562F18089D665663450AAEEAA2549C00B312C13748BCE8B03651A91EF9962C43A4E20F21EFF0532A91271E7289275311DD29D4F98FE2F4BCD2C0BFF69A6743A37529E94B57365C92B260136D640EE354338F99F8E74988984C57312576DFC7EA8FC2B95418208877BB5852B4E68BD516287794DB9F4C130D8CDC51BF395FC6F6690DFD09990654858CE9AFE12176B541C9107DDE9EC7E9AFF95CE9BE33CB2EB0DE43696D605AA31509EE863DE5C4B009593EDB1A0FC3E265F7B5A26A024C66A3FEAE0BFA69F5AB16D2C7F7D32D2C17F8B68B0B161BDB44C9AF9B7A7C3DF405515FE39E6ACEE5AE152533D4D5E371AF6171C6AA9F05EC633556BDC9EEC904EC2C41A6E1C67B05E37D9749A2EABFD55FBF77CB0BB65D970DE32F97A47E25778E6B53921841F0196136F25DB45B6ECFA54F55F631D22104FA4A214FC020CB00A585C0567066C72252C8436D5DE5ECB8EC0BD31179B1CC98B760272FA3A1EB8C87CA625F27BB6215E9BCF24C2E1FF27B1B4CB8D5FF39DF21550FAA298611DA2CFBBF98FD38D417D53D03B8A62C5BB4CD065D6595C340C601DF29A30FCEF0B04B635E662161CBDA091C8A3ED579BD901C09F6CAB38BDA5053694CB7D8AFB03B8295B1CA7B27C5C9906DCEEFCA33E04E864BD2789E1B94794027A3F8381382FC640354C4E043E6047A694A53781216DE837C26A4604E5C9268A9545D0071F753E8058C02C830E84237782C1389F14BAFB82C3D1B1AF46CF08FBB4853220FDA701628B2AF8B871C0C7F08466E980BB7BCD9AA7ACE1A8D930C06987724DA8536EBD18BC387B909972AA1AC8BE0D033B9C64389090F0AEE4BF4FB82C029B09EDB28B719168B17465719CC67A343DCC9062D06ED90C7166F3E5E056F2A5792667B85963F52FFE8CE863A20BA2D0BE42191414CFFBB259312731BD786AE4B859A8866D8B224FD6B33D15FEEF18A027E32DE0486309087485B44197B840BE3E9270D37454E2FE4A87A308A59068CFDB06B6B49329F8FA1B7E43BECF97FCEB500F7010C76F480078C207B0015C06C0EAC1C8E6CC7DC05FA329CF407B2FA834EFA31B3BD60660F60E675650707B2F204B1F37972F10481053C7885BDB8C5BC456503CEC905CAC8BF3A2F100CE687F1088772CBC2A564A3CECA21A5D4606A97116A9A7F6FB880BAB1CC3AB15C7A2836280A0C45F119C67319C6F319257019C48B98279D31493C7BFDAD84699204F4FD45BD644DF3E473B752FEB9F341DA8AF662AC6E85D17A98A50189D2BE9E02B54C32307F676295686591AD7F2353D7265D8F769C9D6362956F6A9D6B4C9563C7341B1A863137A95AFCA8C8C2A1D0F271E18D2705B62E059654183B15DBBA96DAB855DA7816993F2FB77E5976DF35F789679E8377C913DF4277F78A075ED58F5E543C795969EF5FFD34A0DE2DA0C125A8F47960B54F508DD7F1C0971FEEB17F8B2395D38178D7F05A1758B37B68B32FACF125A22108D9F012D6EE167C34EA154CF07C4DF089C507223AFDA33B03A3FB82A2FA8FD2EC61DA3209D59BA3ABC35138587C7BE8DBCEA8B48E88A4EEC8E4EEE894DED8E416740A3625AD3B39EE33FC4D7FD89BCFA16F268353866269789E426676C7A777BDCDEE4ECBED4B4D1F8CC78CA0334713B347933E92920BFAA9DE9C923FFE21AF37BDA02F2B7F203D7F30AB7038BD7022BD84945D36985D399257FDB984CAE61A5241C3684DED647903A9A271BAA261F253D3445D33A9317D2636732EFE589A4B16309FA8AEBC9457BF5AD244B5E4E5B2724A66DD4E6133A5A265AABA75BCA975BA1637D9D436D5889BAD6B9D6DA4E2B963A119B75ADDBEDE88A37C6ADBFDBB31425B1759C276CFB675CD77D048BCD0D9B5DC4A58C7F6AEB7F7FEA275AA06177AFAD73A8757FA3EAF0CD060BC3E38F1F5F3E4C6E8E4066970EBEF5417ED1AFB9038BD39FE659734793038FD6B6C66677C6E676A9E164D8FCCFC1C9BFB39397730769C4B2F1DCCACED2FAD5055F860F1A82975D479FEFDF5BF85D2D087858E0A64E049A1E3505A2C898B5F693197164A5B80755309115B4650E732CD7C89E51391F1EE4CA665A2775BAEB589B365145298BB8DE2C4F46E089B64079FCB0E99569334EB87F4F622866764E94F561A414F4B5C2BBC94F4C42918705207F6E2C526DBCD7CC348E16188A21E94EB24F6D535D107FC63C1D8B014A0D53286274E9EBDCA7373648D41EE391B7BF20BDE2E9CBA84BF5016D7F3628633080E111D4F5E845448A4FEC39E87A8D4F02E635DFB1847FB6FFC21B9D6F6CAF6F26067207744919601B16B4C6298B59D10D1251A9DED217C635CD89C145F11C13A8E4DD2B98773E6904D7BC78FCCA8B9947CCEF68FB3CE48144E98DF869F877C13128DC894052447485D13B8CA7DC203249D60C78FBCC80F08B6CE37CC7A4D4F2F240ABEE8427A0B12993000006FDAF36445B029D899F74BB2C06E4294B90EE5B5E9244060B408FB784EBB02D87F1B6876CD5BA2CD8215E983521644E566D2313596EB47B2BFE2422B685F1B40F371CADAE94353CD30E478317EFBAB028E744E67CE80FDC5228D4ADBC0E67C4C9A528B62007845B880D4AD9519E169F9E79CDC0F23DF414E83D22B10C28E566320653776680F93471C3F8E79EA5AA5F1B92BF94ED302D994135D400F5E0C5C742AB79245C4FF12FF092FA4A8E83906A31ACF51E5947E740EAA1EAFF8900E40B143BC2790FEA45F4DD3B62B05CA042EE6AF1537EC268F8957CE64F4A86CECD50D69FD20785D57ED3BA02754F41929769E6FB8131F53065CA77AF282FC444FF58CEA1C93E82BE4BE4B2D5987A153B66E33BF57A90F26F3AD8148816F342EEB68B869D4B71B7F6B261E3C90AB65E47691D338643828A9F9B9C8C22C31B818C75A4249612C6999D162586F1DFA9EC1DA42E21AEEBBBC9DABDB8BFF7E3D2E4A85BC29586E4468B26457BF30EAB24D543B131A7DBE8AF2EE9AD2C2646BCAA5E6CD9E6DA59E11F16F4AAB933E7D8A8DFCAECAAA3D03E49286F9FECCB84BE6C6AECA44B745AF9DC1A5652573CD26EF75953EABA5710EF59357C44DAF0067C9DDE316FB736BEAFC1A7FC44D21CE254413E8624A858F3AB85169B7E1317716FB972AD1579C9ABDCA64132DA19F32B5901FB2BF8B6641A7CEFB5C588366F58D78DF06FCA80E3A33DC376770E646DF72D2556F1512E3D4F6F90D861576B775A62D36B721B042EBB62277D1EFA27EC09B6DD7AF009B43D62B5C525F4C5479765AEA21ABB2AEFD23A0137FCEEF72F9F46ADEA5F41807509AF912FA1ADED77F48BA1C6579BF7FC4959B52D150B46674E127606B6AA9E66AC98B6523FF99D569ED79B84A48839B6DFFA398EDC5056488378735588899A163E95CC180CC2B01CA07C8E656C9FA14DE8B4827B23F3F5213ECE2EECF158A595F74C06E126504A5278980F75B3121DE6EB6278522B424E5939AADA5CE87301A9E39106BA9DED9C97F0D34CF68A04B2A4A014303F82B335667F07A7E3BFF5F3BE9013DB33D90D5E17F9F7099FC4054573D1AE80271BC603EF58A55D84B4820885B26505CFED5595E18077F308750E829E1507E8930415994A452F0BFF2B1D48F8C3A525919257964A6405D14B31E9AFA6133883F6594C863F64E48275AD520560D9AA8A6FF4ED330F9B2D1872B96EFC46E258BDDCB50B4C1A8D97D547D9071E951B68643AE8659AA8E75DA6DDBD43BB732AFDE4E37BE7714195BD1226343DBFC6B76A95676E9F7683C2CB17C946FE3701C1397DD722EBBEB5661EB5A79EF59E5FD678DF79FD7DE7A59611DF8E95E60D37DB71C4797A2475E1F5D824A5E79363878D739067D72F0AF747B59E7FCB2C625B0C6E9559D474083A7CFF191346DF6D2F1659B5320D639B0D595CAC6D70DAEA1E541B01A5F788327BCD13BB8D60FDDEC07C33F0BEEF008C33D7FDDE115D6E113D2E9158D778F6EF789EA7C19D91310D313183B1E801A0B8497C0C32BE1918DC131CDA1A8C6F0F8C6D8C4E6F8583C3C118740F705BFED897A4B44A67520927B43DE11233EF446A511521206E189FDE189A3F0F831F8DB89B0A315CCB0F7C3B14993E1EFC790A954B19D8E4E5B8CC574A2333A13315DA939C4D4F40174F6E09BA2C1D43C5272495F6EC940663129A36AF463E5707EF95476C597BCDAB1E2FAA9F2C6F18AC6F14F0D5FCA9A276B30B3B1988598F445D4C7B9C49CF9A4DCD977850BA979CBC9456BA90594E4F285ACCAC5BCAAA5C2BFADA895E2E6F9EAB29DF49A1FF98D3F8B9BF64ADBBE54B74E35B64D376167ABB1F3552DB375F885DA96958ACEB546C27AF3F19C48D756D3D1C8250D9B9DE456C27C4B0FB9BD7781D0B78CA74D5DAED33265E22EEDB17768B177E06BF7F04AEFC852FFE8CAE0E8C67F7C767D606C7D78E47B2F0D9EFB5D6307C4D1EFFD13DB43E39B235F3649D3BB6353074333DFC76776C7C9141A3FC9FB134BDBF3471DE3F9E59FE4D5FDA3A3E7DFF3EB54781EAC1CBDE86EFDB776924B28ABB99A3D33DAF5089E1E0F4F0969C8CF6115B268EDA474BDF9787126F678B572A8CB5BB62CE3E06C6C80E1F37E2ECE04C19B22487131A2310A37EF3E56AE378CB3D4F74E99E45FB66BE415BE84CAA5783DACD27918C115C8EDD1DE2E648410E639A5921FCEFF315F2421E3535155C845EF79429278465CB9030466716FF36E5C15945BB8ADDC831C1B32A23F136DF4BA0472CD962E4A7D8F29DC5AC8809DCB6A923E8C1CF22EAC0AEF50CA1DDB729B75FC65991F7E29E2015D9FC2F24A8483D02B56817DD8C5B68FA34CF5B5F45F8976912DD9AC5FF01ACC7E6DF76DC6B514D51865D99D800368C9B5079DD0173C78A93F752A5B437C454F59ADD0DD8C6290EB7E3626B2BE903EE875DFAF95C99206145E1BE09B327330A8D38C9785FBF4208CFE94010F51ECE7980242836B20FD942870A76CE034F026B7CE8DB32831F4E993FC7673DCE0B31657857D4B1D9914C181432073EB08B239B7C35D2EF425691EBB0C042BDD234EE918A8A3BD1C3835A39DF7610A192C7446113CA070FA60EF11BD243F8F61949CC08A11B4053937A8FC089A800080F61CB3E999EC7438D54A94E3EEBF051B95C778313995C110CEBFFDB08CFE42F6DD125E024E57C53FCFA8F76BA866D57EA4674EC190A1C3FD1659E9BEA2881C25216BA7870CBC185CB4312137584AB6974D1797CC94C579F2FEDAF01F86CE945C06BE5EC039690C04D31BDD6A20CE73E9229E019295B15C463857F0B53C0D1F67A2BED0D6EA72F33BDDF6551E656D6C97ECA4673DCB85AE84D6DE4AD08AEE4991EB493374F400C08C1BDD84AF4C4943FD9E454CF9DB3D188EEEDBEEDAB3866D504F51B9E0DE53F7E604E642791CD3C586C816CAAEE7B3F2700A279C8E4D5CF35B3511A524570B4CD501F1FC53D8FDADBEDC40568E7081BEA24358451BFBBD47990A4FC857E578A4965F5C3C525D93912F56BD93279555BD772AD36B80886D1DD55A9075A50C185291A9FEA386C754E996A06B4CC64F6FA2B2C6BE4996E9B065CE3AA5EC602F6577645040627798385F213BF04C70CA649291F887E80DFD1A7060AEC92D0830FDA2BF7D9EF352049FAD9966174FAA8F9E9BC6753392BFB86BBFCA33165B9496C5840D5855FFE575CE2B0F996CFAB52C2E2AFD84583CD532D3D4EB96E3D4B26C76E3D4B00C121E500C326EAB1D78CAE1EDA748DCB4345BE3DE8AD1D423DDB1456DEBCB98A286F359A087DB5C70DB809BF74C5DEBB52DA3B4508373A6F68D563BDEAEAFA611DDA9552B7EBE534848E17D57CE7527990D6BF5D489E9E152F895FD376CA67EC613F427E2B4374E65C171DC568BEC0CD83CE1D02027C133F7271355A770CF9CC70499997216AF34B9F4C18167854F70786A36CEEA9A1FE4CEF4B107C716FF74F3317E0A3A4C09A90572493C398D8CE81375AB29FC71B8E90AD02468053856F0AE46232E66DA0D24A1591F9B8123034E30D369FC0FDAD70F44]
}
Add(AlphaImage,7116472,357,77)
{
Left=1
Top=1
Width=65
Height=65
Point(Handle)
Point(onPaint)
Point(doRefresh)
Point(doBringToFront)
}
Add(Hub,5378488,329,133)
{
OutCount=3
link(onEvent1,9360828:doLoadFromStream,[])
link(onEvent2,9360828:doPlay,[])
link(onEvent3,4497128:doTimer,[(364,153)(364,167)])
}
Add(Img_MultiText,4362684,525,217)
{
DrawSource=2
Font=[MS Sans Serif,10,0,32768,1]
Text="100%"
link(Text,12482884:FString,[])
}
Add(Timer,4497128,385,161)
{
Interval=100
Enable=1
link(onTimer,3863076:doNext,[])
}
Add(CounterEx,3863076,434,161)
{
Point(onThroughMax)
Point(doReset)
link(onNext,9007019:doEvent1,[])
}
Add(FormatStr,12482884,532,161)
{
Mask="%1%"
Point(FString)
}
Add(Hub,9007019,483,161)
{
link(onEvent1,12482884:doString,[])
link(onEvent2,7073153:doRefresh,[(521,174)(521,139)])
}
Add(AlphaImage,7073153,532,119)
{
Left=17
Top=24
Width=32
Height=16
Point(Handle)
Point(onPaint)
Point(doRefresh)
link(onPaint,4362684:doDraw,[(576,132)(576,178)(513,178)(513,223)])
}
Add(TransparentManager,8707335,245,210)
{
Name="clf"
TransparentMode=1
TransparentType=1
TransparentColor=-16777216
FormTranspColor=-16777212
}
Add(DoData,7868854,63,42)
{
Data=Integer(1)
link(onEventData,11943318:doEvent1,[])
}
Add(Hub,11943318,112,42)
{
link(onEvent1,6277519:doWork2,[(138,48)(138,97)])
link(onEvent2,5378488:doEvent1,[(228,55)(228,139)])
}
Add(DoData,4030299,154,63)
{
Data=Integer(0)
link(onEventData,13971480:doEvent1,[(244,69)(244,174)])
}
Add(Hub,13971480,259,168)
{
OutCount=3
link(onEvent1,4497128:doStop,[])
link(onEvent2,9360828:doStop,[(359,181)(359,153)])
link(onEvent3,6277519:doWork3,[(285,188)(285,144)(116,144)])
}
Add(HubEx,6277519,112,91)
{
Angle=2
link(onEvent,12747976:doVisible,[(58,97)(58,146)])
}
END_SDK
Add(Thread,9860669,154,259)
{
Delay=0
FastStop=0
link(onExec,9268460:doWork,[])
}
Add(Hub,4926001,98,238)
{
OutCount=4
link(onEvent1,9902921:doSave,[(126,244)(126,146)])
link(onEvent2,9606580:doValue,[(172,251)(172,223)])
link(onEvent3,1103216:doWork1,[(150,258)(150,188)])
link(onEvent4,9860669:doStart,[])
}
Add(Memory,9606580,231,217)
{
}
Add(ChildPanel,1734534,238,161)
{
link(onEvent1,8118960:doExecute,[(282,167)(282,216)(37,216)(37,265)])
}
BEGIN_SDK
Add(EditMulti,9967176,21,21)
{
EventCount=1
VarCount=1
link(Var1,6718343:Selected,[(27,203)(90,203)])
}
Add(Panel,16757455,35,105)
{
Width=629
Align=2
}
Add(Button,9055610,133,56)
{
Left=395
Top=15
Caption="Dll"
link(onClick,9967176:onEvent1,[(243,62)(243,27)])
}
Add(RadioButton,6718343,84,154)
{
Left=10
Top=15
Width=140
Selected=0
Caption="Статическая загрузка"
link(onSelect,7282839:doSelect,[])
}
Add(RadioButton,7282839,189,154)
{
Left=155
Top=15
Width=150
Caption="Динамическая загрузка"
link(onSelect,6718343:doSelect,[(233,160)(233,148)(72,148)(72,160)])
}
END_SDK